Messages in this thread | | | From | "J. R. Okajima" <> | Subject | Re: [PATCH 2/9] vfs: export do_splice_direct() to modules | Date | Sat, 23 Mar 2013 11:49:11 +0900 |
| |
Al Viro: > The scenario, BTW, looks so: > process A does sb_start_write() (on your upper layer) > process B tries to freeze said upper layer and blocks, waiting for A to finish > process C grabs ->i_mutex in your upper layer > process C does vfs_write(), which blocks, since there's a pending attempt to > freeze > process A tries to grab ->i_mutex held by C and blocks
According to latest mm/filemap.c:generic_file_aio_write(), sb_start_write(inode->i_sb); mutex_lock(&inode->i_mutex); ret = __generic_file_aio_write(iocb, iov, nr_segs, &iocb->ki_pos); mutex_unlock(&inode->i_mutex); ::: sb_end_write(inode->i_sb);
Process C would block *BEFORE* i_mutex by sb_start_write()? No? Honestly speaking I didn't pay attention about the freeze feature since I don't use it. I am making aufs to support it now. But I don't know how to test it...
J. R. Okajima
| |