[pnfs] [PATCH 8/8] pnfs: pnfs_return_layout-done framework
andros at umich.edu
andros at umich.edu
Mon Mar 10 14:39:20 EDT 2008
From: Andy Adamson <andros at umich.edu>
pnfs_return_layout_done() is where layout stateid processing will occur.
Signed-off-by: Andy Adamson<andros at umich.edu>
---
fs/nfs/nfs4proc.c | 7 +++++++
fs/nfs/pnfs.c | 23 +++++++++++++++++------
fs/nfs/pnfs.h | 3 +++
3 files changed, 27 insertions(+), 6 deletions(-)
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index 729e14e..5925612 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -5405,12 +5405,19 @@ static void nfs4_pnfs_layoutreturn_done(struct rpc_task *task, void *calldata)
struct nfs4_pnfs_layoutreturn *lrp = calldata;
struct inode *ino = lrp->args->inode;
struct nfs_server *server = NFS_SERVER(ino);
+ struct nfs_inode *nfsi = NFS_I(ino);
+ struct pnfs_layout_type *lo;
dprintk("--> %s\n", __func__);
if (RPC_ASSASSINATED(task))
return;
nfs4_sequence_done(server, &lrp->res->seq_res, task->tk_status);
+
+ lo = nfsi->current_layout;
+ BUG_ON(!lo);
+
+ pnfs_return_layout_done(lo, lrp, task->tk_status);
dprintk("<-- %s\n", __func__);
}
diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c
index e4ed81f..bce2597 100644
--- a/fs/nfs/pnfs.c
+++ b/fs/nfs/pnfs.c
@@ -549,11 +549,13 @@ pnfs_return_layout(struct inode *ino, struct nfs4_pnfs_layout_segment *range,
struct nfs_server *server = NFS_SERVER(ino);
int status;
+ dprintk("-->%s\n", __func__);
+
lo = get_lock_current_layout(nfsi);
if (lo == NULL)
return 0;
- dprintk("%s:Begin layout %p\n", __FUNCTION__, lo);
+ dprintk("%s layout %p\n", __func__, lo);
arg.reclaim = 0;
arg.layout_type = server->pnfs_curr_ld->id;
@@ -568,17 +570,26 @@ pnfs_return_layout(struct inode *ino, struct nfs4_pnfs_layout_segment *range,
arg.inode = ino;
pnfs_free_layout(lo, &arg.lseg);
-
spin_unlock(&nfsi->lo_lock);
- status = server->nfs_client->rpc_ops->pnfs_layoutreturn(&gdata);
- spin_lock(&nfsi->lo_lock);
- put_unlock_current_layout(nfsi, lo);
+ status = server->nfs_client->rpc_ops->pnfs_layoutreturn(&gdata);
- dprintk("%s:Exit status %d\n", __FUNCTION__, status);
+ dprintk("<--%s status %d\n", __func__, status);
return status;
}
+void
+pnfs_return_layout_done(struct pnfs_layout_type *lo,
+ struct nfs4_pnfs_layoutreturn *lrp, int rpc_status)
+{
+ dprintk("-->%s inode %p\n", __func__, lo->inode);
+
+ /* will do stateid work here */
+
+ dprintk("<-- %s \n", __func__);
+ return;
+}
+
/*
* cmp two layout segments for sorting into layout cache
*/
diff --git a/fs/nfs/pnfs.h b/fs/nfs/pnfs.h
index 0e0e678..69ba7bc 100644
--- a/fs/nfs/pnfs.h
+++ b/fs/nfs/pnfs.h
@@ -50,6 +50,9 @@ ssize_t pnfs_file_write(struct file *, const char __user *, size_t, loff_t *);
void pnfs_get_layout_done(struct pnfs_layout_type *,
struct nfs4_pnfs_layoutget *, int);
void pnfs_layout_release(struct pnfs_layout_type *);
+void pnfs_return_layout_done(struct pnfs_layout_type *,
+ struct nfs4_pnfs_layoutreturn *, int);
+
#endif /* CONFIG_PNFS */
--
1.5.0.2
More information about the pNFS
mailing list