[ENBD] Kernel oops (nbd-2.4.31) or failed connections
Anders Blomdell
anders.blomdell at control.lth.se
Wed May 19 08:41:59 MDT 2004
From previous mail (selected lines):
May 19 16:01:18 newsperry-01 kernel: ABD: enbd_open:1305 enbd_dev[0]=0
May 19 16:01:18 newsperry-01 kernel: ABD: enbd_open:1305
enbd_dev[0]=f7cca400
May 19 16:01:18 newsperry-01 kernel: ABD: enbd_ioctl:4556
enbd_dev[0]=f7cca400
May 19 16:01:18 newsperry-01 kernel: ABD: enbd_release:5326
enbd_dev[0]=f7cca400
May 19 16:01:18 newsperry-01 kernel: ABD: enbd_release:5417
enbd_dev[0]=f7cca400
My interpretation:
Two processes are doing the open (MT/SMP machine), enbd_dev[X]->refcnt
is not properly
protected neither in enbd_open or in enbd_release, possible scenario:
enbd_open: enbd_open:
down(enbd_sem) down(enbd_sem) waiting...
enbd[0] = kmalloc(...)
up(enbd_sem)
down(enbd_sem) continued...
enbd_dev[0]->ref_cnt++
....
enbd_release:
enbd_dev[0]->ref_cnt--
if (enbd_dev[0]->ref_cnt <= 0) {
enbd_dev[0]->ref_cnt++
enbd_dev[0] = NULL;
}
My guess is that enbd_dev[0] gets tucked into some register, thereby
making
the timing less strict (i.e enbd_dev[0]->ref_cnt++, might involve
assigning new
values to kfree'd memory).
BTW: The complexity of this driver is really stunning...
Regards
Anders
More information about the ENBD
mailing list