diff options
author | J. Bruce Fields <bfields@citi.umich.edu> | 2009-05-01 22:36:55 -0400 |
---|---|---|
committer | J. Bruce Fields <bfields@citi.umich.edu> | 2009-05-03 15:08:56 -0400 |
commit | 63e4863fabc6e165a6ca813051305be58966da45 (patch) | |
tree | e84b927ca00ce91c8a3a4e93b7f61a0fea315e00 /fs/nfsd/nfs4state.c | |
parent | 3aea09dc9106407d8bc18e593fbffda9ad632844 (diff) |
nfsd4: make recall callback an asynchronous rpc
As with the probe, this removes the need for another kthread.
Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
Diffstat (limited to 'fs/nfsd/nfs4state.c')
-rw-r--r-- | fs/nfsd/nfs4state.c | 28 |
1 files changed, 3 insertions, 25 deletions
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c index cbb16e191d5b..a4bdf2589b41 100644 --- a/fs/nfsd/nfs4state.c +++ b/fs/nfsd/nfs4state.c | |||
@@ -2060,19 +2060,6 @@ nfs4_file_downgrade(struct file *filp, unsigned int share_access) | |||
2060 | } | 2060 | } |
2061 | 2061 | ||
2062 | /* | 2062 | /* |
2063 | * Recall a delegation | ||
2064 | */ | ||
2065 | static int | ||
2066 | do_recall(void *__dp) | ||
2067 | { | ||
2068 | struct nfs4_delegation *dp = __dp; | ||
2069 | |||
2070 | dp->dl_file->fi_had_conflict = true; | ||
2071 | nfsd4_cb_recall(dp); | ||
2072 | return 0; | ||
2073 | } | ||
2074 | |||
2075 | /* | ||
2076 | * Spawn a thread to perform a recall on the delegation represented | 2063 | * Spawn a thread to perform a recall on the delegation represented |
2077 | * by the lease (file_lock) | 2064 | * by the lease (file_lock) |
2078 | * | 2065 | * |
@@ -2083,8 +2070,7 @@ do_recall(void *__dp) | |||
2083 | static | 2070 | static |
2084 | void nfsd_break_deleg_cb(struct file_lock *fl) | 2071 | void nfsd_break_deleg_cb(struct file_lock *fl) |
2085 | { | 2072 | { |
2086 | struct nfs4_delegation *dp= (struct nfs4_delegation *)fl->fl_owner; | 2073 | struct nfs4_delegation *dp = (struct nfs4_delegation *)fl->fl_owner; |
2087 | struct task_struct *t; | ||
2088 | 2074 | ||
2089 | dprintk("NFSD nfsd_break_deleg_cb: dp %p fl %p\n",dp,fl); | 2075 | dprintk("NFSD nfsd_break_deleg_cb: dp %p fl %p\n",dp,fl); |
2090 | if (!dp) | 2076 | if (!dp) |
@@ -2112,16 +2098,8 @@ void nfsd_break_deleg_cb(struct file_lock *fl) | |||
2112 | */ | 2098 | */ |
2113 | fl->fl_break_time = 0; | 2099 | fl->fl_break_time = 0; |
2114 | 2100 | ||
2115 | t = kthread_run(do_recall, dp, "%s", "nfs4_cb_recall"); | 2101 | dp->dl_file->fi_had_conflict = true; |
2116 | if (IS_ERR(t)) { | 2102 | nfsd4_cb_recall(dp); |
2117 | struct nfs4_client *clp = dp->dl_client; | ||
2118 | |||
2119 | printk(KERN_INFO "NFSD: Callback thread failed for " | ||
2120 | "for client (clientid %08x/%08x)\n", | ||
2121 | clp->cl_clientid.cl_boot, clp->cl_clientid.cl_id); | ||
2122 | put_nfs4_client(dp->dl_client); | ||
2123 | nfs4_put_delegation(dp); | ||
2124 | } | ||
2125 | } | 2103 | } |
2126 | 2104 | ||
2127 | /* | 2105 | /* |