From 0cdb1d147afd644153855f6557bf7e809e5444f0 Mon Sep 17 00:00:00 2001 From: Raghavendra Bhat Date: Fri, 11 May 2012 18:11:31 +0530 Subject: libglusterfs/fd: while dumping the fd_ctx use fd->xl_count While dumping the fd_ctx when statedump is issued fd->xl_count should be used to determine the number of xlators instead of using latest graph's count, since while creating the fd only those many slots would have been allocated as the number of xlators in the graph at that instant. Then the graph would have changed, thus the xl count. All the above things should happen before any operation is done on fd, otherwise fd_ctx_set will allocate the extra slots for the new xlators present in the graph. Also added the program which can be used to reproduce the bug. Change-Id: I11fe75d71ef5d37e29e2958d53752aa31098c313 BUG: 820887 Signed-off-by: Raghavendra Bhat Reviewed-on: http://review.gluster.com/3335 Tested-by: Gluster Build System Reviewed-by: Vijay Bellur Reviewed-on: http://review.gluster.com/3369 --- libglusterfs/src/fd.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) (limited to 'libglusterfs') diff --git a/libglusterfs/src/fd.c b/libglusterfs/src/fd.c index db92ee00ad1..3a7a592786c 100644 --- a/libglusterfs/src/fd.c +++ b/libglusterfs/src/fd.c @@ -1030,15 +1030,13 @@ fd_ctx_dump (fd_t *fd, char *prefix) LOCK (&fd->lock); { if (fd->_ctx != NULL) { - fd_ctx = GF_CALLOC (fd->inode->table->xl->graph->xl_count, - sizeof (*fd_ctx), + fd_ctx = GF_CALLOC (fd->xl_count, sizeof (*fd_ctx), gf_common_mt_fd_ctx); if (fd_ctx == NULL) { goto unlock; } - for (i = 0; i < fd->inode->table->xl->graph->xl_count; - i++) { + for (i = 0; i < fd->xl_count; i++) { fd_ctx[i] = fd->_ctx[i]; } } @@ -1050,7 +1048,7 @@ unlock: goto out; } - for (i = 0; i < fd->inode->table->xl->graph->xl_count; i++) { + for (i = 0; i < fd->xl_count; i++) { if (fd_ctx[i].xl_key) { xl = (xlator_t *)(long)fd_ctx[i].xl_key; if (xl->dumpops && xl->dumpops->fdctx) -- cgit