diff options
Diffstat (limited to 'fs/nfs/file.c')
| -rw-r--r-- | fs/nfs/file.c | 91 | 
1 files changed, 51 insertions, 40 deletions
diff --git a/fs/nfs/file.c b/fs/nfs/file.c index 0a1f8312b4d..eca56d4b39c 100644 --- a/fs/nfs/file.c +++ b/fs/nfs/file.c @@ -40,48 +40,8 @@  #define NFSDBG_FACILITY		NFSDBG_FILE -static int nfs_file_open(struct inode *, struct file *); -static int nfs_file_release(struct inode *, struct file *); -static loff_t nfs_file_llseek(struct file *file, loff_t offset, int origin); -static int  nfs_file_mmap(struct file *, struct vm_area_struct *); -static ssize_t nfs_file_splice_read(struct file *filp, loff_t *ppos, -					struct pipe_inode_info *pipe, -					size_t count, unsigned int flags); -static ssize_t nfs_file_read(struct kiocb *, const struct iovec *iov, -				unsigned long nr_segs, loff_t pos); -static ssize_t nfs_file_splice_write(struct pipe_inode_info *pipe, -					struct file *filp, loff_t *ppos, -					size_t count, unsigned int flags); -static ssize_t nfs_file_write(struct kiocb *, const struct iovec *iov, -				unsigned long nr_segs, loff_t pos); -static int  nfs_file_flush(struct file *, fl_owner_t id); -static int  nfs_file_fsync(struct file *, loff_t, loff_t, int datasync); -static int nfs_check_flags(int flags); -static int nfs_lock(struct file *filp, int cmd, struct file_lock *fl); -static int nfs_flock(struct file *filp, int cmd, struct file_lock *fl); -static int nfs_setlease(struct file *file, long arg, struct file_lock **fl); -  static const struct vm_operations_struct nfs_file_vm_ops; -const struct file_operations nfs_file_operations = { -	.llseek		= nfs_file_llseek, -	.read		= do_sync_read, -	.write		= do_sync_write, -	.aio_read	= nfs_file_read, -	.aio_write	= nfs_file_write, -	.mmap		= nfs_file_mmap, -	.open		= nfs_file_open, -	.flush		= nfs_file_flush, -	.release	= nfs_file_release, -	.fsync		= nfs_file_fsync, -	.lock		= nfs_lock, -	.flock		= nfs_flock, -	.splice_read	= nfs_file_splice_read, -	.splice_write	= nfs_file_splice_write, -	.check_flags	= nfs_check_flags, -	.setlease	= nfs_setlease, -}; -  const struct inode_operations nfs_file_inode_operations = {  	.permission	= nfs_permission,  	.getattr	= nfs_getattr, @@ -886,3 +846,54 @@ static int nfs_setlease(struct file *file, long arg, struct file_lock **fl)  			file->f_path.dentry->d_name.name, arg);  	return -EINVAL;  } + +const struct file_operations nfs_file_operations = { +	.llseek		= nfs_file_llseek, +	.read		= do_sync_read, +	.write		= do_sync_write, +	.aio_read	= nfs_file_read, +	.aio_write	= nfs_file_write, +	.mmap		= nfs_file_mmap, +	.open		= nfs_file_open, +	.flush		= nfs_file_flush, +	.release	= nfs_file_release, +	.fsync		= nfs_file_fsync, +	.lock		= nfs_lock, +	.flock		= nfs_flock, +	.splice_read	= nfs_file_splice_read, +	.splice_write	= nfs_file_splice_write, +	.check_flags	= nfs_check_flags, +	.setlease	= nfs_setlease, +}; + +#ifdef CONFIG_NFS_V4 +static int +nfs4_file_open(struct inode *inode, struct file *filp) +{ +	/* +	 * NFSv4 opens are handled in d_lookup and d_revalidate. If we get to +	 * this point, then something is very wrong +	 */ +	dprintk("NFS: %s called! inode=%p filp=%p\n", __func__, inode, filp); +	return -ENOTDIR; +} + +const struct file_operations nfs4_file_operations = { +	.llseek		= nfs_file_llseek, +	.read		= do_sync_read, +	.write		= do_sync_write, +	.aio_read	= nfs_file_read, +	.aio_write	= nfs_file_write, +	.mmap		= nfs_file_mmap, +	.open		= nfs4_file_open, +	.flush		= nfs_file_flush, +	.release	= nfs_file_release, +	.fsync		= nfs_file_fsync, +	.lock		= nfs_lock, +	.flock		= nfs_flock, +	.splice_read	= nfs_file_splice_read, +	.splice_write	= nfs_file_splice_write, +	.check_flags	= nfs_check_flags, +	.setlease	= nfs_setlease, +}; +#endif /* CONFIG_NFS_V4 */  |