aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfsd/nfs4state.c
diff options
context:
space:
mode:
authorJ. Bruce Fields <bfields@citi.umich.edu>2009-05-01 22:36:55 -0400
committerJ. Bruce Fields <bfields@citi.umich.edu>2009-05-03 15:08:56 -0400
commit63e4863fabc6e165a6ca813051305be58966da45 (patch)
treee84b927ca00ce91c8a3a4e93b7f61a0fea315e00 /fs/nfsd/nfs4state.c
parent3aea09dc9106407d8bc18e593fbffda9ad632844 (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.c28
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 */
2065static int
2066do_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)
2083static 2070static
2084void nfsd_break_deleg_cb(struct file_lock *fl) 2071void 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/*