From: Andi K. <ak...@su...> - 2001-01-26 19:54:01
|
On Fri, Jan 26, 2001 at 03:29:43PM -0200, Marcelo Tosatti wrote: > > On Fri, 26 Jan 2001, Andi Kleen wrote: > > > On Tue, Jan 23, 2001 at 05:53:55PM -0200, Marcelo Tosatti wrote: > > > The right thing is to make the ext2 functions flush dirty buffers, if > > > needed, after unlocking the sb lock. > > > > Hopefully you can do that without additional memory allocation. > > > > This means that some random process can get blocked when you run out of > > elevator entries, even when it doesn't do any IO anymore. > > You mean some other process will have to block because I'm "bypassing" the > buffer dirty watermark? Maybe I misunderstood your suggestion. As I understand you basically want to create a construct like the linux socket lock -- when a try_lock() fails queue the work item somehow and the original lock holder processes it in its context after it freed the lock. flushing would probably end up doing a ll_rw_block(), right? The problem is that ll_rw_block is not 100% asynchronous, when you run out of elevator entries it'll block. This means that the lock freer could block on some foreign IO. Not nice. -Andi |