Mercurial > illumos > nfs4.1
changeset 13999:5a664454d461
ds_mds_sync: Use pnfs_metadata_size_update to update metadata-file size
author | Vitaliy Gusev <gusev.vitaliy@nexenta.com> |
---|---|
date | Thu, 22 Aug 2013 00:08:39 +0400 |
parents | b93becc5aab9 |
children | 53f7563a5360 |
files | usr/src/uts/common/fs/nfs/nfs41_srv.c usr/src/uts/common/fs/nfs/nfs_nnode_proxy.c usr/src/uts/common/nfs/nfs.h |
diffstat | 3 files changed, 29 insertions(+), 16 deletions(-) [+] |
line wrap: on
line diff
--- a/usr/src/uts/common/fs/nfs/nfs41_srv.c Thu Aug 22 00:08:30 2013 +0400 +++ b/usr/src/uts/common/fs/nfs/nfs41_srv.c Thu Aug 22 00:08:39 2013 +0400 @@ -8743,6 +8743,7 @@ } } + /*ARGSUSED*/ static void mds_op_layout_commit(nfs_argop4 *argop, nfs_resop4 *resop, @@ -8820,18 +8821,8 @@ goto final; } - /* - * write a null byte at newsize-1 so that the size - * is correct. VOP_SETATTR may fail if the mode of - * the file denies the implementation. - */ if (newsize > va.va_size) { - vattr_t vattr; - - vattr.va_size = newsize; - vattr.va_mask = AT_SIZE; - error = nfs_vop_setattr(vp, &vattr, 0, cr, &ct, - cs->exi); + error = pnfs_metadata_size_update(vp, newsize, cr, &ct); if (error != 0) { *cs->statusp = resp->locr_status = \ @@ -9418,3 +9409,25 @@ { return (size + PNFS_LAYOUT_SZ); } + +/* + * newsize are the real size of a file (no shadowed) + */ +int pnfs_metadata_size_update(vnode_t *vp, off64_t newsize, + cred_t *cr, caller_context_t *ct) +{ + vattr_t vattr; + int err; + + /* + * TODO: + * write a null byte at newsize-1 so that the size + * is correct. VOP_SETATTR may fail if the mode of + * the file denies the implementation. + */ + + vattr.va_size = pnfs_shadow_size(newsize); + vattr.va_mask = AT_SIZE; + err = VOP_SETATTR(vp, &vattr, 0, cr, ct); + return (err); +}
--- a/usr/src/uts/common/fs/nfs/nfs_nnode_proxy.c Thu Aug 22 00:08:30 2013 +0400 +++ b/usr/src/uts/common/fs/nfs/nfs_nnode_proxy.c Thu Aug 22 00:08:39 2013 +0400 @@ -679,15 +679,12 @@ nnode_proxy_data_t *mnd = vdata; vnode_t *vp = mnd->mnd_vp; vattr_t *vap = &mnd->mnd_vattr; - vattr_t vattr; int err; - if (off <= vap->va_size) + if (off < vap->va_size) return (0); - vattr.va_size = pnfs_shadow_size(off); - vattr.va_mask = AT_SIZE; - err = VOP_SETATTR(vp, &vattr, 0, cr, ct); + err = pnfs_metadata_size_update(vp, off, cr, ct); return (err); }
--- a/usr/src/uts/common/nfs/nfs.h Thu Aug 22 00:08:30 2013 +0400 +++ b/usr/src/uts/common/nfs/nfs.h Thu Aug 22 00:08:39 2013 +0400 @@ -2406,6 +2406,9 @@ extern uint64_t pnfs_real_size(uint64_t); extern uint64_t pnfs_shadow_size(uint64_t); +extern int pnfs_metadata_size_update(vnode_t *, off64_t, cred_t *, + caller_context_t *); + extern int nfs_vop_getattr(vnode_t *, vattr_t *, int, cred_t *, caller_context_t *, struct exportinfo *exi);