diff options
| author | Amar Tumballi <amar@gluster.com> | 2010-09-18 01:54:09 +0000 | 
|---|---|---|
| committer | Vijay Bellur <vijay@dev.gluster.com> | 2010-09-18 00:51:34 -0700 | 
| commit | 1cc83c61c06b8271e856466530513dd63c3e8681 (patch) | |
| tree | ee8e038c1a09e21640c2b37897ba42b19bb2791d | |
| parent | 8ba46b4c2d6f67887454d1e6756e6dc476d9457d (diff) | |
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 <amar@gluster.com>
Signed-off-by: Vijay Bellur <vijay@dev.gluster.com>
BUG: 1635 (running mixed tests glusterfs crashed)
URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=1635
| -rw-r--r-- | libglusterfs/src/fd.c | 4 | ||||
| -rw-r--r-- | 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 5e25b59cf91..c656bda6cdc 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 1ced00a4bc2..a0276ad6bb4 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;  | 
