summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xlibglusterfsclient/src/libglusterfsclient-internals.h4
-rwxr-xr-xlibglusterfsclient/src/libglusterfsclient.c17
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);