[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