From 1e0b3920dc0bcb8d15586adceacacedba75b17ab Mon Sep 17 00:00:00 2001 From: Shehjar Tikoo Date: Thu, 1 Oct 2009 06:58:59 +0000 Subject: read-ahead: NFS-friendly logic changes Signed-off-by: Anand V. Avati BUG: 145 (NFSv3 related additions to 2.1 task list) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=145 --- xlators/performance/read-ahead/src/read-ahead.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) (limited to 'xlators/performance/read-ahead/src/read-ahead.c') diff --git a/xlators/performance/read-ahead/src/read-ahead.c b/xlators/performance/read-ahead/src/read-ahead.c index a6b6f2f2..cc876486 100644 --- a/xlators/performance/read-ahead/src/read-ahead.c +++ b/xlators/performance/read-ahead/src/read-ahead.c @@ -48,6 +48,7 @@ ra_open_cbk (call_frame_t *frame, void *cookie, xlator_t *this, ra_conf_t *conf = NULL; ra_file_t *file = NULL; int ret = 0; + long wbflags = 0; conf = this->private; @@ -55,6 +56,8 @@ ra_open_cbk (call_frame_t *frame, void *cookie, xlator_t *this, goto unwind; } + wbflags = (long)frame->local; + file = CALLOC (1, sizeof (*file)); if (!file) { op_ret = -1; @@ -77,6 +80,10 @@ ra_open_cbk (call_frame_t *frame, void *cookie, xlator_t *this, if ((fd->flags & O_DIRECT) || ((fd->flags & O_ACCMODE) == O_WRONLY)) file->disabled = 1; + if (wbflags & GF_OPEN_NOWB) { + file->disabled = 1; + } + file->offset = (unsigned long long) 0; file->conf = conf; file->pages.next = &file->pages; @@ -102,6 +109,8 @@ ra_open_cbk (call_frame_t *frame, void *cookie, xlator_t *this, file->page_count = 1; } + frame->local = NULL; + unwind: STACK_UNWIND (frame, op_ret, op_errno, fd); @@ -170,7 +179,8 @@ ra_create_cbk (call_frame_t *frame, void *cookie, xlator_t *this, pthread_mutex_init (&file->file_lock, NULL); unwind: - STACK_UNWIND (frame, op_ret, op_errno, fd, inode, buf); + STACK_UNWIND (frame, op_ret, op_errno, fd, inode, buf, preparent, + postparent); return 0; } @@ -180,6 +190,8 @@ int ra_open (call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags, fd_t *fd, int32_t wbflags) { + frame->local = (void *)(long)wbflags; + STACK_WIND (frame, ra_open_cbk, FIRST_CHILD (this), FIRST_CHILD (this)->fops->open, @@ -511,7 +523,7 @@ ra_readv (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size, return 0; unwind: - STACK_UNWIND (frame, -1, op_errno, NULL, 0, NULL); + STACK_UNWIND (frame, -1, op_errno, NULL, 0, NULL, NULL); return 0; } @@ -595,7 +607,7 @@ ra_fsync (call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t datasync) return 0; unwind: - STACK_UNWIND (frame, -1, op_errno); + STACK_UNWIND (frame, -1, op_errno, NULL, NULL); return 0; } @@ -656,7 +668,7 @@ ra_writev (call_frame_t *frame, xlator_t *this, fd_t *fd, struct iovec *vector, return 0; unwind: - STACK_UNWIND (frame, -1, op_errno, NULL); + STACK_UNWIND (frame, -1, op_errno, NULL, NULL); return 0; } -- cgit