[media] dvb-bt8xx: handle errors from dvb_net_init
authorJonathan Nieder <jrnieder@gmail.com>
Sat, 31 Dec 2011 11:06:37 +0000 (08:06 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Fri, 6 Jan 2012 14:49:18 +0000 (12:49 -0200)
Clean up and error out if dvb_net_init fails (for example when
running out of memory).

From an audit of dvb_net_init callers, now that dvb_net_init
has learned to return a nonzero value from time to time.

[mchehab.redhat.com: codingstyle fix: printk() should include KERN_ facility level]
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/dvb/bt8xx/dvb-bt8xx.c

index 1952f6bfc90e6ddd3e6b6598f2238a6da639747c..8a31349dd7d51eaee4b5020f549eff4341fc4897 100644 (file)
@@ -782,7 +782,12 @@ static int __devinit dvb_bt8xx_load_card(struct dvb_bt8xx_card *card, u32 type)
                goto err_remove_mem_frontend;
        }
 
-       dvb_net_init(&card->dvb_adapter, &card->dvbnet, &card->demux.dmx);
+       result = dvb_net_init(&card->dvb_adapter, &card->dvbnet, &card->demux.dmx);
+       if (result < 0) {
+               printk(KERN_ERR,
+                      "dvb_bt8xx: dvb_net_init failed (errno = %d)\n", result);
+               goto err_disconnect_frontend;
+       }
 
        tasklet_init(&card->bt->tasklet, dvb_bt8xx_task, (unsigned long) card);
 
@@ -790,6 +795,8 @@ static int __devinit dvb_bt8xx_load_card(struct dvb_bt8xx_card *card, u32 type)
 
        return 0;
 
+err_disconnect_frontend:
+       card->demux.dmx.disconnect_frontend(&card->demux.dmx);
 err_remove_mem_frontend:
        card->demux.dmx.remove_frontend(&card->demux.dmx, &card->fe_mem);
 err_remove_hw_frontend: