--- linux/fs/block_dev.c.1 2003-09-05 17:20:21.000000000 -0400 +++ linux/fs/block_dev.c 2003-09-05 17:24:02.000000000 -0400 @@ -678,13 +678,16 @@ struct inode *bd_inode = bdev->bd_inode; down(&bdev->bd_sem); - lock_kernel(); if (kind == BDEV_FILE) __block_fsync(bd_inode); else if (kind == BDEV_FS) fsync_no_super(rdev); - if (!--bdev->bd_openers) + lock_kernel(); + if (!--bdev->bd_openers) { + unlock_kernel(); kill_bdev(bdev); + lock_kernel(); + } if (bdev->bd_op->release) ret = bdev->bd_op->release(bd_inode, NULL); if (bdev->bd_op->owner)