Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e2cf80d7 authored by Trond Myklebust's avatar Trond Myklebust Committed by J. Bruce Fields
Browse files

nfsd: Store the filehandle with the struct nfs4_file



For use when we may not have a struct inode.

Signed-off-by: default avatarTrond Myklebust <trond.myklebust@primarydata.com>
Signed-off-by: default avatarJeff Layton <jlayton@primarydata.com>
Signed-off-by: default avatarJ. Bruce Fields <bfields@redhat.com>
parent fc8e5a64
Loading
Loading
Loading
Loading
+6 −4
Original line number Diff line number Diff line
@@ -2833,7 +2833,8 @@ static struct nfs4_file *nfsd4_alloc_file(void)
}

/* OPEN Share state helper functions */
static void nfsd4_init_file(struct nfs4_file *fp, struct inode *ino)
static void nfsd4_init_file(struct nfs4_file *fp, struct inode *ino,
		struct knfsd_fh *fh)
{
	unsigned int hashval = file_hashval(ino);

@@ -2845,6 +2846,7 @@ static void nfsd4_init_file(struct nfs4_file *fp, struct inode *ino)
	INIT_LIST_HEAD(&fp->fi_delegations);
	ihold(ino);
	fp->fi_inode = ino;
	fh_copy_shallow(&fp->fi_fhandle, fh);
	fp->fi_had_conflict = false;
	fp->fi_lease = NULL;
	fp->fi_share_deny = 0;
@@ -3049,14 +3051,14 @@ find_file(struct inode *ino)
}

static struct nfs4_file *
find_or_add_file(struct inode *ino, struct nfs4_file *new)
find_or_add_file(struct inode *ino, struct nfs4_file *new, struct knfsd_fh *fh)
{
	struct nfs4_file *fp;

	spin_lock(&state_lock);
	fp = find_file_locked(ino);
	if (fp == NULL) {
		nfsd4_init_file(new, ino);
		nfsd4_init_file(new, ino, fh);
		fp = new;
	}
	spin_unlock(&state_lock);
@@ -3711,7 +3713,7 @@ nfsd4_process_open2(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nf
	 * and check for delegations in the process of being recalled.
	 * If not found, create the nfs4_file struct
	 */
	fp = find_or_add_file(ino, open->op_file);
	fp = find_or_add_file(ino, open->op_file, &current_fh->fh_handle);
	if (fp != open->op_file) {
		status = nfs4_check_deleg(cl, open, &dp);
		if (status)
+1 −0
Original line number Diff line number Diff line
@@ -396,6 +396,7 @@ struct nfs4_file {
	struct file		*fi_deleg_file;
	struct file_lock	*fi_lease;
	atomic_t		fi_delegees;
	struct knfsd_fh		fi_fhandle;
	struct inode		*fi_inode;
	bool			fi_had_conflict;
};