patch-2.4.27 linux-2.4.27/fs/nfs/unlink.c
Next file: linux-2.4.27/fs/openpromfs/inode.c
Previous file: linux-2.4.27/fs/nfs/dir.c
Back to the patch index
Back to the overall index
- Lines: 48
- Date:
2004-08-07 16:26:06.012402578 -0700
- Orig file:
linux-2.4.26/fs/nfs/unlink.c
- Orig date:
2002-11-28 15:53:15.000000000 -0800
diff -urN linux-2.4.26/fs/nfs/unlink.c linux-2.4.27/fs/nfs/unlink.c
@@ -12,6 +12,7 @@
#include <linux/sunrpc/sched.h>
#include <linux/sunrpc/clnt.h>
#include <linux/nfs_fs.h>
+#include <linux/wait.h>
struct nfs_unlinkdata {
@@ -21,6 +22,9 @@
struct rpc_task task;
struct rpc_cred *cred;
unsigned int count;
+
+ wait_queue_head_t waitq;
+ int completed;
};
static struct nfs_unlinkdata *nfs_deletes;
@@ -133,6 +137,8 @@
put_rpccred(data->cred);
data->cred = NULL;
dput(dir);
+ data->completed = 1;
+ wake_up(&data->waitq);
}
/**
@@ -175,6 +181,8 @@
nfs_deletes = data;
data->count = 1;
+ init_waitqueue_head(&data->waitq);
+
task = &data->task;
rpc_init_task(task, clnt, nfs_async_unlink_done , RPC_TASK_ASYNC);
task->tk_calldata = data;
@@ -212,7 +220,10 @@
data->count++;
nfs_copy_dname(dentry, data);
dentry->d_flags &= ~DCACHE_NFSFS_RENAMED;
- if (data->task.tk_rpcwait == &nfs_delete_queue)
+ if (data->task.tk_rpcwait == &nfs_delete_queue) {
+ struct rpc_clnt *clnt = data->task.tk_client;
rpc_wake_up_task(&data->task);
+ nfs_wait_event(clnt, data->waitq, data->completed == 1);
+ }
nfs_put_unlinkdata(data);
}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)