mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-28 06:34:12 +08:00
nfsd: Store the filehandle with the struct nfs4_file
For use when we may not have a struct inode. Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com> Signed-off-by: Jeff Layton <jlayton@primarydata.com> Signed-off-by: J. Bruce Fields <bfields@redhat.com>
This commit is contained in:
parent
fc8e5a644c
commit
e2cf80d73f
@ -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, ¤t_fh->fh_handle);
|
||||
if (fp != open->op_file) {
|
||||
status = nfs4_check_deleg(cl, open, &dp);
|
||||
if (status)
|
||||
|
@ -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;
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user