summaryrefslogtreecommitdiffstats
path: root/libglusterfsclient/src/libglusterfsclient.c
diff options
context:
space:
mode:
authorShehjar Tikoo <shehjart@gluster.com>2009-07-02 06:20:21 +0000
committerAnand V. Avati <avati@dev.gluster.com>2009-07-07 16:24:53 -0700
commit428d17946b5bb5946996f045811fdc2393378737 (patch)
tree653bff6f07929631edb017e558ff05aa85c67a63 /libglusterfsclient/src/libglusterfsclient.c
parentb470684cbf9d77c9a63ef9406b5545f844f904ff (diff)
libglusterfsclient: Update attr cache on read/write
We werent updating the attr AKA stat cache on read and write on files so every stat on the file before the timeout was returning stale attr from the cache. Yuck! This fixes it. Turns out there is a good aspect of unfs3's notoriety when it comes to doing stat()s for every operation. Signed-off-by: Anand V. Avati <avati@dev.gluster.com>
Diffstat (limited to 'libglusterfsclient/src/libglusterfsclient.c')
-rwxr-xr-xlibglusterfsclient/src/libglusterfsclient.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/libglusterfsclient/src/libglusterfsclient.c b/libglusterfsclient/src/libglusterfsclient.c
index 7246c91..1cb66ab 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);