On Sat, 3 Mar 2012 21:25:55 +0800 Fengguang Wu <fengguang.wu@xxxxxxxxx> wrote: > > > get_page() looks the perfect solution to verify if the struct inode > > > pointer (w/o igrab) is still live and valid. > > > > > > [...upon rethinking...] Oh but still we need to lock some page to pin > > > the inode during the writeout. Then there is the dilemma: if the page > > > is locked, we effectively keep it from being written out... > > > > No, all you need to do is to structure the code so that after the page > > gets unlocked, the kernel thread does not touch the address_space. So > > the processing within the kthread is along the lines of > > > > writearound(locked_page) > > { > > write some pages preceding locked_page; /* touches address_space */ > > It seems the above line will lead to ABBA deadlock. > > At least btrfs will lock a number of pages in lock_delalloc_pages(). Well, this code locks multiple pages too. I forget what I did about that - probably trylock. Dirty pages aren't locked for very long. -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/ Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>