[pnfs] CVS: nfsv4
Benny Halevy Panasas
bhalevy at citi.umich.edu
Tue Dec 12 05:02:59 EST 2006
CVSROOT: /cvs
Module name: nfsv4
Changes by: bhalevy at citi. 2006/12/12 05:02:59
Modified files:
cvs/pnfs/fs/nfs: nfs4state.c nfs4xdr.c pnfs.c
cvs/pnfs/fs/nfsd: nfs4xdr.c
cvs/pnfs/include/linux: nfs4_pnfs.h pnfs_xdr.h
cvs/pnfs/include/linux/nfsd: nfsd4_pnfs.h
Log message:
- Add the return_on_close flag to the layout_get results structure
- Save a return_on_close iomode in the pnfs_layout_type structure
- Return the layout before sending a close operation (currently for any iomode)
Signed-off-by: Benny Halevy bhalevy at panasas.com
Index: fs/nfs/nfs4state.c
===================================================================
RCS file: /cvs/nfsv4/cvs/pnfs/fs/nfs/nfs4state.c,v
retrieving revision 1.2
diff -u -p -r1.2 nfs4state.c
--- fs/nfs/nfs4state.c 12 Dec 2006 09:03:51 -0000 1.2
+++ fs/nfs/nfs4state.c 12 Dec 2006 10:01:37 -0000
@@ -42,6 +42,7 @@
#include <linux/slab.h>
#include <linux/smp_lock.h>
#include <linux/nfs_fs.h>
+#include <linux/nfs4_pnfs.h>
#include <linux/nfs_idmap.h>
#include <linux/kthread.h>
#include <linux/module.h>
@@ -515,6 +516,11 @@ void nfs4_close_state(struct nfs4_state
if (pnfs_enabled_sb(NFS_SERVER(inode))) {
if (NFS_I(inode)->layoutcommit_ctx) {
pnfs_layoutcommit_inode(inode, 0);
+ }
+ /* TODO: make finer grained returns here */
+ if (NFS_I(inode)->current_layout &&
+ NFS_I(inode)->current_layout->roc_iomode) {
+ pnfs_return_layout(inode);
}
}
if (nfs4_do_close(inode, state) == 0)
Index: fs/nfs/nfs4xdr.c
===================================================================
RCS file: /cvs/nfsv4/cvs/pnfs/fs/nfs/nfs4xdr.c,v
retrieving revision 1.24
diff -u -p -r1.24 nfs4xdr.c
--- fs/nfs/nfs4xdr.c 12 Dec 2006 09:43:42 -0000 1.24
+++ fs/nfs/nfs4xdr.c 12 Dec 2006 10:01:41 -0000
@@ -4642,7 +4642,8 @@ static int decode_pnfs_layoutget(struct
status = decode_op_hdr(xdr, OP_LAYOUTGET);
if (status)
return status;
- READ_BUF(28);
+ READ_BUF(32);
+ READ32(res->return_on_close);
READ64(res->offset);
READ64(res->length);
READ32(res->iomode);
Index: fs/nfs/pnfs.c
===================================================================
RCS file: /cvs/nfsv4/cvs/pnfs/fs/nfs/pnfs.c,v
retrieving revision 1.48
diff -u -p -r1.48 pnfs.c
--- fs/nfs/pnfs.c 12 Dec 2006 09:53:17 -0000 1.48
+++ fs/nfs/pnfs.c 12 Dec 2006 10:01:43 -0000
@@ -455,9 +455,15 @@ virtual_update_layout(struct inode* ino,
printk("%s: ERROR! Could not inject layout (%d)\n",__FUNCTION__,result);
result = -EIO;
goto out;
- } else {
- nfsi->current_layout = layout_new;
}
+
+ if (res.return_on_close) {
+ layout_new->roc_iomode = res.iomode;
+ if (!layout_new->roc_iomode) {
+ layout_new->roc_iomode = IOMODE_ANY;
+ }
+ }
+ nfsi->current_layout = layout_new;
result = 0;
out:
Index: fs/nfsd/nfs4xdr.c
===================================================================
RCS file: /cvs/nfsv4/cvs/pnfs/fs/nfsd/nfs4xdr.c,v
retrieving revision 1.30
diff -u -p -r1.30 nfs4xdr.c
--- fs/nfsd/nfs4xdr.c 12 Dec 2006 09:43:43 -0000 1.30
+++ fs/nfsd/nfs4xdr.c 12 Dec 2006 10:01:45 -0000
@@ -2781,7 +2781,8 @@ nfsd4_encode_getdevinfo(struct nfsd4_com
}
}
-/* LAYOUTGET: minorversion1-01.txt
+/* LAYOUTGET: minorversion1-08.txt
+u32 bool logr_return_on_close;
u64 offset4 offset;
u64 length4 length;
u32 pnfs_layoutiomode4 iomode;
@@ -2795,7 +2796,8 @@ nfsd4_encode_layoutget(struct nfsd4_comp
ENCODE_HEAD;
if (!nfserr) {
- RESERVE_SPACE(28);
+ RESERVE_SPACE(32);
+ WRITE32(lgp->lg_return_on_close);
WRITE64(lgp->lg_offset);
WRITE64(lgp->lg_length);
WRITE32(lgp->lg_iomode);
Index: include/linux/nfs4_pnfs.h
===================================================================
RCS file: /cvs/nfsv4/cvs/pnfs/include/linux/nfs4_pnfs.h,v
retrieving revision 1.12
diff -u -p -r1.12 nfs4_pnfs.h
--- include/linux/nfs4_pnfs.h 24 Aug 2006 17:34:51 -0000 1.12
+++ include/linux/nfs4_pnfs.h 12 Dec 2006 10:01:45 -0000
@@ -29,6 +29,7 @@ struct pnfs_mount_type {
struct pnfs_layout_type {
struct pnfs_mount_type* mountid;
void* layoutid;
+ int roc_iomode; /* iomode to return on close, 0=none */
};
/* Layout driver I/O operations.
Index: include/linux/pnfs_xdr.h
===================================================================
RCS file: /cvs/nfsv4/cvs/pnfs/include/linux/pnfs_xdr.h,v
retrieving revision 1.13
diff -u -p -r1.13 pnfs_xdr.h
--- include/linux/pnfs_xdr.h 12 Dec 2006 09:53:17 -0000 1.13
+++ include/linux/pnfs_xdr.h 12 Dec 2006 10:01:45 -0000
@@ -47,6 +47,7 @@ struct nfs4_pnfs_layoutget_arg {
};
struct nfs4_pnfs_layoutget_res {
+ __u32 return_on_close;
__u64 offset;
__u64 length;
__u32 iomode;
Index: include/linux/nfsd/nfsd4_pnfs.h
===================================================================
RCS file: /cvs/nfsv4/cvs/pnfs/include/linux/nfsd/nfsd4_pnfs.h,v
retrieving revision 1.9
diff -u -p -r1.9 nfsd4_pnfs.h
--- include/linux/nfsd/nfsd4_pnfs.h 12 Dec 2006 09:43:43 -0000 1.9
+++ include/linux/nfsd/nfsd4_pnfs.h 12 Dec 2006 10:01:45 -0000
@@ -84,6 +84,7 @@ struct nfsd4_pnfs_layoutget {
/* only for cluster fs file layout 'struct knfsd_fh' */
unsigned char lg_fh[NFS_MAXFHSIZE];
+ u32 lg_return_on_close; /* response */
void *lg_layout; /* response callback encoded */
};
More information about the pNFS
mailing list