fuse: Check the return status from state->resolve_now

Change-Id: I85fc6dd393449d365bb908b38c2827b58cb08171
BUG: 1030208
Signed-off-by: Vijaykumar M <vmallika@redhat.com>
Reviewed-on: http://review.gluster.org/6262
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Anand Avati <avati@redhat.com>
This commit is contained in:
Vijaykumar M 2013-11-14 13:12:09 +05:30 committed by Anand Avati
parent e479660d9d
commit f21cefed29
2 changed files with 49 additions and 7 deletions

35
tests/bugs/bug-1030208.t Normal file
View File

@ -0,0 +1,35 @@
#!/bin/bash
#Test case: Hardlink test
. $(dirname $0)/../include.rc
. $(dirname $0)/../volume.rc
cleanup;
#Basic checks
TEST glusterd
TEST pidof glusterd
TEST $CLI volume info
#Create a distributed volume
TEST $CLI volume create $V0 $H0:$B0/${V0}{1..2};
TEST $CLI volume start $V0
# Mount FUSE
TEST glusterfs -s $H0 --volfile-id $V0 $M0
#Create a file and perform fop on a DIR
TEST touch $M0/foo
TEST ls $M0/
#Create hardlink
TEST ln $M0/foo $M0/bar
TEST umount $M0
TEST $CLI volume stop $V0
TEST $CLI volume delete $V0;
TEST ! $CLI volume info $V0;
cleanup;

View File

@ -145,9 +145,10 @@ typedef struct fuse_graph_switch_args fuse_graph_switch_args_t;
#define FUSE_FOP(state, ret, op_num, fop, args ...) \
do { \
call_frame_t *frame = NULL; \
xlator_t *xl = NULL; \
int32_t op_ret = 0, op_errno = 0; \
call_frame_t *frame = NULL; \
xlator_t *xl = NULL; \
int32_t op_ret = 0, op_errno = 0; \
fuse_resolve_t *resolve = NULL; \
\
frame = get_call_frame_for_req (state); \
if (!frame) { \
@ -174,14 +175,20 @@ typedef struct fuse_graph_switch_args fuse_graph_switch_args_t;
frame->root->op = op_num; \
frame->op = op_num; \
\
if ( state->resolve_now ) { \
resolve = state->resolve_now; \
} else { \
resolve = &(state->resolve); \
} \
\
xl = state->active_subvol; \
if (!xl) { \
gf_log_callingfn ("glusterfs-fuse", GF_LOG_ERROR, \
"xl is NULL"); \
op_errno = ENOENT; \
op_ret = -1; \
} else if (state->resolve.op_ret < 0) { \
op_errno = state->resolve.op_errno; \
} else if (resolve->op_ret < 0) { \
op_errno = resolve->op_errno; \
op_ret = -1; \
if (op_num == GF_FOP_LOOKUP) { \
gf_log ("glusterfs-fuse", \
@ -190,7 +197,7 @@ typedef struct fuse_graph_switch_args fuse_graph_switch_args_t;
"%"PRIu64": %s() %s => -1 (%s)", \
frame->root->unique, \
gf_fop_list[frame->root->op], \
state->resolve.resolve_loc.path, \
resolve->resolve_loc.path, \
strerror (op_errno)); \
} else { \
gf_log ("glusterfs-fuse", \
@ -199,7 +206,7 @@ typedef struct fuse_graph_switch_args fuse_graph_switch_args_t;
"migration of %s failed (%s)", \
frame->root->unique, \
gf_fop_list[frame->root->op], \
state->resolve.resolve_loc.path, \
resolve->resolve_loc.path, \
strerror (op_errno)); \
} \
} else if (state->resolve2.op_ret < 0) { \