From: Michael Hunold unfortunately it's possible to remove a DVB adapter module even if a DVB network device has been set up using this adapter. The attached patch fixes this problem. --- 25-akpm/drivers/media/dvb/dvb-core/dvb_net.c | 17 +++++++++++++++-- 1 files changed, 15 insertions(+), 2 deletions(-) diff -puN drivers/media/dvb/dvb-core/dvb_net.c~dvbfix-adapter-module-removal-bug drivers/media/dvb/dvb-core/dvb_net.c --- 25/drivers/media/dvb/dvb-core/dvb_net.c~dvbfix-adapter-module-removal-bug Thu Apr 29 15:49:26 2004 +++ 25-akpm/drivers/media/dvb/dvb-core/dvb_net.c Thu Apr 29 15:49:26 2004 @@ -1095,9 +1095,15 @@ static int dvb_net_do_ioctl(struct inode if (!capable(CAP_SYS_ADMIN)) return -EPERM; + + if (!try_module_get(dvbdev->adapter->module)) + return -EPERM; + result=dvb_net_add_if(dvbnet, dvbnetif->pid, dvbnetif->feedtype); - if (result<0) + if (result<0) { + module_put(dvbdev->adapter->module); return result; + } dvbnetif->if_num=result; break; } @@ -1120,6 +1126,7 @@ static int dvb_net_do_ioctl(struct inode case NET_REMOVE_IF: if (!capable(CAP_SYS_ADMIN)) return -EPERM; + module_put(dvbdev->adapter->module); return dvb_net_remove_if(dvbnet, (int) (long) parg); /* binary compatiblity cruft */ @@ -1130,9 +1137,15 @@ static int dvb_net_do_ioctl(struct inode if (!capable(CAP_SYS_ADMIN)) return -EPERM; + + if (!try_module_get(dvbdev->adapter->module)) + return -EPERM; + result=dvb_net_add_if(dvbnet, dvbnetif->pid, DVB_NET_FEEDTYPE_MPE); - if (result<0) + if (result<0) { + module_put(dvbdev->adapter->module); return result; + } dvbnetif->if_num=result; break; } _