Andrew Morton wrote:
I'd have thought that a suitable wrapper around a suitably-modified sync_sb_inodes() would be appropriate for both filesystems?
Ok, I've modified sync_inodes_sb() so that I can pass it my own wbc, where I set wcb->nr_to_write = 20. It gives me _exactly_ what I want. It just flushes a bit more then 20 pages and returns. I use WB_SYNC_ALL. Great! Now I would like to understand why it works :-) To my surprise, it does not deadlock! I call it from ->prepare_write where I'm holding i_mutex, and it works just fine. It calls ->writepage() without trying to lock i_mutex! This looks like some witchcraft for me. This means that if I'm in the middle of an operation or ino #X, I own its i_mutex, but not I_LOCK, I can be preempted and ->writepage can be called for a dirty page belonging to this inode #X? I haven't seen this in practice and I do not believe this may happen. Why? Could you or someone please give me a hint what exactly inode->i_flags & I_LOCK protects? What is its relationship to i_mutex? -- Best Regards, Artem Bityutskiy (Артём Битюцкий) - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/