mirror of https://gitee.com/openkylin/linux.git
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: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
parent
82d101d58a
commit
ecfc555a83
24
fs/Kconfig
24
fs/Kconfig
|
@ -1637,30 +1637,6 @@ config NFS_V4
|
||||||
|
|
||||||
If unsure, say N.
|
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
|
config NFSD
|
||||||
tristate "NFS server support"
|
tristate "NFS server support"
|
||||||
depends on INET
|
depends on INET
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
obj-$(CONFIG_NFS_FS) += nfs.o
|
obj-$(CONFIG_NFS_FS) += nfs.o
|
||||||
|
|
||||||
nfs-y := client.o dir.o file.o getroot.o inode.o super.o nfs2xdr.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
|
write.o namespace.o mount_clnt.o
|
||||||
nfs-$(CONFIG_ROOT_NFS) += nfsroot.o
|
nfs-$(CONFIG_ROOT_NFS) += nfsroot.o
|
||||||
nfs-$(CONFIG_NFS_V3) += nfs3proc.o nfs3xdr.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 \
|
delegation.o idmap.o \
|
||||||
callback.o callback_xdr.o callback_proc.o \
|
callback.o callback_xdr.o callback_proc.o \
|
||||||
nfs4namespace.o
|
nfs4namespace.o
|
||||||
nfs-$(CONFIG_NFS_DIRECTIO) += direct.o
|
|
||||||
nfs-$(CONFIG_SYSCTL) += sysctl.o
|
nfs-$(CONFIG_SYSCTL) += sysctl.o
|
||||||
|
|
|
@ -234,10 +234,8 @@ nfs_file_read(struct kiocb *iocb, const struct iovec *iov,
|
||||||
ssize_t result;
|
ssize_t result;
|
||||||
size_t count = iov_length(iov, nr_segs);
|
size_t count = iov_length(iov, nr_segs);
|
||||||
|
|
||||||
#ifdef CONFIG_NFS_DIRECTIO
|
|
||||||
if (iocb->ki_filp->f_flags & O_DIRECT)
|
if (iocb->ki_filp->f_flags & O_DIRECT)
|
||||||
return nfs_file_direct_read(iocb, iov, nr_segs, pos);
|
return nfs_file_direct_read(iocb, iov, nr_segs, pos);
|
||||||
#endif
|
|
||||||
|
|
||||||
dfprintk(VFS, "nfs: read(%s/%s, %lu@%lu)\n",
|
dfprintk(VFS, "nfs: read(%s/%s, %lu@%lu)\n",
|
||||||
dentry->d_parent->d_name.name, dentry->d_name.name,
|
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,
|
.write_end = nfs_write_end,
|
||||||
.invalidatepage = nfs_invalidate_page,
|
.invalidatepage = nfs_invalidate_page,
|
||||||
.releasepage = nfs_release_page,
|
.releasepage = nfs_release_page,
|
||||||
#ifdef CONFIG_NFS_DIRECTIO
|
|
||||||
.direct_IO = nfs_direct_IO,
|
.direct_IO = nfs_direct_IO,
|
||||||
#endif
|
|
||||||
.launder_page = nfs_launder_page,
|
.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;
|
ssize_t result;
|
||||||
size_t count = iov_length(iov, nr_segs);
|
size_t count = iov_length(iov, nr_segs);
|
||||||
|
|
||||||
#ifdef CONFIG_NFS_DIRECTIO
|
|
||||||
if (iocb->ki_filp->f_flags & O_DIRECT)
|
if (iocb->ki_filp->f_flags & O_DIRECT)
|
||||||
return nfs_file_direct_write(iocb, iov, nr_segs, pos);
|
return nfs_file_direct_write(iocb, iov, nr_segs, pos);
|
||||||
#endif
|
|
||||||
|
|
||||||
dfprintk(VFS, "nfs: write(%s/%s(%ld), %lu@%Ld)\n",
|
dfprintk(VFS, "nfs: write(%s/%s(%ld), %lu@%Ld)\n",
|
||||||
dentry->d_parent->d_name.name, dentry->d_name.name,
|
dentry->d_parent->d_name.name, dentry->d_name.name,
|
||||||
|
|
|
@ -116,13 +116,8 @@ extern void nfs_destroy_readpagecache(void);
|
||||||
extern int __init nfs_init_writepagecache(void);
|
extern int __init nfs_init_writepagecache(void);
|
||||||
extern void nfs_destroy_writepagecache(void);
|
extern void nfs_destroy_writepagecache(void);
|
||||||
|
|
||||||
#ifdef CONFIG_NFS_DIRECTIO
|
|
||||||
extern int __init nfs_init_directcache(void);
|
extern int __init nfs_init_directcache(void);
|
||||||
extern void nfs_destroy_directcache(void);
|
extern void nfs_destroy_directcache(void);
|
||||||
#else
|
|
||||||
#define nfs_init_directcache() (0)
|
|
||||||
#define nfs_destroy_directcache() do {} while(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* nfs2xdr.c */
|
/* nfs2xdr.c */
|
||||||
extern int nfs_stat_to_errno(int);
|
extern int nfs_stat_to_errno(int);
|
||||||
|
|
Loading…
Reference in New Issue