diff options
Diffstat (limited to 'xlators/protocol/server/src/server-rpc-fops.c')
-rw-r--r-- | xlators/protocol/server/src/server-rpc-fops.c | 331 |
1 files changed, 5 insertions, 326 deletions
diff --git a/xlators/protocol/server/src/server-rpc-fops.c b/xlators/protocol/server/src/server-rpc-fops.c index 1b87abaafda..7f2bd5e0312 100644 --- a/xlators/protocol/server/src/server-rpc-fops.c +++ b/xlators/protocol/server/src/server-rpc-fops.c @@ -46,7 +46,7 @@ forget_inode_if_no_dentry (inode_t *inode) return; } -static void +void set_resolve_gfid (client_t *client, uuid_t resolve_gfid, char *on_wire_gfid) { @@ -882,7 +882,7 @@ out: } /* print every key */ -static int +int _gf_server_log_setxattr_failure (dict_t *d, char *k, data_t *v, void *tmp) { @@ -2207,97 +2207,6 @@ out: return 0; } -int -server_namelink_cbk (call_frame_t *frame, - void *cookie, xlator_t *this, - int32_t op_ret, int32_t op_errno, - struct iatt *prebuf, struct iatt *postbuf, dict_t *xdata) -{ - gfs4_namelink_rsp rsp = {0,}; - rpcsvc_request_t *req = NULL; - - GF_PROTOCOL_DICT_SERIALIZE (this, xdata, &rsp.xdata.xdata_val, - rsp.xdata.xdata_len, op_errno, out); - - if (op_ret < 0) - goto out; - - gf_stat_from_iatt (&rsp.preparent, prebuf); - gf_stat_from_iatt (&rsp.postparent, postbuf); - - /** - * no point in linking inode here -- there's no stbuf anyway and a - * lookup() for this name entry would be a negative lookup. - */ - -out: - rsp.op_ret = op_ret; - rsp.op_errno = gf_errno_to_error (op_errno); - - req = frame->local; - server_submit_reply (frame, req, &rsp, NULL, 0, NULL, - (xdrproc_t)xdr_gfs4_namelink_rsp); - - GF_FREE (rsp.xdata.xdata_val); - - return 0; -} - -int -server_icreate_cbk (call_frame_t *frame, - void *cookie, xlator_t *this, - int32_t op_ret, int32_t op_errno, - inode_t *inode, struct iatt *stbuf, dict_t *xdata) -{ - server_state_t *state = NULL; - inode_t *link_inode = NULL; - rpcsvc_request_t *req = NULL; - gfs3_create_rsp rsp = {0,}; - - GF_PROTOCOL_DICT_SERIALIZE (this, xdata, &rsp.xdata.xdata_val, - rsp.xdata.xdata_len, op_errno, out); - - state = CALL_STATE (frame); - - if (op_ret < 0) { - gf_msg (this->name, GF_LOG_INFO, op_errno, PS_MSG_CREATE_INFO, - "%"PRId64": ICREATE [%s] ==> (%s)", - frame->root->unique, uuid_utoa (state->resolve.gfid), - strerror (op_errno)); - goto out; - } - - gf_msg_trace (frame->root->client->bound_xl->name, 0, "%"PRId64": " - "ICREATE [%s]", frame->root->unique, - uuid_utoa (stbuf->ia_gfid)); - - link_inode = inode_link (inode, - state->loc.parent, state->loc.name, stbuf); - - if (!link_inode) { - op_ret = -1; - op_errno = ENOENT; - goto out; - } - - inode_lookup (link_inode); - inode_unref (link_inode); - - gf_stat_from_iatt (&rsp.stat, stbuf); - -out: - rsp.op_ret = op_ret; - rsp.op_errno = gf_errno_to_error (op_errno); - - req = frame->local; - server_submit_reply (frame, req, &rsp, NULL, 0, NULL, - (xdrproc_t)xdr_gfs4_icreate_rsp); - - GF_FREE (rsp.xdata.xdata_val); - - return 0; -} - /* Resume function section */ int @@ -3543,56 +3452,8 @@ err: return ret; } -int -server_namelink_resume (call_frame_t *frame, xlator_t *bound_xl) -{ - server_state_t *state = NULL; - - state = CALL_STATE (frame); - - if (state->resolve.op_ret != 0) - goto err; - - state->loc.inode = inode_new (state->itable); - - STACK_WIND (frame, server_namelink_cbk, - bound_xl, bound_xl->fops->namelink, - &(state->loc), state->xdata); - return 0; - - err: - server_namelink_cbk (frame, NULL, - frame->this, - state->resolve.op_ret, - state->resolve.op_errno, NULL, NULL, NULL); - return 0; -} - -int -server_icreate_resume (call_frame_t *frame, xlator_t *bound_xl) -{ - server_state_t *state = NULL; - - state = CALL_STATE (frame); - - if (state->resolve.op_ret != 0) - goto err; - - state->loc.inode = inode_new (state->itable); - - STACK_WIND (frame, server_icreate_cbk, - bound_xl, bound_xl->fops->icreate, - &(state->loc), state->mode, state->xdata); - - return 0; -err: - server_icreate_cbk (frame, NULL, frame->this, state->resolve.op_ret, - state->resolve.op_errno, NULL, NULL, NULL); - return 0; -} - /* Fop section */ -static inline int +int rpc_receive_common (rpcsvc_request_t *req, call_frame_t **fr, server_state_t **st, ssize_t *xdrlen, void *args, void *xdrfn, glusterfs_fop_t fop) @@ -6228,186 +6089,6 @@ out: return ret; } -int -server3_3_namelink (rpcsvc_request_t *req) -{ - server_state_t *state = NULL; - call_frame_t *frame = NULL; - gfs4_namelink_req args = {{0,},}; - int ret = -1; - int op_errno = 0; - - if (!req) - return ret; - - ret = rpc_receive_common (req, &frame, &state, NULL, &args, - xdr_gfs4_namelink_req, GF_FOP_NAMELINK); - - if (ret != 0) - goto out; - - state->resolve.bname = gf_strdup (args.bname); - memcpy (state->resolve.pargfid, args.pargfid, sizeof (uuid_t)); - - state->resolve.type = RESOLVE_NOT; - - /* TODO: can do alloca for xdata field instead of stdalloc */ - GF_PROTOCOL_DICT_UNSERIALIZE (frame->root->client->bound_xl, - state->xdata, - args.xdata.xdata_val, - args.xdata.xdata_len, ret, - op_errno, out); - - ret = 0; - resolve_and_resume (frame, server_namelink_resume); - -out: - /* memory allocated by libc, don't use GF_FREE */ - free (args.xdata.xdata_val); - - if (op_errno) - SERVER_REQ_SET_ERROR (req, ret); - - return ret; - -} - -int -server3_3_icreate (rpcsvc_request_t *req) -{ - server_state_t *state = NULL; - call_frame_t *frame = NULL; - gfs4_icreate_req args = {{0,},}; - int ret = -1; - int op_errno = 0; - uuid_t gfid = {0,}; - - if (!req) - return ret; - - ret = rpc_receive_common (req, &frame, &state, NULL, &args, - xdr_gfs4_icreate_req, GF_FOP_ICREATE); - - if (ret != 0) - goto out; - - memcpy (gfid, args.gfid, sizeof (uuid_t)); - - state->mode = args.mode; - gf_asprintf (&state->resolve.bname, INODE_PATH_FMT, uuid_utoa (gfid)); - - /* parent is an auxillary inode number */ - memset (state->resolve.pargfid, 0, sizeof (uuid_t)); - state->resolve.pargfid[15] = GF_AUXILLARY_PARGFID; - - state->resolve.type = RESOLVE_NOT; - - /* TODO: can do alloca for xdata field instead of stdalloc */ - GF_PROTOCOL_DICT_UNSERIALIZE (frame->root->client->bound_xl, - state->xdata, - args.xdata.xdata_val, - args.xdata.xdata_len, ret, - op_errno, out); - - ret = 0; - resolve_and_resume (frame, server_icreate_resume); - -out: - /* memory allocated by libc, don't use GF_FREE */ - free (args.xdata.xdata_val); - - if (op_errno) - SERVER_REQ_SET_ERROR (req, ret); - - return ret; -} - -int -server4_0_fsetattr (rpcsvc_request_t *req) -{ - server_state_t *state = NULL; - call_frame_t *frame = NULL; - gfs3_fsetattr_req_v2 args = {{0},}; - int ret = -1; - int op_errno = 0; - - if (!req) - return ret; - - ret = rpc_receive_common (req, &frame, &state, NULL, &args, - xdr_gfs3_fsetattr_req_v2, - GF_FOP_FSETATTR); - if (ret != 0) { - goto out; - } - - state->resolve.type = RESOLVE_MUST; - state->resolve.fd_no = args.fd; - memcpy (state->resolve.gfid, args.gfid, 16); - - gf_stat_to_iatt (&args.stbuf, &state->stbuf); - state->valid = args.valid; - - GF_PROTOCOL_DICT_UNSERIALIZE (frame->root->client->bound_xl, - state->xdata, (args.xdata.xdata_val), - (args.xdata.xdata_len), ret, - op_errno, out); - - ret = 0; - resolve_and_resume (frame, server_fsetattr_resume); - -out: - free (args.xdata.xdata_val); - - if (op_errno) - SERVER_REQ_SET_ERROR (req, ret); - - return ret; -} - -int -server4_0_rchecksum (rpcsvc_request_t *req) -{ - server_state_t *state = NULL; - call_frame_t *frame = NULL; - gfs3_rchecksum_req_v2 args = {{0},}; - int ret = -1; - int op_errno = 0; - - if (!req) - return ret; - - ret = rpc_receive_common (req, &frame, &state, NULL, &args, - xdr_gfs3_rchecksum_req_v2, - GF_FOP_RCHECKSUM); - if (ret != 0) { - goto out; - } - - state->resolve.type = RESOLVE_MAY; - state->resolve.fd_no = args.fd; - state->offset = args.offset; - state->size = args.len; - - memcpy (state->resolve.gfid, args.gfid, 16); - - GF_PROTOCOL_DICT_UNSERIALIZE (frame->root->client->bound_xl, - state->xdata, (args.xdata.xdata_val), - (args.xdata.xdata_len), ret, - op_errno, out); - - ret = 0; - resolve_and_resume (frame, server_rchecksum_resume); -out: - free (args.xdata.xdata_val); - - if (op_errno) - SERVER_REQ_SET_ERROR (req, ret); - - return ret; -} - - rpcsvc_actor_t glusterfs3_3_fop_actors[GLUSTER_FOP_PROCCNT] = { [GFS3_OP_NULL] = {"NULL", GFS3_OP_NULL, server_null, NULL, 0, DRC_NA}, @@ -6513,9 +6194,9 @@ rpcsvc_actor_t glusterfs4_0_fop_actors[] = { [GFS3_OP_FXATTROP] = { "FXATTROP", GFS3_OP_FXATTROP, server3_3_fxattrop, NULL, 0}, [GFS3_OP_FGETXATTR] = { "FGETXATTR", GFS3_OP_FGETXATTR, server3_3_fgetxattr, NULL, 0}, [GFS3_OP_FSETXATTR] = { "FSETXATTR", GFS3_OP_FSETXATTR, server3_3_fsetxattr, NULL, 0}, - [GFS3_OP_RCHECKSUM] = { "RCHECKSUM", GFS3_OP_RCHECKSUM, server4_0_rchecksum, NULL, 0}, + [GFS3_OP_RCHECKSUM] = { "RCHECKSUM", GFS3_OP_RCHECKSUM, server3_3_rchecksum, NULL, 0}, [GFS3_OP_SETATTR] = { "SETATTR", GFS3_OP_SETATTR, server3_3_setattr, NULL, 0}, - [GFS3_OP_FSETATTR] = { "FSETATTR", GFS3_OP_FSETATTR, server4_0_fsetattr, NULL, 0}, + [GFS3_OP_FSETATTR] = { "FSETATTR", GFS3_OP_FSETATTR, server3_3_fsetattr, NULL, 0}, [GFS3_OP_READDIRP] = { "READDIRP", GFS3_OP_READDIRP, server3_3_readdirp, NULL, 0}, [GFS3_OP_RELEASE] = { "RELEASE", GFS3_OP_RELEASE, server3_3_release, NULL, 0}, [GFS3_OP_RELEASEDIR] = { "RELEASEDIR", GFS3_OP_RELEASEDIR, server3_3_releasedir, NULL, 0}, @@ -6529,8 +6210,6 @@ rpcsvc_actor_t glusterfs4_0_fop_actors[] = { [GFS3_OP_GETACTIVELK] = {"GETACTIVELK", GFS3_OP_GETACTIVELK, server3_3_getactivelk, NULL, 0, DRC_NA}, [GFS3_OP_SETACTIVELK] = {"SETACTIVELK", GFS3_OP_SETACTIVELK, server3_3_setactivelk, NULL, 0, DRC_NA}, [GFS3_OP_COMPOUND] = {"COMPOUND", GFS3_OP_COMPOUND, server3_3_compound, NULL, 0, DRC_NA}, - [GFS3_OP_ICREATE] = {"ICREATE", GFS3_OP_ICREATE, server3_3_icreate, NULL, 0, DRC_NA}, - [GFS3_OP_NAMELINK] = {"NAMELINK", GFS3_OP_NAMELINK, server3_3_namelink, NULL, 0, DRC_NA}, }; |