Commit 68ffd8ba authored by Neil Brown's avatar Neil Brown Committed by Linus Torvalds

[PATCH] nfsd4: store-file-with-deleg

The only reason we're keeping a pointer to the stateid in the delegation is so
we can get at st_vfs_file.  So we should just keep a pointer to the struct
file instead.
Signed-off-by: default avatarJ. Bruce Fields <bfields@citi.umich.edu>
Signed-off-by: default avatarNeil Brown <neilb@cse.unsw.edu.au>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 9df0b297
...@@ -145,7 +145,7 @@ alloc_init_deleg(struct nfs4_client *clp, struct nfs4_stateid *stp, struct svc_f ...@@ -145,7 +145,7 @@ alloc_init_deleg(struct nfs4_client *clp, struct nfs4_stateid *stp, struct svc_f
dp->dl_client = clp; dp->dl_client = clp;
dp->dl_file = fp; dp->dl_file = fp;
dp->dl_flock = NULL; dp->dl_flock = NULL;
dp->dl_stp = NULL; dp->dl_vfs_file = NULL;
dp->dl_type = type; dp->dl_type = type;
dp->dl_recall.cbr_dp = NULL; dp->dl_recall.cbr_dp = NULL;
dp->dl_recall.cbr_ident = cb->cb_ident; dp->dl_recall.cbr_ident = cb->cb_ident;
...@@ -198,12 +198,10 @@ nfs4_put_delegation(struct nfs4_delegation *dp) ...@@ -198,12 +198,10 @@ nfs4_put_delegation(struct nfs4_delegation *dp)
static void static void
nfs4_close_delegation(struct nfs4_delegation *dp) nfs4_close_delegation(struct nfs4_delegation *dp)
{ {
struct file *filp = dp->dl_stp->st_vfs_file; struct file *filp = dp->dl_vfs_file;
dprintk("NFSD: close_delegation dp %p\n",dp); dprintk("NFSD: close_delegation dp %p\n",dp);
release_stateid_lockowners(dp->dl_stp); dp->dl_vfs_file = NULL;
kfree(dp->dl_stp);
dp->dl_stp = NULL;
atomic_set(&dp->dl_state, NFS4_RECALL_COMPLETE); atomic_set(&dp->dl_state, NFS4_RECALL_COMPLETE);
nfsd_close(filp); nfsd_close(filp);
vfsclose++; vfsclose++;
...@@ -214,9 +212,9 @@ static void ...@@ -214,9 +212,9 @@ static void
release_delegation(struct nfs4_delegation *dp) release_delegation(struct nfs4_delegation *dp)
{ {
/* delayed nfsd_close */ /* delayed nfsd_close */
if (dp->dl_stp) if (dp->dl_vfs_file)
nfs4_close_delegation(dp); nfs4_close_delegation(dp);
} else { else {
dprintk("NFSD: release_delegation remove lease dl_flock %p\n", dprintk("NFSD: release_delegation remove lease dl_flock %p\n",
dp->dl_flock); dp->dl_flock);
remove_lease(dp->dl_flock); remove_lease(dp->dl_flock);
...@@ -1174,7 +1172,8 @@ release_stateid(struct nfs4_stateid *stp, int flags) ...@@ -1174,7 +1172,8 @@ release_stateid(struct nfs4_stateid *stp, int flags)
list_for_each_entry(dp, &fp->fi_del_perfile, dl_del_perfile) { list_for_each_entry(dp, &fp->fi_del_perfile, dl_del_perfile) {
if(cmp_clid(&dp->dl_client->cl_clientid, if(cmp_clid(&dp->dl_client->cl_clientid,
&stp->st_stateowner->so_client->cl_clientid)) { &stp->st_stateowner->so_client->cl_clientid)) {
dp->dl_stp = stp; dp->dl_vfs_file = stp->st_vfs_file;
release_stateid_lockowners(stp);
return; return;
} }
} }
......
...@@ -91,7 +91,7 @@ struct nfs4_delegation { ...@@ -91,7 +91,7 @@ struct nfs4_delegation {
struct nfs4_client *dl_client; struct nfs4_client *dl_client;
struct nfs4_file *dl_file; struct nfs4_file *dl_file;
struct file_lock *dl_flock; struct file_lock *dl_flock;
struct nfs4_stateid *dl_stp; struct file *dl_vfs_file;
u32 dl_type; u32 dl_type;
time_t dl_time; time_t dl_time;
struct nfs4_cb_recall dl_recall; struct nfs4_cb_recall dl_recall;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment