yes, i know. semaphore can sleep. but why not release lock, kmalloc, and regain lock? i think any code should reduce the chance that make others wait for it. especially it hold a write lock, not a read lock. ming On Fri, 2004-11-19 at 13:21, Kevin Corry wrote: > On Friday 19 November 2004 12:10 pm, Ming Zhang wrote: > > I am reading dm-snap.c and found that in register_snapshot(), > > http://lxr.linux.no/source/drivers/md/dm-snap.c?v=2.6.8.1#L159, > > the kmalloc is called with rwsem held. I am not sure if this is a good > > one since kmalloc may sleep as well. > > It's a semaphore, not a spinlock. Sleeping is allowed while holding a > semaphore, since other threads waiting on the semaphore are also rescheduled > (instead of just spinning).