[lkml]   [2005]   [Nov]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
SubjectRe: [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.

To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to
More majordomo info at
Please read the FAQ at

 \ /
  Last update: 2005-11-20 18:22    [W:0.030 / U:6.972 seconds]
©2003-2018 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site