Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'work.read_write' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs

Pull read/write fix from Al Viro:
"file_start_write()/file_end_write() got mixed into vfs_iter_write() by
accident; that's a deadlock for all existing callers - they already do
that, some - quite a bit outside.

Easily fixed, fortunately"

* 'work.read_write' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs:
move file_{start,end}_write() out of do_iter_write()

+4 -2
+4 -2
fs/read_write.c
··· 925 925 if (ret < 0) 926 926 return ret; 927 927 928 - file_start_write(file); 929 928 if (file->f_op->write_iter) 930 929 ret = do_iter_readv_writev(file, iter, pos, WRITE, flags); 931 930 else 932 931 ret = do_loop_readv_writev(file, iter, pos, WRITE, flags); 933 - file_end_write(file); 934 932 if (ret > 0) 935 933 fsnotify_modify(file); 936 934 return ret; ··· 971 973 972 974 ret = import_iovec(WRITE, vec, vlen, ARRAY_SIZE(iovstack), &iov, &iter); 973 975 if (ret >= 0) { 976 + file_start_write(file); 974 977 ret = do_iter_write(file, &iter, pos, flags); 978 + file_end_write(file); 975 979 kfree(iov); 976 980 } 977 981 return ret; ··· 1241 1241 1242 1242 ret = compat_import_iovec(WRITE, vec, vlen, UIO_FASTIOV, &iov, &iter); 1243 1243 if (ret >= 0) { 1244 + file_start_write(file); 1244 1245 ret = do_iter_write(file, &iter, pos, flags); 1246 + file_end_write(file); 1245 1247 kfree(iov); 1246 1248 } 1247 1249 if (ret > 0)