Commit ecfc555a authored by Chuck Lever's avatar Chuck Lever Committed by Trond Myklebust
Browse files

NFS: Always enable NFS direct I/O



Since O_DIRECT is a standard feature that is enabled in most distros,
eliminate the CONFIG_NFS_DIRECTIO build option, and change the
fs/nfs/Makefile to always build in the NFS direct I/O engine.

Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
parent 82d101d5
Loading
Loading
Loading
Loading
+0 −24
Original line number Diff line number Diff line
@@ -1637,30 +1637,6 @@ config NFS_V4

	  If unsure, say N.

config NFS_DIRECTIO
	bool "Allow direct I/O on NFS files"
	depends on NFS_FS
	help
	  This option enables applications to perform uncached I/O on files
	  in NFS file systems using the O_DIRECT open() flag.  When O_DIRECT
	  is set for a file, its data is not cached in the system's page
	  cache.  Data is moved to and from user-level application buffers
	  directly.  Unlike local disk-based file systems, NFS O_DIRECT has
	  no alignment restrictions.

	  Unless your program is designed to use O_DIRECT properly, you are
	  much better off allowing the NFS client to manage data caching for
	  you.  Misusing O_DIRECT can cause poor server performance or network
	  storms.  This kernel build option defaults OFF to avoid exposing
	  system administrators unwittingly to a potentially hazardous
	  feature.

	  For more details on NFS O_DIRECT, see fs/nfs/direct.c.

	  If unsure, say N.  This reduces the size of the NFS client, and
	  causes open() to return EINVAL if a file residing in NFS is
	  opened with the O_DIRECT flag.

config NFSD
	tristate "NFS server support"
	depends on INET
+1 −2
Original line number Diff line number Diff line
@@ -5,7 +5,7 @@
obj-$(CONFIG_NFS_FS) += nfs.o

nfs-y 			:= client.o dir.o file.o getroot.o inode.o super.o nfs2xdr.o \
			   pagelist.o proc.o read.o symlink.o unlink.o \
			   direct.o pagelist.o proc.o read.o symlink.o unlink.o \
			   write.o namespace.o mount_clnt.o
nfs-$(CONFIG_ROOT_NFS)	+= nfsroot.o
nfs-$(CONFIG_NFS_V3)	+= nfs3proc.o nfs3xdr.o
@@ -14,5 +14,4 @@ nfs-$(CONFIG_NFS_V4) += nfs4proc.o nfs4xdr.o nfs4state.o nfs4renewd.o \
			   delegation.o idmap.o \
			   callback.o callback_xdr.o callback_proc.o \
			   nfs4namespace.o
nfs-$(CONFIG_NFS_DIRECTIO) += direct.o
nfs-$(CONFIG_SYSCTL) += sysctl.o
+0 −6
Original line number Diff line number Diff line
@@ -234,10 +234,8 @@ nfs_file_read(struct kiocb *iocb, const struct iovec *iov,
	ssize_t result;
	size_t count = iov_length(iov, nr_segs);

#ifdef CONFIG_NFS_DIRECTIO
	if (iocb->ki_filp->f_flags & O_DIRECT)
		return nfs_file_direct_read(iocb, iov, nr_segs, pos);
#endif

	dfprintk(VFS, "nfs: read(%s/%s, %lu@%lu)\n",
		dentry->d_parent->d_name.name, dentry->d_name.name,
@@ -383,9 +381,7 @@ const struct address_space_operations nfs_file_aops = {
	.write_end = nfs_write_end,
	.invalidatepage = nfs_invalidate_page,
	.releasepage = nfs_release_page,
#ifdef CONFIG_NFS_DIRECTIO
	.direct_IO = nfs_direct_IO,
#endif
	.launder_page = nfs_launder_page,
};

@@ -443,10 +439,8 @@ static ssize_t nfs_file_write(struct kiocb *iocb, const struct iovec *iov,
	ssize_t result;
	size_t count = iov_length(iov, nr_segs);

#ifdef CONFIG_NFS_DIRECTIO
	if (iocb->ki_filp->f_flags & O_DIRECT)
		return nfs_file_direct_write(iocb, iov, nr_segs, pos);
#endif

	dfprintk(VFS, "nfs: write(%s/%s(%ld), %lu@%Ld)\n",
		dentry->d_parent->d_name.name, dentry->d_name.name,
+0 −5
Original line number Diff line number Diff line
@@ -116,13 +116,8 @@ extern void nfs_destroy_readpagecache(void);
extern int __init nfs_init_writepagecache(void);
extern void nfs_destroy_writepagecache(void);

#ifdef CONFIG_NFS_DIRECTIO
extern int __init nfs_init_directcache(void);
extern void nfs_destroy_directcache(void);
#else
#define nfs_init_directcache() (0)
#define nfs_destroy_directcache() do {} while(0)
#endif

/* nfs2xdr.c */
extern int nfs_stat_to_errno(int);