From 1cc83c61c06b8271e856466530513dd63c3e8681 Mon Sep 17 00:00:00 2001 From: Amar Tumballi Date: Sat, 18 Sep 2010 01:54:09 +0000 Subject: check for 'link_inode' in server protocol * also log and return in case of 'fd_bind' getting fd with NULL inode. Signed-off-by: Amar Tumballi Signed-off-by: Vijay Bellur BUG: 1635 (running mixed tests glusterfs crashed) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=1635 --- libglusterfs/src/fd.c | 4 ++-- xlators/protocol/server/src/server3_1-fops.c | 7 +++++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/libglusterfs/src/fd.c b/libglusterfs/src/fd.c index 5e25b59c..c656bda6 100644 --- a/libglusterfs/src/fd.c +++ b/libglusterfs/src/fd.c @@ -484,8 +484,8 @@ fd_bind (fd_t *fd) { inode_t *inode = NULL; - if (!fd) { - gf_log ("fd.c", GF_LOG_ERROR, "fd is NULL"); + if (!fd || !fd->inode) { + gf_log_callingfn ("fd", GF_LOG_ERROR, "!fd || !fd->inode"); return NULL; } inode = fd->inode; diff --git a/xlators/protocol/server/src/server3_1-fops.c b/xlators/protocol/server/src/server3_1-fops.c index 1ced00a4..a0276ad6 100644 --- a/xlators/protocol/server/src/server3_1-fops.c +++ b/xlators/protocol/server/src/server3_1-fops.c @@ -1368,6 +1368,12 @@ server_create_cbk (call_frame_t *frame, void *cookie, xlator_t *this, link_inode = inode_link (inode, state->loc.parent, state->loc.name, stbuf); + if (!link_inode) { + op_ret = -1; + op_errno = ENOENT; + goto out; + } + if (link_inode != inode) { /* VERY racy code (if used anywhere else) @@ -1402,6 +1408,7 @@ server_create_cbk (call_frame_t *frame, void *cookie, xlator_t *this, op_ret, strerror (op_errno)); } +out: req = frame->local; rsp.fd = fd_no; -- cgit