* [PATCH 0/2] commit_metadata export operation v6 @ 2010-02-17 20:05 ` Ben Myers 0 siblings, 0 replies; 15+ messages in thread From: Ben Myers @ 2010-02-17 20:05 UTC (permalink / raw) To: bfields; +Cc: linux-nfs, xfs Hey Bruce, Here is the latest version of the knfsd sync changes. I have addressed the suggestions provided by Christoph, Trond, Dave, and Alex. In this latest version I have fixed up the few nits in the nfsd patch that Christoph pointed out yesterday. I also have simplified the xfs patch as suggested by Dave. Thanks, Ben --- Ben Myers (2): commit_metadata export operation replacing nfsd_sync_dir xfs_export_operations.commit_metadata fs/nfsd/nfs4recover.c | 4 -- fs/nfsd/vfs.c | 106 ++++++++++++++++++++--------------------- fs/xfs/linux-2.6/xfs_export.c | 20 ++++++++ include/linux/exportfs.h | 5 ++ 4 files changed, 78 insertions(+), 57 deletions(-) -- Signature _______________________________________________ xfs mailing list xfs@oss.sgi.com http://oss.sgi.com/mailman/listinfo/xfs ^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH 0/2] commit_metadata export operation v6 @ 2010-02-17 20:05 ` Ben Myers 0 siblings, 0 replies; 15+ messages in thread From: Ben Myers @ 2010-02-17 20:05 UTC (permalink / raw) To: bfields; +Cc: linux-nfs, xfs Hey Bruce, Here is the latest version of the knfsd sync changes. I have addressed the suggestions provided by Christoph, Trond, Dave, and Alex. In this latest version I have fixed up the few nits in the nfsd patch that Christoph pointed out yesterday. I also have simplified the xfs patch as suggested by Dave. Thanks, Ben --- Ben Myers (2): commit_metadata export operation replacing nfsd_sync_dir xfs_export_operations.commit_metadata fs/nfsd/nfs4recover.c | 4 -- fs/nfsd/vfs.c | 106 ++++++++++++++++++++--------------------- fs/xfs/linux-2.6/xfs_export.c | 20 ++++++++ include/linux/exportfs.h | 5 ++ 4 files changed, 78 insertions(+), 57 deletions(-) -- Signature ^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH 1/2] commit_metadata export operation replacing nfsd_sync_dir 2010-02-17 20:05 ` Ben Myers @ 2010-02-17 20:05 ` Ben Myers -1 siblings, 0 replies; 15+ messages in thread From: Ben Myers @ 2010-02-17 20:05 UTC (permalink / raw) To: bfields; +Cc: linux-nfs, xfs - Add commit_metadata export_operation to allow the underlying filesystem to decide how to commit an inode most efficiently. - Usage of nfsd_sync_dir and write_inode_now has been replaced with the commit_metadata function that takes a svc_fh. - The commit_metadata function calls the commit_metadata export_op if it's there, or else falls back to sync_inode instead of fsync and write_inode_now because only metadata need be synced here. - nfsd4_sync_rec_dir now uses vfs_fsync so that commit_metadata can be static Signed-off-by: Ben Myers <bpm@sgi.com> --- fs/nfsd/nfs4recover.c | 4 -- fs/nfsd/vfs.c | 106 +++++++++++++++++++++++----------------------- include/linux/exportfs.h | 5 ++ 3 files changed, 58 insertions(+), 57 deletions(-) diff --git a/fs/nfsd/nfs4recover.c b/fs/nfsd/nfs4recover.c index 5a754f7..98fb98e 100644 --- a/fs/nfsd/nfs4recover.c +++ b/fs/nfsd/nfs4recover.c @@ -119,9 +119,7 @@ out_no_tfm: static void nfsd4_sync_rec_dir(void) { - mutex_lock(&rec_dir.dentry->d_inode->i_mutex); - nfsd_sync_dir(rec_dir.dentry); - mutex_unlock(&rec_dir.dentry->d_inode->i_mutex); + vfs_fsync(NULL, rec_dir.dentry, 0); } int diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c index ed024d3..8afdba5 100644 --- a/fs/nfsd/vfs.c +++ b/fs/nfsd/vfs.c @@ -27,6 +27,8 @@ #include <linux/jhash.h> #include <linux/ima.h> #include <asm/uaccess.h> +#include <linux/exportfs.h> +#include <linux/writeback.h> #ifdef CONFIG_NFSD_V3 #include "xdr3.h" @@ -271,6 +273,32 @@ out: return err; } +/* + * Commit metadata changes to stable storage. + */ +static int +commit_metadata(struct svc_fh *fhp) +{ + struct inode *inode = fhp->fh_dentry->d_inode; + const struct export_operations *export_ops = inode->i_sb->s_export_op; + int error = 0; + + if (!EX_ISSYNC(fhp->fh_export)) + return 0; + + if (export_ops->commit_metadata) { + error = export_ops->commit_metadata(inode); + } else { + struct writeback_control wbc = { + .sync_mode = WB_SYNC_ALL, + .nr_to_write = 0, /* metadata only */ + }; + + error = sync_inode(inode, &wbc); + } + + return error; +} /* * Set various file attributes. @@ -769,28 +797,6 @@ nfsd_close(struct file *filp) } /* - * Sync a directory to disk. - * - * We can't just call vfs_fsync because our requirements are slightly odd: - * - * a) we do not have a file struct available - * b) we expect to have i_mutex already held by the caller - */ -int -nfsd_sync_dir(struct dentry *dentry) -{ - struct inode *inode = dentry->d_inode; - int error; - - WARN_ON(!mutex_is_locked(&inode->i_mutex)); - - error = filemap_write_and_wait(inode->i_mapping); - if (!error && inode->i_fop->fsync) - error = inode->i_fop->fsync(NULL, dentry, 0); - return error; -} - -/* * Obtain the readahead parameters for the file * specified by (dev, ino). */ @@ -1331,12 +1337,14 @@ nfsd_create(struct svc_rqst *rqstp, struct svc_fh *fhp, goto out_nfserr; } - if (EX_ISSYNC(fhp->fh_export)) { - err = nfserrno(nfsd_sync_dir(dentry)); - write_inode_now(dchild->d_inode, 1); - } + err = nfsd_create_setattr(rqstp, resfhp, iap); - err2 = nfsd_create_setattr(rqstp, resfhp, iap); + /* + * nfsd_setattr already committed the child. Transactional filesystems + * had a chance to commit changes for both parent and child + * simultaneously making the following commit_metadata a noop. + */ + err2 = nfserrno(commit_metadata(fhp)); if (err2) err = err2; mnt_drop_write(fhp->fh_export->ex_path.mnt); @@ -1368,7 +1376,6 @@ nfsd_create_v3(struct svc_rqst *rqstp, struct svc_fh *fhp, struct dentry *dentry, *dchild = NULL; struct inode *dirp; __be32 err; - __be32 err2; int host_err; __u32 v_mtime=0, v_atime=0; @@ -1463,11 +1470,6 @@ nfsd_create_v3(struct svc_rqst *rqstp, struct svc_fh *fhp, if (created) *created = 1; - if (EX_ISSYNC(fhp->fh_export)) { - err = nfserrno(nfsd_sync_dir(dentry)); - /* setattr will sync the child (or not) */ - } - nfsd_check_ignore_resizing(iap); if (createmode == NFS3_CREATE_EXCLUSIVE) { @@ -1482,9 +1484,13 @@ nfsd_create_v3(struct svc_rqst *rqstp, struct svc_fh *fhp, } set_attr: - err2 = nfsd_create_setattr(rqstp, resfhp, iap); - if (err2) - err = err2; + err = nfsd_create_setattr(rqstp, resfhp, iap); + + /* + * nfsd_setattr already committed the child (and possibly also the parent). + */ + if (!err) + err = nfserrno(commit_metadata(fhp)); mnt_drop_write(fhp->fh_export->ex_path.mnt); /* @@ -1599,12 +1605,9 @@ nfsd_symlink(struct svc_rqst *rqstp, struct svc_fh *fhp, } } else host_err = vfs_symlink(dentry->d_inode, dnew, path); - - if (!host_err) { - if (EX_ISSYNC(fhp->fh_export)) - host_err = nfsd_sync_dir(dentry); - } err = nfserrno(host_err); + if (!err) + err = nfserrno(commit_metadata(fhp)); fh_unlock(fhp); mnt_drop_write(fhp->fh_export->ex_path.mnt); @@ -1666,11 +1669,9 @@ nfsd_link(struct svc_rqst *rqstp, struct svc_fh *ffhp, } host_err = vfs_link(dold, dirp, dnew); if (!host_err) { - if (EX_ISSYNC(ffhp->fh_export)) { - err = nfserrno(nfsd_sync_dir(ddir)); - write_inode_now(dest, 1); - } - err = 0; + err = nfserrno(commit_metadata(ffhp)); + if (!err) + err = nfserrno(commit_metadata(tfhp)); } else { if (host_err == -EXDEV && rqstp->rq_vers == 2) err = nfserr_acces; @@ -1766,10 +1767,10 @@ nfsd_rename(struct svc_rqst *rqstp, struct svc_fh *ffhp, char *fname, int flen, goto out_dput_new; host_err = vfs_rename(fdir, odentry, tdir, ndentry); - if (!host_err && EX_ISSYNC(tfhp->fh_export)) { - host_err = nfsd_sync_dir(tdentry); + if (!host_err) { + host_err = commit_metadata(tfhp); if (!host_err) - host_err = nfsd_sync_dir(fdentry); + host_err = commit_metadata(ffhp); } mnt_drop_write(ffhp->fh_export->ex_path.mnt); @@ -1850,12 +1851,9 @@ nfsd_unlink(struct svc_rqst *rqstp, struct svc_fh *fhp, int type, dput(rdentry); - if (host_err) - goto out_drop; - if (EX_ISSYNC(fhp->fh_export)) - host_err = nfsd_sync_dir(dentry); + if (!host_err) + host_err = commit_metadata(fhp); -out_drop: mnt_drop_write(fhp->fh_export->ex_path.mnt); out_nfserr: err = nfserrno(host_err); diff --git a/include/linux/exportfs.h b/include/linux/exportfs.h index dc12f41..a9cd507 100644 --- a/include/linux/exportfs.h +++ b/include/linux/exportfs.h @@ -96,6 +96,7 @@ struct fid { * @fh_to_parent: find the implied object's parent and get a dentry for it * @get_name: find the name for a given inode in a given directory * @get_parent: find the parent of a given directory + * @commit_metadata: commit metadata changes to stable storage * * See Documentation/filesystems/nfs/Exporting for details on how to use * this interface correctly. @@ -137,6 +138,9 @@ struct fid { * is also a directory. In the event that it cannot be found, or storage * space cannot be allocated, a %ERR_PTR should be returned. * + * commit_metadata: + * @commit_metadata should commit metadata changes to stable storage. + * * Locking rules: * get_parent is called with child->d_inode->i_mutex down * get_name is not (which is possibly inconsistent) @@ -152,6 +156,7 @@ struct export_operations { int (*get_name)(struct dentry *parent, char *name, struct dentry *child); struct dentry * (*get_parent)(struct dentry *child); + int (*commit_metadata)(struct inode *inode); }; extern int exportfs_encode_fh(struct dentry *dentry, struct fid *fid, _______________________________________________ xfs mailing list xfs@oss.sgi.com http://oss.sgi.com/mailman/listinfo/xfs ^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH 1/2] commit_metadata export operation replacing nfsd_sync_dir @ 2010-02-17 20:05 ` Ben Myers 0 siblings, 0 replies; 15+ messages in thread From: Ben Myers @ 2010-02-17 20:05 UTC (permalink / raw) To: bfields; +Cc: linux-nfs, xfs - Add commit_metadata export_operation to allow the underlying filesystem to decide how to commit an inode most efficiently. - Usage of nfsd_sync_dir and write_inode_now has been replaced with the commit_metadata function that takes a svc_fh. - The commit_metadata function calls the commit_metadata export_op if it's there, or else falls back to sync_inode instead of fsync and write_inode_now because only metadata need be synced here. - nfsd4_sync_rec_dir now uses vfs_fsync so that commit_metadata can be static Signed-off-by: Ben Myers <bpm@sgi.com> --- fs/nfsd/nfs4recover.c | 4 -- fs/nfsd/vfs.c | 106 +++++++++++++++++++++++----------------------- include/linux/exportfs.h | 5 ++ 3 files changed, 58 insertions(+), 57 deletions(-) diff --git a/fs/nfsd/nfs4recover.c b/fs/nfsd/nfs4recover.c index 5a754f7..98fb98e 100644 --- a/fs/nfsd/nfs4recover.c +++ b/fs/nfsd/nfs4recover.c @@ -119,9 +119,7 @@ out_no_tfm: static void nfsd4_sync_rec_dir(void) { - mutex_lock(&rec_dir.dentry->d_inode->i_mutex); - nfsd_sync_dir(rec_dir.dentry); - mutex_unlock(&rec_dir.dentry->d_inode->i_mutex); + vfs_fsync(NULL, rec_dir.dentry, 0); } int diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c index ed024d3..8afdba5 100644 --- a/fs/nfsd/vfs.c +++ b/fs/nfsd/vfs.c @@ -27,6 +27,8 @@ #include <linux/jhash.h> #include <linux/ima.h> #include <asm/uaccess.h> +#include <linux/exportfs.h> +#include <linux/writeback.h> #ifdef CONFIG_NFSD_V3 #include "xdr3.h" @@ -271,6 +273,32 @@ out: return err; } +/* + * Commit metadata changes to stable storage. + */ +static int +commit_metadata(struct svc_fh *fhp) +{ + struct inode *inode = fhp->fh_dentry->d_inode; + const struct export_operations *export_ops = inode->i_sb->s_export_op; + int error = 0; + + if (!EX_ISSYNC(fhp->fh_export)) + return 0; + + if (export_ops->commit_metadata) { + error = export_ops->commit_metadata(inode); + } else { + struct writeback_control wbc = { + .sync_mode = WB_SYNC_ALL, + .nr_to_write = 0, /* metadata only */ + }; + + error = sync_inode(inode, &wbc); + } + + return error; +} /* * Set various file attributes. @@ -769,28 +797,6 @@ nfsd_close(struct file *filp) } /* - * Sync a directory to disk. - * - * We can't just call vfs_fsync because our requirements are slightly odd: - * - * a) we do not have a file struct available - * b) we expect to have i_mutex already held by the caller - */ -int -nfsd_sync_dir(struct dentry *dentry) -{ - struct inode *inode = dentry->d_inode; - int error; - - WARN_ON(!mutex_is_locked(&inode->i_mutex)); - - error = filemap_write_and_wait(inode->i_mapping); - if (!error && inode->i_fop->fsync) - error = inode->i_fop->fsync(NULL, dentry, 0); - return error; -} - -/* * Obtain the readahead parameters for the file * specified by (dev, ino). */ @@ -1331,12 +1337,14 @@ nfsd_create(struct svc_rqst *rqstp, struct svc_fh *fhp, goto out_nfserr; } - if (EX_ISSYNC(fhp->fh_export)) { - err = nfserrno(nfsd_sync_dir(dentry)); - write_inode_now(dchild->d_inode, 1); - } + err = nfsd_create_setattr(rqstp, resfhp, iap); - err2 = nfsd_create_setattr(rqstp, resfhp, iap); + /* + * nfsd_setattr already committed the child. Transactional filesystems + * had a chance to commit changes for both parent and child + * simultaneously making the following commit_metadata a noop. + */ + err2 = nfserrno(commit_metadata(fhp)); if (err2) err = err2; mnt_drop_write(fhp->fh_export->ex_path.mnt); @@ -1368,7 +1376,6 @@ nfsd_create_v3(struct svc_rqst *rqstp, struct svc_fh *fhp, struct dentry *dentry, *dchild = NULL; struct inode *dirp; __be32 err; - __be32 err2; int host_err; __u32 v_mtime=0, v_atime=0; @@ -1463,11 +1470,6 @@ nfsd_create_v3(struct svc_rqst *rqstp, struct svc_fh *fhp, if (created) *created = 1; - if (EX_ISSYNC(fhp->fh_export)) { - err = nfserrno(nfsd_sync_dir(dentry)); - /* setattr will sync the child (or not) */ - } - nfsd_check_ignore_resizing(iap); if (createmode == NFS3_CREATE_EXCLUSIVE) { @@ -1482,9 +1484,13 @@ nfsd_create_v3(struct svc_rqst *rqstp, struct svc_fh *fhp, } set_attr: - err2 = nfsd_create_setattr(rqstp, resfhp, iap); - if (err2) - err = err2; + err = nfsd_create_setattr(rqstp, resfhp, iap); + + /* + * nfsd_setattr already committed the child (and possibly also the parent). + */ + if (!err) + err = nfserrno(commit_metadata(fhp)); mnt_drop_write(fhp->fh_export->ex_path.mnt); /* @@ -1599,12 +1605,9 @@ nfsd_symlink(struct svc_rqst *rqstp, struct svc_fh *fhp, } } else host_err = vfs_symlink(dentry->d_inode, dnew, path); - - if (!host_err) { - if (EX_ISSYNC(fhp->fh_export)) - host_err = nfsd_sync_dir(dentry); - } err = nfserrno(host_err); + if (!err) + err = nfserrno(commit_metadata(fhp)); fh_unlock(fhp); mnt_drop_write(fhp->fh_export->ex_path.mnt); @@ -1666,11 +1669,9 @@ nfsd_link(struct svc_rqst *rqstp, struct svc_fh *ffhp, } host_err = vfs_link(dold, dirp, dnew); if (!host_err) { - if (EX_ISSYNC(ffhp->fh_export)) { - err = nfserrno(nfsd_sync_dir(ddir)); - write_inode_now(dest, 1); - } - err = 0; + err = nfserrno(commit_metadata(ffhp)); + if (!err) + err = nfserrno(commit_metadata(tfhp)); } else { if (host_err == -EXDEV && rqstp->rq_vers == 2) err = nfserr_acces; @@ -1766,10 +1767,10 @@ nfsd_rename(struct svc_rqst *rqstp, struct svc_fh *ffhp, char *fname, int flen, goto out_dput_new; host_err = vfs_rename(fdir, odentry, tdir, ndentry); - if (!host_err && EX_ISSYNC(tfhp->fh_export)) { - host_err = nfsd_sync_dir(tdentry); + if (!host_err) { + host_err = commit_metadata(tfhp); if (!host_err) - host_err = nfsd_sync_dir(fdentry); + host_err = commit_metadata(ffhp); } mnt_drop_write(ffhp->fh_export->ex_path.mnt); @@ -1850,12 +1851,9 @@ nfsd_unlink(struct svc_rqst *rqstp, struct svc_fh *fhp, int type, dput(rdentry); - if (host_err) - goto out_drop; - if (EX_ISSYNC(fhp->fh_export)) - host_err = nfsd_sync_dir(dentry); + if (!host_err) + host_err = commit_metadata(fhp); -out_drop: mnt_drop_write(fhp->fh_export->ex_path.mnt); out_nfserr: err = nfserrno(host_err); diff --git a/include/linux/exportfs.h b/include/linux/exportfs.h index dc12f41..a9cd507 100644 --- a/include/linux/exportfs.h +++ b/include/linux/exportfs.h @@ -96,6 +96,7 @@ struct fid { * @fh_to_parent: find the implied object's parent and get a dentry for it * @get_name: find the name for a given inode in a given directory * @get_parent: find the parent of a given directory + * @commit_metadata: commit metadata changes to stable storage * * See Documentation/filesystems/nfs/Exporting for details on how to use * this interface correctly. @@ -137,6 +138,9 @@ struct fid { * is also a directory. In the event that it cannot be found, or storage * space cannot be allocated, a %ERR_PTR should be returned. * + * commit_metadata: + * @commit_metadata should commit metadata changes to stable storage. + * * Locking rules: * get_parent is called with child->d_inode->i_mutex down * get_name is not (which is possibly inconsistent) @@ -152,6 +156,7 @@ struct export_operations { int (*get_name)(struct dentry *parent, char *name, struct dentry *child); struct dentry * (*get_parent)(struct dentry *child); + int (*commit_metadata)(struct inode *inode); }; extern int exportfs_encode_fh(struct dentry *dentry, struct fid *fid, ^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH 2/2] xfs_export_operations.commit_metadata 2010-02-17 20:05 ` Ben Myers @ 2010-02-17 20:05 ` Ben Myers -1 siblings, 0 replies; 15+ messages in thread From: Ben Myers @ 2010-02-17 20:05 UTC (permalink / raw) To: bfields; +Cc: linux-nfs, xfs This is the commit_metadata export operation for XFS. - Takes one inode to be committed. - Forces the log up to the lsn of the inode. - Doesn't force the log if the inode doesn't have a pincount. Signed-off-by: Ben Myers <bpm@sgi.com> Reviewed-by: Christoph Hellwig <hch@lst.de> --- fs/xfs/linux-2.6/xfs_export.c | 20 ++++++++++++++++++++ 1 files changed, 20 insertions(+), 0 deletions(-) diff --git a/fs/xfs/linux-2.6/xfs_export.c b/fs/xfs/linux-2.6/xfs_export.c index 87b8cbd..8615d99 100644 --- a/fs/xfs/linux-2.6/xfs_export.c +++ b/fs/xfs/linux-2.6/xfs_export.c @@ -29,6 +29,7 @@ #include "xfs_vnodeops.h" #include "xfs_bmap_btree.h" #include "xfs_inode.h" +#include "xfs_inode_item.h" /* * Note that we only accept fileids which are long enough rather than allow @@ -215,9 +216,28 @@ xfs_fs_get_parent( return d_obtain_alias(VFS_I(cip)); } +STATIC int +xfs_fs_nfs_commit_metadata( + struct inode *inode) +{ + struct xfs_inode *ip = XFS_I(inode); + struct xfs_mount *mp = ip->i_mount; + int error = 0; + + xfs_ilock(ip, XFS_ILOCK_SHARED); + if (xfs_ipincount(ip)) { + error = _xfs_log_force(mp, ip->i_itemp->ili_last_lsn, + XFS_LOG_FORCE | XFS_LOG_SYNC, NULL); + } + xfs_iunlock(ip, XFS_ILOCK_SHARED); + + return error; +} + const struct export_operations xfs_export_operations = { .encode_fh = xfs_fs_encode_fh, .fh_to_dentry = xfs_fs_fh_to_dentry, .fh_to_parent = xfs_fs_fh_to_parent, .get_parent = xfs_fs_get_parent, + .commit_metadata = xfs_fs_nfs_commit_metadata, }; _______________________________________________ xfs mailing list xfs@oss.sgi.com http://oss.sgi.com/mailman/listinfo/xfs ^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH 2/2] xfs_export_operations.commit_metadata @ 2010-02-17 20:05 ` Ben Myers 0 siblings, 0 replies; 15+ messages in thread From: Ben Myers @ 2010-02-17 20:05 UTC (permalink / raw) To: bfields; +Cc: linux-nfs, xfs This is the commit_metadata export operation for XFS. - Takes one inode to be committed. - Forces the log up to the lsn of the inode. - Doesn't force the log if the inode doesn't have a pincount. Signed-off-by: Ben Myers <bpm@sgi.com> Reviewed-by: Christoph Hellwig <hch@lst.de> --- fs/xfs/linux-2.6/xfs_export.c | 20 ++++++++++++++++++++ 1 files changed, 20 insertions(+), 0 deletions(-) diff --git a/fs/xfs/linux-2.6/xfs_export.c b/fs/xfs/linux-2.6/xfs_export.c index 87b8cbd..8615d99 100644 --- a/fs/xfs/linux-2.6/xfs_export.c +++ b/fs/xfs/linux-2.6/xfs_export.c @@ -29,6 +29,7 @@ #include "xfs_vnodeops.h" #include "xfs_bmap_btree.h" #include "xfs_inode.h" +#include "xfs_inode_item.h" /* * Note that we only accept fileids which are long enough rather than allow @@ -215,9 +216,28 @@ xfs_fs_get_parent( return d_obtain_alias(VFS_I(cip)); } +STATIC int +xfs_fs_nfs_commit_metadata( + struct inode *inode) +{ + struct xfs_inode *ip = XFS_I(inode); + struct xfs_mount *mp = ip->i_mount; + int error = 0; + + xfs_ilock(ip, XFS_ILOCK_SHARED); + if (xfs_ipincount(ip)) { + error = _xfs_log_force(mp, ip->i_itemp->ili_last_lsn, + XFS_LOG_FORCE | XFS_LOG_SYNC, NULL); + } + xfs_iunlock(ip, XFS_ILOCK_SHARED); + + return error; +} + const struct export_operations xfs_export_operations = { .encode_fh = xfs_fs_encode_fh, .fh_to_dentry = xfs_fs_fh_to_dentry, .fh_to_parent = xfs_fs_fh_to_parent, .get_parent = xfs_fs_get_parent, + .commit_metadata = xfs_fs_nfs_commit_metadata, }; ^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH 2/2] xfs_export_operations.commit_metadata 2010-02-17 20:05 ` Ben Myers @ 2010-02-17 23:05 ` Dave Chinner -1 siblings, 0 replies; 15+ messages in thread From: Dave Chinner @ 2010-02-17 23:05 UTC (permalink / raw) To: Ben Myers; +Cc: bfields, linux-nfs, xfs On Wed, Feb 17, 2010 at 02:05:16PM -0600, Ben Myers wrote: > This is the commit_metadata export operation for XFS. > > - Takes one inode to be committed. > > - Forces the log up to the lsn of the inode. > > - Doesn't force the log if the inode doesn't have a pincount. > > Signed-off-by: Ben Myers <bpm@sgi.com> > Reviewed-by: Christoph Hellwig <hch@lst.de> Looks good, Ben. Reviewed-by: Dave Chinner <david@fromorbit.com> -- Dave Chinner david@fromorbit.com _______________________________________________ xfs mailing list xfs@oss.sgi.com http://oss.sgi.com/mailman/listinfo/xfs ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 2/2] xfs_export_operations.commit_metadata @ 2010-02-17 23:05 ` Dave Chinner 0 siblings, 0 replies; 15+ messages in thread From: Dave Chinner @ 2010-02-17 23:05 UTC (permalink / raw) To: Ben Myers; +Cc: bfields, linux-nfs, xfs On Wed, Feb 17, 2010 at 02:05:16PM -0600, Ben Myers wrote: > This is the commit_metadata export operation for XFS. > > - Takes one inode to be committed. > > - Forces the log up to the lsn of the inode. > > - Doesn't force the log if the inode doesn't have a pincount. > > Signed-off-by: Ben Myers <bpm@sgi.com> > Reviewed-by: Christoph Hellwig <hch@lst.de> Looks good, Ben. Reviewed-by: Dave Chinner <david@fromorbit.com> -- Dave Chinner david@fromorbit.com ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 0/2] commit_metadata export operation v6 2010-02-17 20:05 ` Ben Myers @ 2010-02-19 10:31 ` Christoph Hellwig -1 siblings, 0 replies; 15+ messages in thread From: Christoph Hellwig @ 2010-02-19 10:31 UTC (permalink / raw) To: Ben Myers; +Cc: bfields, linux-nfs, xfs On Wed, Feb 17, 2010 at 02:05:05PM -0600, Ben Myers wrote: > Hey Bruce, > > Here is the latest version of the knfsd sync changes. I have addressed the > suggestions provided by Christoph, Trond, Dave, and Alex. > > In this latest version I have fixed up the few nits in the nfsd patch that > Christoph pointed out yesterday. I also have simplified the xfs patch as > suggested by Dave. Both patches looks good to me, Reviewed-by: Christoph Hellwig <hch@lst.de> _______________________________________________ xfs mailing list xfs@oss.sgi.com http://oss.sgi.com/mailman/listinfo/xfs ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 0/2] commit_metadata export operation v6 @ 2010-02-19 10:31 ` Christoph Hellwig 0 siblings, 0 replies; 15+ messages in thread From: Christoph Hellwig @ 2010-02-19 10:31 UTC (permalink / raw) To: Ben Myers; +Cc: bfields, linux-nfs, xfs On Wed, Feb 17, 2010 at 02:05:05PM -0600, Ben Myers wrote: > Hey Bruce, > > Here is the latest version of the knfsd sync changes. I have addressed the > suggestions provided by Christoph, Trond, Dave, and Alex. > > In this latest version I have fixed up the few nits in the nfsd patch that > Christoph pointed out yesterday. I also have simplified the xfs patch as > suggested by Dave. Both patches looks good to me, Reviewed-by: Christoph Hellwig <hch@lst.de> ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 0/2] commit_metadata export operation v6 2010-02-17 20:05 ` Ben Myers @ 2010-02-20 23:38 ` J. Bruce Fields -1 siblings, 0 replies; 15+ messages in thread From: J. Bruce Fields @ 2010-02-20 23:38 UTC (permalink / raw) To: Ben Myers; +Cc: linux-nfs, xfs On Wed, Feb 17, 2010 at 02:05:05PM -0600, Ben Myers wrote: > Hey Bruce, > > Here is the latest version of the knfsd sync changes. I have addressed the > suggestions provided by Christoph, Trond, Dave, and Alex. > > In this latest version I have fixed up the few nits in the nfsd patch that > Christoph pointed out yesterday. I also have simplified the xfs patch as > suggested by Dave. Thanks, applying. (Do you the second (xfs) patch to go in through the nfsd tree as well, or should that go in through xfs maintainers after the nfsd merge?) --b. > > Thanks, > Ben > --- > > Ben Myers (2): > commit_metadata export operation replacing nfsd_sync_dir > xfs_export_operations.commit_metadata > > > fs/nfsd/nfs4recover.c | 4 -- > fs/nfsd/vfs.c | 106 ++++++++++++++++++++--------------------- > fs/xfs/linux-2.6/xfs_export.c | 20 ++++++++ > include/linux/exportfs.h | 5 ++ > 4 files changed, 78 insertions(+), 57 deletions(-) > > -- > Signature _______________________________________________ xfs mailing list xfs@oss.sgi.com http://oss.sgi.com/mailman/listinfo/xfs ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 0/2] commit_metadata export operation v6 @ 2010-02-20 23:38 ` J. Bruce Fields 0 siblings, 0 replies; 15+ messages in thread From: J. Bruce Fields @ 2010-02-20 23:38 UTC (permalink / raw) To: Ben Myers; +Cc: linux-nfs, xfs On Wed, Feb 17, 2010 at 02:05:05PM -0600, Ben Myers wrote: > Hey Bruce, > > Here is the latest version of the knfsd sync changes. I have addressed the > suggestions provided by Christoph, Trond, Dave, and Alex. > > In this latest version I have fixed up the few nits in the nfsd patch that > Christoph pointed out yesterday. I also have simplified the xfs patch as > suggested by Dave. Thanks, applying. (Do you the second (xfs) patch to go in through the nfsd tree as well, or should that go in through xfs maintainers after the nfsd merge?) --b. > > Thanks, > Ben > --- > > Ben Myers (2): > commit_metadata export operation replacing nfsd_sync_dir > xfs_export_operations.commit_metadata > > > fs/nfsd/nfs4recover.c | 4 -- > fs/nfsd/vfs.c | 106 ++++++++++++++++++++--------------------- > fs/xfs/linux-2.6/xfs_export.c | 20 ++++++++ > include/linux/exportfs.h | 5 ++ > 4 files changed, 78 insertions(+), 57 deletions(-) > > -- > Signature ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 0/2] commit_metadata export operation v6 2010-02-20 23:38 ` J. Bruce Fields (?) @ 2010-02-22 19:53 ` bpm 2010-02-23 1:14 ` J. Bruce Fields -1 siblings, 1 reply; 15+ messages in thread From: bpm @ 2010-02-22 19:53 UTC (permalink / raw) To: J. Bruce Fields; +Cc: linux-nfs, aelder, xfs Hey Bruce, On Sat, Feb 20, 2010 at 06:38:04PM -0500, J. Bruce Fields wrote: > On Wed, Feb 17, 2010 at 02:05:05PM -0600, Ben Myers wrote: > > Hey Bruce, > > > > Here is the latest version of the knfsd sync changes. I have addressed the > > suggestions provided by Christoph, Trond, Dave, and Alex. > > > > In this latest version I have fixed up the few nits in the nfsd patch that > > Christoph pointed out yesterday. I also have simplified the xfs patch as > > suggested by Dave. > > Thanks, applying. > > (Do you the second (xfs) patch to go in through the nfsd tree as well, > or should that go in through xfs maintainers after the nfsd merge?) I chatted with Alex. It sounds like the best thing is for both patches to go in through the nfsd tree since they need to go in order. Thanks, Ben _______________________________________________ xfs mailing list xfs@oss.sgi.com http://oss.sgi.com/mailman/listinfo/xfs ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 0/2] commit_metadata export operation v6 2010-02-22 19:53 ` bpm @ 2010-02-23 1:14 ` J. Bruce Fields 0 siblings, 0 replies; 15+ messages in thread From: J. Bruce Fields @ 2010-02-23 1:14 UTC (permalink / raw) To: bpm; +Cc: linux-nfs, aelder, xfs On Mon, Feb 22, 2010 at 01:53:53PM -0600, bpm@sgi.com wrote: > Hey Bruce, > > On Sat, Feb 20, 2010 at 06:38:04PM -0500, J. Bruce Fields wrote: > > On Wed, Feb 17, 2010 at 02:05:05PM -0600, Ben Myers wrote: > > > Hey Bruce, > > > > > > Here is the latest version of the knfsd sync changes. I have addressed the > > > suggestions provided by Christoph, Trond, Dave, and Alex. > > > > > > In this latest version I have fixed up the few nits in the nfsd patch that > > > Christoph pointed out yesterday. I also have simplified the xfs patch as > > > suggested by Dave. > > > > Thanks, applying. > > > > (Do you the second (xfs) patch to go in through the nfsd tree as well, > > or should that go in through xfs maintainers after the nfsd merge?) > > I chatted with Alex. It sounds like the best thing is for both patches > to go in through the nfsd tree since they need to go in order. OK, thanks, committed.--b. _______________________________________________ xfs mailing list xfs@oss.sgi.com http://oss.sgi.com/mailman/listinfo/xfs ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 0/2] commit_metadata export operation v6 @ 2010-02-23 1:14 ` J. Bruce Fields 0 siblings, 0 replies; 15+ messages in thread From: J. Bruce Fields @ 2010-02-23 1:14 UTC (permalink / raw) To: bpm; +Cc: linux-nfs, xfs, aelder On Mon, Feb 22, 2010 at 01:53:53PM -0600, bpm@sgi.com wrote: > Hey Bruce, > > On Sat, Feb 20, 2010 at 06:38:04PM -0500, J. Bruce Fields wrote: > > On Wed, Feb 17, 2010 at 02:05:05PM -0600, Ben Myers wrote: > > > Hey Bruce, > > > > > > Here is the latest version of the knfsd sync changes. I have addressed the > > > suggestions provided by Christoph, Trond, Dave, and Alex. > > > > > > In this latest version I have fixed up the few nits in the nfsd patch that > > > Christoph pointed out yesterday. I also have simplified the xfs patch as > > > suggested by Dave. > > > > Thanks, applying. > > > > (Do you the second (xfs) patch to go in through the nfsd tree as well, > > or should that go in through xfs maintainers after the nfsd merge?) > > I chatted with Alex. It sounds like the best thing is for both patches > to go in through the nfsd tree since they need to go in order. OK, thanks, committed.--b. ^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2010-02-23 1:13 UTC | newest] Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2010-02-17 20:05 [PATCH 0/2] commit_metadata export operation v6 Ben Myers 2010-02-17 20:05 ` Ben Myers 2010-02-17 20:05 ` [PATCH 1/2] commit_metadata export operation replacing nfsd_sync_dir Ben Myers 2010-02-17 20:05 ` Ben Myers 2010-02-17 20:05 ` [PATCH 2/2] xfs_export_operations.commit_metadata Ben Myers 2010-02-17 20:05 ` Ben Myers 2010-02-17 23:05 ` Dave Chinner 2010-02-17 23:05 ` Dave Chinner 2010-02-19 10:31 ` [PATCH 0/2] commit_metadata export operation v6 Christoph Hellwig 2010-02-19 10:31 ` Christoph Hellwig 2010-02-20 23:38 ` J. Bruce Fields 2010-02-20 23:38 ` J. Bruce Fields 2010-02-22 19:53 ` bpm 2010-02-23 1:14 ` J. Bruce Fields 2010-02-23 1:14 ` J. Bruce Fields
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.