Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[media] videobuf-dvb: avoid spurious ENOMEM when CONFIG_DVB_NET=n

videobuf_dvb_register_bus relies on dvb_net_init to set dvbnet->dvbdev
on success, but ever since commit fcc8e7d8c0e2 ("dvb_net: Simplify the
code if DVB NET is not defined"), ->dvbdev is left unset when
networking support is disabled. Therefore in such configurations
videobuf_dvb_register_bus always returns failure, tripping
little-tested error handling paths and preventing the device from
being initialized and used.

Now that dvb_net_init returns a nonzero value on error, we can use
that as a more reliable error indication. Do so.

Now your card be used with CONFIG_DVB_NET=n, and the kernel will pass
on a more useful error code describing what happened when
CONFIG_DVB_NET=y but dvb_net_init fails due to resource exhaustion.

Reported-by: David Fries <David@Fries.net>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>

authored by

Jonathan Nieder and committed by
Mauro Carvalho Chehab
5c96ebb7 58fae673

+4 -3
+4 -3
drivers/media/video/videobuf-dvb.c
··· 226 226 } 227 227 228 228 /* register network adapter */ 229 - dvb_net_init(adapter, &dvb->net, &dvb->demux.dmx); 230 - if (dvb->net.dvbdev == NULL) { 231 - result = -ENOMEM; 229 + result = dvb_net_init(adapter, &dvb->net, &dvb->demux.dmx); 230 + if (result < 0) { 231 + printk(KERN_WARNING "%s: dvb_net_init failed (errno = %d)\n", 232 + dvb->name, result); 232 233 goto fail_fe_conn; 233 234 } 234 235 return 0;