From cf8486cbef329ef66868f658fa35f470f97db462 Mon Sep 17 00:00:00 2001 From: Amar Tumballi Date: Wed, 18 Jan 2012 18:06:44 +0530 Subject: core: get xattrs also as part of readdirp readdirp_req() call sends a dict_t * as an argument, which contains all the xattr keys for which the entries got in readdirp_rsp() are having xattr value filled dictionary. Change-Id: I8b7e1290740ea3e884e67d19156ce849227167c0 Signed-off-by: Amar Tumballi BUG: 765785 Reviewed-on: http://review.gluster.com/771 Tested-by: Gluster Build System Reviewed-by: Anand Avati --- xlators/performance/io-cache/src/io-cache.c | 33 +++++++++++++++++++++- xlators/performance/io-threads/src/io-threads.c | 8 +++--- .../performance/stat-prefetch/src/stat-prefetch.c | 14 ++++++--- 3 files changed, 46 insertions(+), 9 deletions(-) (limited to 'xlators/performance') diff --git a/xlators/performance/io-cache/src/io-cache.c b/xlators/performance/io-cache/src/io-cache.c index 009e7cf28e1..65df006cfe4 100644 --- a/xlators/performance/io-cache/src/io-cache.c +++ b/xlators/performance/io-cache/src/io-cache.c @@ -1409,6 +1409,35 @@ ioc_lk (call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t cmd, return 0; } +int +ioc_readdirp_cbk (call_frame_t *frame, void *cookie, xlator_t *this, + int op_ret, int op_errno, gf_dirent_t *entries) +{ + gf_dirent_t *entry = NULL; + + if (op_ret <= 0) + goto unwind; + + list_for_each_entry (entry, &entries->list, list) { + /* TODO: fill things */ + } + +unwind: + STACK_UNWIND_STRICT (readdirp, frame, op_ret, op_errno, entries); + + return 0; +} +int +ioc_readdirp (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size, + off_t offset, dict_t *dict) +{ + STACK_WIND (frame, ioc_readdirp_cbk, + FIRST_CHILD(this), FIRST_CHILD(this)->fops->readdirp, + fd, size, offset, dict); + + return 0; +} + int32_t ioc_get_priority_list (const char *opt_str, struct list_head *first) { @@ -1924,7 +1953,9 @@ struct xlator_fops fops = { .lookup = ioc_lookup, .lk = ioc_lk, .setattr = ioc_setattr, - .mknod = ioc_mknod + .mknod = ioc_mknod, + + .readdirp = ioc_readdirp, }; diff --git a/xlators/performance/io-threads/src/io-threads.c b/xlators/performance/io-threads/src/io-threads.c index d6d0ada23e4..e4077478182 100644 --- a/xlators/performance/io-threads/src/io-threads.c +++ b/xlators/performance/io-threads/src/io-threads.c @@ -1840,23 +1840,23 @@ iot_readdirp_cbk (call_frame_t *frame, void *cookie, xlator_t *this, int iot_readdirp_wrapper (call_frame_t *frame, xlator_t *this, fd_t *fd, - size_t size, off_t offset) + size_t size, off_t offset, dict_t *dict) { STACK_WIND (frame, iot_readdirp_cbk, FIRST_CHILD (this), - FIRST_CHILD (this)->fops->readdirp, fd, size, offset); + FIRST_CHILD (this)->fops->readdirp, fd, size, offset, dict); return 0; } int iot_readdirp (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size, - off_t offset) + off_t offset, dict_t *dict) { call_stub_t *stub = NULL; int ret = -1; stub = fop_readdirp_stub (frame, iot_readdirp_wrapper, fd, size, - offset); + offset, dict); if (!stub) { gf_log (this->private, GF_LOG_ERROR,"cannot get readdir stub" "(out of memory)"); diff --git a/xlators/performance/stat-prefetch/src/stat-prefetch.c b/xlators/performance/stat-prefetch/src/stat-prefetch.c index 73cc3a955d8..827a9f99d28 100644 --- a/xlators/performance/stat-prefetch/src/stat-prefetch.c +++ b/xlators/performance/stat-prefetch/src/stat-prefetch.c @@ -1351,8 +1351,8 @@ out: int32_t -sp_readdir (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size, - off_t off) +sp_readdirp (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size, + off_t off, dict_t *dict) { sp_cache_t *cache = NULL; sp_local_t *local = NULL; @@ -1401,7 +1401,7 @@ sp_readdir (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size, } STACK_WIND (frame, sp_readdir_cbk, FIRST_CHILD(this), - FIRST_CHILD(this)->fops->readdirp, fd, size, off); + FIRST_CHILD(this)->fops->readdirp, fd, size, off, dict); return 0; @@ -1414,6 +1414,12 @@ unwind: return 0; } +int32_t +sp_readdir (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size, + off_t off) +{ + return sp_readdirp (frame, this, fd, size, off, NULL); +} int32_t sp_truncate_cbk (call_frame_t *frame, void *cookie, xlator_t *this, @@ -4215,7 +4221,7 @@ out: struct xlator_fops fops = { .lookup = sp_lookup, .readdir = sp_readdir, - .readdirp = sp_readdir, + .readdirp = sp_readdirp, .open = sp_open, .create = sp_create, .opendir = sp_opendir, -- cgit