[pnfs] [PATCH] pass layoutget result down to layout driver

Benny Halevy bhalevy at panasas.com
Tue Aug 7 04:39:37 EDT 2007


The layout driver needs the layoutget results in set_layout
to keep the offset, length, and iomode of the returned layout segment.

Signed-off-by: Benny Halevy <bhalevy at panasas.com>
---
 fs/nfs/nfs4filelayout.c   |    5 +++--
 fs/nfs/pnfs.c             |    6 +++---
 include/linux/nfs4_pnfs.h |    2 +-
 3 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/fs/nfs/nfs4filelayout.c b/fs/nfs/nfs4filelayout.c
index bba2dbe..1719c42 100644
--- a/fs/nfs/nfs4filelayout.c
+++ b/fs/nfs/nfs4filelayout.c
@@ -440,11 +440,12 @@ filelayout_free_layout(struct pnfs_layout_type * layoutid, struct inode * inode,
  * information for this file.
  */
 struct pnfs_layout_type*
-filelayout_set_layout(struct pnfs_layout_type* layoutid, struct inode* inode, void* layout)
+filelayout_set_layout(struct pnfs_layout_type* layoutid, struct inode* inode,
+                      struct nfs4_pnfs_layoutget_res *lgr)
 {
 	struct nfs4_filelayout* fl = NULL;
 	int i;
-	uint32_t *p = (uint32_t*)layout;
+	uint32_t *p = (uint32_t*)lgr->layout.buf;
 
 	dprintk("%s set_layout_map Begin\n", __FUNCTION__);
 
diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c
index 7f1addf..0965961 100644
--- a/fs/nfs/pnfs.c
+++ b/fs/nfs/pnfs.c
@@ -409,7 +409,7 @@ out:
 static struct pnfs_layout_type*
 pnfs_inject_layout(struct nfs_inode* nfsi,
 		   struct layoutdriver_io_operations* io_ops,
-		   void* new_layout)
+		   struct nfs4_pnfs_layoutget_res *lgr)
 {
 	struct pnfs_layout_type *layid;
 	struct inode* inode = &nfsi->vfs_inode;
@@ -435,7 +435,7 @@ pnfs_inject_layout(struct nfs_inode* nfsi,
 		return NULL;
 	}
 	dprintk("%s Calling set layout\n",__FUNCTION__);
-	return io_ops->set_layout(layid, inode, (void*)new_layout);
+	return io_ops->set_layout(layid, inode, lgr);
 }
 
 /* Check to see if the module is handling which layouts need to be
@@ -522,7 +522,7 @@ virtual_update_layout(struct inode* ino,
 	/* Inject layout blob into I/O device driver */
 	layout_new = pnfs_inject_layout(nfsi,
 					nfss->pnfs_curr_ld->ld_io_ops,
-					res.layout.buf);
+					&res);
 	if (layout_new == NULL) {
 		printk("%s: ERROR!  Could not inject layout (%d)\n",__FUNCTION__,result);
 		result =  -EIO;
diff --git a/include/linux/nfs4_pnfs.h b/include/linux/nfs4_pnfs.h
index f2c8cff..5855329 100644
--- a/include/linux/nfs4_pnfs.h
+++ b/include/linux/nfs4_pnfs.h
@@ -63,7 +63,7 @@ struct layoutdriver_io_operations {
 	 * a set_layout call to set the opaque layout in the layout driver.*/
 	struct pnfs_layout_type* (*alloc_layout) (struct pnfs_mount_type * mountid, struct inode * inode);
 	void (*free_layout) (struct pnfs_layout_type * layoutid, struct inode * inode, loff_t offset, size_t count);
-	struct pnfs_layout_type* (*set_layout) (struct pnfs_layout_type * layoutid, struct inode * inode, void* layout);
+	struct pnfs_layout_type* (*set_layout) (struct pnfs_layout_type * layoutid, struct inode * inode, struct nfs4_pnfs_layoutget_res *lgr);
 
 	int (*setup_layoutcommit) (struct pnfs_layout_type * layoutid, struct inode * inode, struct pnfs_layoutcommit_arg* arg);
 	void (*cleanup_layoutcommit) (struct pnfs_layout_type * layoutid, struct inode * inode, struct pnfs_layoutcommit_arg* arg, struct pnfs_layoutcommit_res* res);
-- 
1.5.2.86.g99b5



More information about the pNFS mailing list