diff options
Diffstat (limited to 'libglusterfsclient')
| -rwxr-xr-x | libglusterfsclient/src/libglusterfsclient-internals.h | 4 | ||||
| -rwxr-xr-x | libglusterfsclient/src/libglusterfsclient.c | 17 | 
2 files changed, 16 insertions, 5 deletions
diff --git a/libglusterfsclient/src/libglusterfsclient-internals.h b/libglusterfsclient/src/libglusterfsclient-internals.h index 9b14dcb9153..951843ef421 100755 --- a/libglusterfsclient/src/libglusterfsclient-internals.h +++ b/libglusterfsclient/src/libglusterfsclient-internals.h @@ -64,10 +64,12 @@ typedef struct {                          int32_t size;                  } lookup;          }fop; -        fd_t *dirfd;       /* Needed here because we need a ref to the dir +        fd_t *fd;          /* Needed here because we need a ref to the dir                                fd in the libgf_client_readdir_cbk in order                                to process the dirents received, without                                having them added to the reply stub. +                              Also used in updating iattr cache. See +                              readv_cbk for eg.                                */  }libgf_client_local_t; diff --git a/libglusterfsclient/src/libglusterfsclient.c b/libglusterfsclient/src/libglusterfsclient.c index 7246c91ccc7..1cb66ab280e 100755 --- a/libglusterfsclient/src/libglusterfsclient.c +++ b/libglusterfsclient/src/libglusterfsclient.c @@ -3105,7 +3105,7 @@ libgf_client_readv_cbk (call_frame_t *frame,          local->reply_stub = fop_readv_cbk_stub (frame, NULL, op_ret, op_errno,                                                  vector, count, stbuf, iobref); - +        libgf_update_iattr_cache (local->fd->inode, LIBGF_UPDATE_STAT, stbuf);          LIBGF_REPLY_NOTIFY (local);          return 0;  } @@ -3123,6 +3123,9 @@ libgf_client_read (libglusterfs_client_ctx_t *ctx,          int count = 0;          libgf_client_local_t *local = NULL; +        local = CALLOC (1, sizeof (*local)); +        ERR_ABORT (local); +        local->fd = fd;          LIBGF_CLIENT_FOP (ctx, stub, readv, local, fd, size, offset);          op_ret = stub->args.readv_cbk.op_ret; @@ -3220,6 +3223,9 @@ libgf_client_readv (libglusterfs_client_ctx_t *ctx,                  size += dst_vector[i].iov_len;          } +        local = CALLOC (1, sizeof (*local)); +        ERR_ABORT (local); +        local->fd = fd;          LIBGF_CLIENT_FOP (ctx, stub, readv, local, fd, size, offset);          op_ret = stub->args.readv_cbk.op_ret; @@ -3369,7 +3375,7 @@ libgf_client_writev_cbk (call_frame_t *frame,          local->reply_stub = fop_writev_cbk_stub (frame, NULL, op_ret, op_errno,                                                   stbuf); - +        libgf_update_iattr_cache (local->fd->inode, LIBGF_UPDATE_STAT, stbuf);          LIBGF_REPLY_NOTIFY (local);          return 0;  } @@ -3387,6 +3393,9 @@ libgf_client_writev (libglusterfs_client_ctx_t *ctx,          struct iobref *iobref = NULL;          iobref = iobref_new (); +        local = CALLOC (1, sizeof (*local)); +        ERR_ABORT (local); +        local->fd = fd;          LIBGF_CLIENT_FOP (ctx, stub, writev, local, fd, vector, count, offset,                            iobref); @@ -3587,7 +3596,7 @@ libgf_client_readdir_cbk (call_frame_t *frame,          local->reply_stub = fop_readdir_cbk_stub (frame, NULL, op_ret, op_errno,                                                    NULL);          if (op_ret > 0) -                libgf_dcache_update (frame->root->state, local->dirfd, entries); +                libgf_dcache_update (frame->root->state, local->fd, entries);          LIBGF_REPLY_NOTIFY (local);          return 0;  } @@ -3604,7 +3613,7 @@ libgf_client_readdir (libglusterfs_client_ctx_t *ctx, fd_t *fd,                  return 1;          local = CALLOC (1, sizeof (*local));          ERR_ABORT (local); -        local->dirfd = fd; +        local->fd = fd;          LIBGF_CLIENT_FOP (ctx, stub, readdir, local, fd,                            LIBGF_READDIR_BLOCK, *offset);  | 
