linux/fs/nfs
NeilBrown a2ad63daa8 VFS: add FMODE_CAN_ODIRECT file flag
Currently various places test if direct IO is possible on a file by
checking for the existence of the direct_IO address space operation.
This is a poor choice, as the direct_IO operation may not be used - it is
only used if the generic_file_*_iter functions are called for direct IO
and some filesystems - particularly NFS - don't do this.

Instead, introduce a new f_mode flag: FMODE_CAN_ODIRECT and change the
various places to check this (avoiding pointer dereferences).
do_dentry_open() will set this flag if ->direct_IO is present, so
filesystems do not need to be changed.

NFS *is* changed, to set the flag explicitly and discard the direct_IO
entry in the address_space_operations for files.

Other filesystems which currently use noop_direct_IO could usefully be
changed to set this flag instead.

Link: https://lkml.kernel.org/r/164859778128.29473.15189737957277399416.stgit@noble.brown
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: NeilBrown <neilb@suse.de>
Tested-by: David Howells <dhowells@redhat.com>
Tested-by: Geert Uytterhoeven <geert+renesas@glider.be>
Cc: Hugh Dickins <hughd@google.com>
Cc: Mel Gorman <mgorman@techsingularity.net>
Cc: Trond Myklebust <trond.myklebust@hammerspace.com>
Cc: Miaohe Lin <linmiaohe@huawei.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
2022-05-09 18:20:49 -07:00
..
blocklayout block: pass a block_device and opf to bio_alloc 2022-02-02 07:49:59 -07:00
filelayout pNFS/files: Ensure pNFS allocation modes are consistent with nfsiod 2022-03-22 15:52:56 -04:00
flexfilelayout pNFS/flexfiles: Ensure pNFS allocation modes are consistent with nfsiod 2022-03-22 15:52:56 -04:00
cache_lib.c
cache_lib.h
callback_proc.c NFSv4/pNFS: Fix another issue with a list iterator pointing to the head 2022-03-28 08:36:34 -04:00
callback_xdr.c NFS: remove unneeded check in decode_devicenotify_args() 2022-03-13 12:59:34 -04:00
callback.c NFSD: Move svc_serv_ops::svo_function into struct svc_serv 2022-02-28 10:26:40 -05:00
callback.h NFSv4.1: Fix uninitialised variable in devicenotify 2022-01-06 14:00:20 -05:00
client.c NFSv4.1 provide mount option to toggle trunking discovery 2022-03-21 10:36:49 -04:00
delegation.c NFSv4: Charge NFSv4 open state trackers to kmemcg 2022-02-25 18:50:12 -05:00
delegation.h NFSv4: Fix delegation return in cases where we have to retry 2021-06-13 19:36:27 -04:00
dir.c NFS: Replace readdir's use of xxhash() with hash_64() 2022-04-07 16:19:47 -04:00
direct.c nfs: rename nfs_direct_IO and use as ->swap_rw 2022-05-09 18:20:48 -07:00
dns_resolve.c NFS: remove duplicate headers 2020-05-27 10:10:12 -04:00
dns_resolve.h
export.c nfs: block notification on fs with its own ->lock 2022-01-08 14:42:01 -05:00
file.c VFS: add FMODE_CAN_ODIRECT file flag 2022-05-09 18:20:49 -07:00
fs_context.c NFSv4.1 provide mount option to toggle trunking discovery 2022-03-21 10:36:49 -04:00
fscache.c Netfs prep for write helpers 2022-03-31 15:49:36 -07:00
fscache.h NFS: Rename fscache read and write pages functions 2022-03-13 12:59:35 -04:00
getroot.c NFS: Remove the nfs4_label argument from nfs_setsecurity 2021-11-05 14:54:40 -04:00
inode.c NFS client bugfixes for Linux 5.18 2022-04-08 07:39:17 -10:00
internal.h NFSv4: fix open failure with O_ACCMODE flag 2022-03-29 22:14:00 -04:00
io.c NFS: Fix up incorrect documentation 2021-04-05 09:04:20 -04:00
iostat.h
Kconfig NFS: Replace readdir's use of xxhash() with hash_64() 2022-04-07 16:19:47 -04:00
Makefile nfs: Convert to new fscache volume/cookie API 2022-01-10 11:53:25 +00:00
mount_clnt.c nfs: hornor timeo and retrans option when mounting NFSv3 2021-04-05 09:04:21 -04:00
namespace.c NFS: Remove the label from the nfs4_lookup_res struct 2021-11-05 14:54:39 -04:00
netns.h
nfs2super.c
nfs2xdr.c NFS: Optimise away the previous cookie field 2022-03-02 08:43:39 -05:00
nfs3_fs.h vfs: add rcu argument to ->get_acl() callback 2021-08-18 22:08:24 +02:00
nfs3acl.c vfs: add rcu argument to ->get_acl() callback 2021-08-18 22:08:24 +02:00
nfs3client.c
nfs3proc.c NFS: pass cred explicitly for access tests 2022-01-06 14:00:20 -05:00
nfs3super.c
nfs3xdr.c NFS: Optimise away the previous cookie field 2022-03-02 08:43:39 -05:00
nfs4_fs.h NFSv4: keep state manager thread active if swap is enabled 2022-03-13 12:59:35 -04:00
nfs4client.c nfs: nfs4clinet: check the return value of kstrdup() 2022-01-06 14:00:20 -05:00
nfs4file.c NFSv4: fix open failure with O_ACCMODE flag 2022-03-29 22:14:00 -04:00
nfs4getroot.c
nfs4idmap.c Fix user namespace leak 2021-10-20 18:09:54 -04:00
nfs4idmap.h
nfs4namespace.c NFSv4 handle port presence in fs_location server string 2022-01-13 09:36:58 -05:00
nfs4proc.c NFSv4/pnfs: Handle RPC allocation errors in nfs4_proc_layoutget 2022-04-07 16:20:00 -04:00
nfs4renewd.c treewide: remove editor modelines and cruft 2021-05-07 00:26:34 -07:00
nfs4session.c NFSv4: Sanity check the parameters in nfs41_update_target_slotid() 2021-11-07 09:23:14 -05:00
nfs4session.h NFSv4: Sanity check the parameters in nfs41_update_target_slotid() 2021-11-07 09:23:14 -05:00
nfs4state.c NFS client updates for Linux 5.18 2022-03-29 18:55:37 -07:00
nfs4super.c NFS: Adjust fs_context error logging 2021-01-10 13:32:39 -05:00
nfs4sysctl.c
nfs4trace.c
nfs4trace.h NFSv4.2 add tracepoint to OFFLOAD_CANCEL 2021-11-04 19:43:30 -04:00
nfs4xdr.c NFS: Optimise away the previous cookie field 2022-03-02 08:43:39 -05:00
nfs42.h NFSv4.2: add the extended attribute proc functions. 2020-07-13 17:52:45 -04:00
nfs42proc.c NFS: replace usage of found with dedicated list iterator variable 2022-03-24 12:06:07 -04:00
nfs42xattr.c NFSv4.2: Fix missing removal of SLAB_ACCOUNT on kmem_cache allocation 2022-04-07 16:20:00 -04:00
nfs42xdr.c NFSv42: Don't fail clone() unless the OP_CLONE operation failed 2021-11-17 14:08:23 -05:00
nfs.h
nfsroot.c nfsroot: Default mount option should ask for built-in NFS version 2020-11-02 10:29:03 -05:00
nfstrace.c NFSv4: Catch and trace server filehandle encoding errors 2021-04-14 09:36:29 -04:00
nfstrace.h NFS: Replace dfprintks with tracepoints in fscache read and write page functions 2022-03-13 12:59:35 -04:00
pagelist.c NFS: Don't loop forever in nfs_do_recoalesce() 2022-03-25 21:51:03 -04:00
pnfs_dev.c NFSv4/pnfs: Add tracing for the deviceid cache 2020-12-16 17:25:24 -05:00
pnfs_nfs.c NFS: nfsiod should not block forever in mempool_alloc() 2022-03-22 15:52:56 -04:00
pnfs.c NFSv4/pNFS: Fix another issue with a list iterator pointing to the head 2022-03-28 08:36:34 -04:00
pnfs.h NFSv4/pNFS: Fix another issue with a list iterator pointing to the head 2022-03-28 08:36:34 -04:00
proc.c NFS: NFSv2/v3 clients should never be setting NFS_CAP_XATTR 2022-02-25 18:50:13 -05:00
read.c NFS: discard NFS_RPC_SWAPFLAGS and RPC_TASK_ROOTCREDS 2022-03-13 12:59:35 -04:00
super.c nfs: Convert to new fscache volume/cookie API 2022-01-10 11:53:25 +00:00
symlink.c
sysctl.c
sysfs.c Revert "NFSv4: use unique client identifiers in network namespaces" 2022-02-28 10:09:23 -05:00
sysfs.h NFSv4: Fix up RCU annotations for struct nfs_netns_client 2020-10-15 13:31:08 -04:00
unlink.c NFS: Ensure rpc_run_task() cannot fail in nfs_async_rename() 2022-04-07 16:20:00 -04:00
write.c NFS client updates for Linux 5.18 2022-03-29 18:55:37 -07:00