diff options
-rwxr-xr-x | libglusterfsclient/src/libglusterfsclient.c | 39 |
1 files changed, 27 insertions, 12 deletions
diff --git a/libglusterfsclient/src/libglusterfsclient.c b/libglusterfsclient/src/libglusterfsclient.c index a298bd33264..83943bd2acd 100755 --- a/libglusterfsclient/src/libglusterfsclient.c +++ b/libglusterfsclient/src/libglusterfsclient.c @@ -4730,13 +4730,18 @@ libgf_client_stat (libglusterfs_client_ctx_t *ctx, op_ret = stub->args.stat_cbk.op_ret; errno = stub->args.stat_cbk.op_errno; libgf_transform_iattr (ctx, loc->inode, &stub->args.stat_cbk.buf); - if (stbuf) - *stbuf = stub->args.stat_cbk.buf; gf_log (LIBGF_XL_NAME, GF_LOG_DEBUG, "path %s, status %d, errno %d", loc->path, op_ret, errno); - libgf_update_iattr_cache (loc->inode, LIBGF_UPDATE_STAT, - &stub->args.stat_cbk.buf); + + if (op_ret == 0) { + if (stbuf) + *stbuf = stub->args.stat_cbk.buf; + + libgf_update_iattr_cache (loc->inode, LIBGF_UPDATE_STAT, + &stub->args.stat_cbk.buf); + } + call_stub_destroy (stub); out: @@ -4962,14 +4967,17 @@ libgf_client_fstat (libglusterfs_client_ctx_t *ctx, op_ret = stub->args.fstat_cbk.op_ret; errno = stub->args.fstat_cbk.op_errno; - libgf_transform_iattr (ctx, fd->inode, &stub->args.fstat_cbk.buf); - if (buf) - *buf = stub->args.fstat_cbk.buf; - gf_log (LIBGF_XL_NAME, GF_LOG_DEBUG, "status %d, errno %d", op_ret, errno); - libgf_update_iattr_cache (fd->inode, LIBGF_UPDATE_STAT, - &stub->args.fstat_cbk.buf); + + if (op_ret == 0) { + libgf_transform_iattr (ctx, fd->inode, + &stub->args.fstat_cbk.buf); + if (buf) + *buf = stub->args.fstat_cbk.buf; + libgf_update_iattr_cache (fd->inode, LIBGF_UPDATE_STAT, + &stub->args.fstat_cbk.buf); + } call_stub_destroy (stub); out: @@ -7913,15 +7921,22 @@ libgf_client_truncate (libglusterfs_client_ctx_t *ctx, op_ret = stub->args.truncate_cbk.op_ret; errno = stub->args.truncate_cbk.op_errno; - libgf_transform_iattr (ctx, loc->inode, - &stub->args.truncate_cbk.postbuf); gf_log (LIBGF_XL_NAME, GF_LOG_DEBUG, "path %s, status %d, errno %d", loc->path, op_ret, errno); + + if (op_ret == -1) { + goto out; + } + + libgf_transform_iattr (ctx, loc->inode, + &stub->args.truncate_cbk.postbuf); + libgf_update_iattr_cache (loc->inode, LIBGF_UPDATE_STAT, &stub->args.truncate_cbk.postbuf); call_stub_destroy (stub); +out: return op_ret; } |