Messages in this thread | | | Date | Sun, 20 Nov 2005 12:19:17 -0500 | From | Paul Clements <> | Subject | Re: [NBD] Use per-device semaphore instead of BKL |
| |
Herbert Xu wrote: > On Sun, Nov 20, 2005 at 09:34:19AM +1100, herbert wrote: > >>This is intentional actually. nbd_clear_queue never races against >>nbd_find_request because the ioctl is protected by the BKL. If it >>weren't, then we have much worse problems to worry about (e.g., >>while you're clearing the queue someone else could have set the >>socket again and started queueing requests). > > > Actually, we do have bigger problems :) The BKL is dropped every > time you sleep, and nbd_do_it is definitely a frequent sleeper :)
The dropping of the lock in nbd_do_it is actually critical to the way nbd functions. nbd_do_it runs for the lifetime of the nbd device, so if nbd_do_it were holding some lock (BKL or otherwise), we'd have big problems.
> This isn't really an issue in practice though because the NBD > client program is single-threaded and doesn't share its file > descriptors with anyone else.
Right, there's no problem in practice.
> However, we shouldn't make it too easy for the user to shoot himself > in the foot. If he's going to do that, let him at least pay for the > bullet :) > > So here is a patch to use a per-device semaphore instead of the > BKL to protect the ioctl's against each other.
The problem with this patch is that no ioctls can come in once nbd_do_it starts because nbd_do_it runs for the lifetime of the device.
I think we really just need to add the acquiring of queue_lock in nbd_clear_que to your previous patch and leave it at that. I'll code that up and test it.
Thanks, Paul - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |