There are many places inside vfs/fs where code flow depends on file->f_flags, but this check is racy because one can change it via fcntl(,F_SETFL,) For example O_DIRECT usually flag checked twice: xxx_file_write_iter -> check O_DIRECT, and perform some optimizations ->__generic_file_write_iter -> check O_DIRECT, which may break things: for example http://www.spinics.net/lists/linux-ext4/msg45683.html For that reason some filesystems simply do not use __generic_file_write_iter() wihch result in code duplication. Right way to fix this is to save volatile flags inside kiocb->ki_flags similar to ->ki_pos Other private discussion: message-id:20141218105101.GD13705@xxxxxxxxxxxxx TOC: ##First two patches introduce helpers and update generic code kiocb_flags-v1/0001-fs-save-file-f_flags-to-kiocb-ki_flags.patch kiocb_flags-v1/0002-vfs-check-kiocb-ki_flags-instead-filp-fl_flags.patch ## Switch filesystems to kiocb->ki_flags kiocb_flags-v1/0003-ext4-use-is_xxx_kiocb-instead-of-filp-fl_flags.patch kiocb_flags-v1/0004-9p-use-is_xxx_kiocb-instead-of-filp-fl_flags.patch kiocb_flags-v1/0005-btrfs-use-is_xxx_kiocb-instead-of-filp-fl_flags.patch kiocb_flags-v1/0006-ceph-use-is_xxx_kiocb-instead-of-filp-fl_flags.patch kiocb_flags-v1/0007-cifs-use-is_xxx_kiocb-instead-of-filp-fl_flags.patch kiocb_flags-v1/0008-gfs2-use-is_xxx_kiocb-instead-of-filp-fl_flags.patch kiocb_flags-v1/0009-nfs-use-is_xxx_kiocb-instead-of-filp-fl_flags.patch kiocb_flags-v1/0010-ntfs-use-is_xxx_kiocb-instead-of-filp-fl_flags.patch kiocb_flags-v1/0011-ocfs2-use-is_xxx_kiocb-instead-of-filp-fl_flags.patch kiocb_flags-v1/0012-udf-use-is_xxx_kiocb-instead-of-filp-fl_flags.patch kiocb_flags-v1/0013-xfs-use-is_xxx_kiocb-instead-of-filp-fl_flags.patch kiocb_flags-v1/0014-fuse-use-is_xxx_kiocb-instead-of-filp-fl_flags.patch ## Fix pipe and splice issues caused by race with fcntl(,F_SETFL,) kiocb_flags-v1/0015-pipe-use-is_xxx_kiocb-instead-of-filp-fl_flags.patch kiocb_flags-v1/0016-splice-fix-race-beween-splice_write-vs-fcntl-F_SETFL.patch Patch set survived basic run of xfstests -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html