2
Copyright (c) 2017 Red Hat, Inc. <http://www.redhat.com>
3
This file is part of GlusterFS.
5
This file is licensed to you under your choice of the GNU Lesser
6
General Public License, version 3 or any later version (LGPLv3 or
7
later), or the GNU General Public License, version 2 (GPLv2), in all
8
cases as published by the Free Software Foundation.
12
#include "server-helpers.h"
13
#include "rpc-common-xdr.h"
14
#include "glusterfs3.h"
15
#include <glusterfs/compat-errno.h>
16
#include "server-messages.h"
17
#include <glusterfs/default-args.h>
18
#include "server-common.h"
24
#define SERVER_REQ_SET_ERROR(req, ret) \
26
rpcsvc_request_seterr(req, GARBAGE_ARGS); \
27
ret = RPCSVC_ACTOR_ERROR; \
31
_gf_server_log_setxattr_failure(dict_t *d, char *k, data_t *v, void *tmp)
33
server_state_t *state = NULL;
34
call_frame_t *frame = NULL;
37
state = CALL_STATE(frame);
39
gf_msg(THIS->name, GF_LOG_INFO, 0, PS_MSG_SETXATTR_INFO,
41
": SETXATTR %s (%s) ==> %s, client: %s, "
43
frame->root->unique, state->loc.path, uuid_utoa(state->resolve.gfid),
44
k, STACK_CLIENT_NAME(frame->root), STACK_ERR_XL_NAME(frame->root));
49
forget_inode_if_no_dentry(inode_t *inode)
55
if (!inode_has_dentry(inode))
56
inode_forget(inode, 0);
62
set_resolve_gfid(client_t *client, uuid_t resolve_gfid, char *on_wire_gfid)
64
if (client->subdir_mount && __is_root_gfid((unsigned char *)on_wire_gfid)) {
65
/* set the subdir_mount's gfid for proper resolution */
66
gf_uuid_copy(resolve_gfid, client->subdir_gfid);
68
memcpy(resolve_gfid, on_wire_gfid, 16);
73
rpc_receive_common(rpcsvc_request_t *req, call_frame_t **fr,
74
server_state_t **st, ssize_t *xdrlen, void *args,
75
void *xdrfn, glusterfs_fop_t fop)
80
len = xdr_to_generic(req->msg[0], args, (xdrproc_t)xdrfn);
82
/* failed to decode msg; */
83
SERVER_REQ_SET_ERROR(req, ret);
87
/* Few fops use the xdr size to get the vector sizes */
91
*fr = get_frame_from_request(req);
93
/* something wrong, mostly no memory */
94
SERVER_REQ_SET_ERROR(req, ret);
97
(*fr)->root->op = fop;
99
*st = CALL_STATE((*fr));
100
if (!(*fr)->root->client->bound_xl) {
101
/* auth failure, mostly setvolume is not successful */
102
SERVER_REQ_SET_ERROR(req, ret);
106
if (!(*fr)->root->client->bound_xl->itable) {
107
/* inode_table is not allocated successful in server_setvolume */
108
SERVER_REQ_SET_ERROR(req, ret);
118
/* Callback function section */
120
server4_statfs_cbk(call_frame_t *frame, void *cookie, xlator_t *this,
121
int32_t op_ret, int32_t op_errno, struct statvfs *buf,
124
gfx_statfs_rsp rsp = {
127
rpcsvc_request_t *req = NULL;
129
dict_to_xdr(xdata, &rsp.xdata);
132
gf_smsg(this->name, GF_LOG_WARNING, op_errno, PS_MSG_STATFS,
133
"frame=%" PRId64, frame->root->unique, "client=%s",
134
STACK_CLIENT_NAME(frame->root), "error-xlator=%s",
135
STACK_ERR_XL_NAME(frame->root), NULL);
139
server4_post_statfs(&rsp, buf);
143
rsp.op_errno = gf_errno_to_error(op_errno);
146
server_submit_reply(frame, req, &rsp, NULL, 0, NULL,
147
(xdrproc_t)xdr_gfx_statfs_rsp);
149
GF_FREE(rsp.xdata.pairs.pairs_val);
155
server4_lookup_cbk(call_frame_t *frame, void *cookie, xlator_t *this,
156
int32_t op_ret, int32_t op_errno, inode_t *inode,
157
struct iatt *stbuf, dict_t *xdata, struct iatt *postparent)
159
rpcsvc_request_t *req = NULL;
160
server_state_t *state = NULL;
164
gfx_common_2iatt_rsp rsp = {
168
state = CALL_STATE(frame);
170
if (state->is_revalidate == 1 && op_ret == -1) {
171
state->is_revalidate = 2;
172
loc_copy(&fresh_loc, &state->loc);
173
inode_unref(fresh_loc.inode);
174
fresh_loc.inode = server_inode_new(state->itable, fresh_loc.gfid);
176
STACK_WIND(frame, server4_lookup_cbk, frame->root->client->bound_xl,
177
frame->root->client->bound_xl->fops->lookup, &fresh_loc,
180
loc_wipe(&fresh_loc);
184
gfx_stat_from_iattx(&rsp.poststat, postparent);
186
dict_to_xdr(xdata, &rsp.xdata);
189
if (state->is_revalidate && op_errno == ENOENT) {
190
if (!__is_root_gfid(state->resolve.gfid)) {
191
inode_unlink(state->loc.inode, state->loc.parent,
194
* If the entry is not present, then just
195
* unlinking the associated dentry is not
196
* suffecient. This condition should be
197
* treated as unlink of the entry. So along
198
* with deleting the entry, its also important
199
* to forget the inode for it (if the dentry
200
* being considered was the last dentry).
201
* Otherwise it might lead to inode leak.
202
* It also might lead to wrong decisions being
203
* taken if the future lookups on this inode are
204
* successful since they are able to find the
205
* inode in the inode table (at least gfid based
206
* lookups will be successful, if the lookup
209
forget_inode_if_no_dentry(state->loc.inode);
215
server4_post_lookup(&rsp, frame, state, inode, stbuf, xdata);
218
rsp.op_errno = gf_errno_to_error(op_errno);
221
if (state->resolve.bname) {
222
gf_smsg(this->name, fop_log_level(GF_FOP_LOOKUP, op_errno),
223
op_errno, PS_MSG_LOOKUP_INFO, "frame=%" PRId64,
224
frame->root->unique, "path=%s", state->loc.path,
225
"uuid_utoa=%s", uuid_utoa(state->resolve.pargfid),
226
"bname=%s", state->resolve.bname, "client=%s",
227
STACK_CLIENT_NAME(frame->root), "error-xlator=%s",
228
STACK_ERR_XL_NAME(frame->root), NULL);
230
gf_smsg(this->name, fop_log_level(GF_FOP_LOOKUP, op_errno),
231
op_errno, PS_MSG_LOOKUP_INFO, "frame=%" PRId64,
232
frame->root->unique, "path=%s", state->loc.path,
233
"uuid_utoa=%s", uuid_utoa(state->resolve.gfid), "client=%s",
234
STACK_CLIENT_NAME(frame->root), "error-xlator=%s",
235
STACK_ERR_XL_NAME(frame->root), NULL);
240
server_submit_reply(frame, req, &rsp, NULL, 0, NULL,
241
(xdrproc_t)xdr_gfx_common_2iatt_rsp);
243
GF_FREE(rsp.xdata.pairs.pairs_val);
249
server4_lease_cbk(call_frame_t *frame, void *cookie, xlator_t *this,
250
int32_t op_ret, int32_t op_errno, struct gf_lease *lease,
253
gfx_lease_rsp rsp = {
256
rpcsvc_request_t *req = NULL;
257
server_state_t *state = NULL;
259
dict_to_xdr(xdata, &rsp.xdata);
262
state = CALL_STATE(frame);
263
gf_smsg(this->name, fop_log_level(GF_FOP_LEASE, op_errno), op_errno,
264
PS_MSG_LK_INFO, "frame=%" PRId64, frame->root->unique,
265
"path=%s", state->loc.path, "uuid_utoa=%s",
266
uuid_utoa(state->resolve.gfid), "client=%s",
267
STACK_CLIENT_NAME(frame->root), "error-xlator=%s",
268
STACK_ERR_XL_NAME(frame->root), NULL);
270
server4_post_lease(&rsp, lease);
273
rsp.op_errno = gf_errno_to_error(op_errno);
276
server_submit_reply(frame, req, &rsp, NULL, 0, NULL,
277
(xdrproc_t)xdr_gfx_lease_rsp);
279
GF_FREE(rsp.xdata.pairs.pairs_val);
285
server4_lk_cbk(call_frame_t *frame, void *cookie, xlator_t *this,
286
int32_t op_ret, int32_t op_errno, struct gf_flock *lock,
292
rpcsvc_request_t *req = NULL;
293
server_state_t *state = NULL;
295
dict_to_xdr(xdata, &rsp.xdata);
298
state = CALL_STATE(frame);
299
gf_smsg(this->name, fop_log_level(GF_FOP_LK, op_errno), op_errno,
300
PS_MSG_LK_INFO, "frame=%" PRId64, frame->root->unique,
301
"fd_no=%" PRId64, state->resolve.fd_no, "uuid_utoa=%s",
302
uuid_utoa(state->resolve.gfid), "client=%s",
303
STACK_CLIENT_NAME(frame->root), "error-xlator=%s",
304
STACK_ERR_XL_NAME(frame->root), NULL);
308
server4_post_lk(this, &rsp, lock);
311
rsp.op_errno = gf_errno_to_error(op_errno);
314
server_submit_reply(frame, req, &rsp, NULL, 0, NULL,
315
(xdrproc_t)xdr_gfx_lk_rsp);
317
GF_FREE(rsp.xdata.pairs.pairs_val);
323
server4_inodelk_cbk(call_frame_t *frame, void *cookie, xlator_t *this,
324
int32_t op_ret, int32_t op_errno, dict_t *xdata)
326
gfx_common_rsp rsp = {
329
server_state_t *state = NULL;
330
rpcsvc_request_t *req = NULL;
332
dict_to_xdr(xdata, &rsp.xdata);
334
state = CALL_STATE(frame);
337
gf_smsg(this->name, fop_log_level(GF_FOP_INODELK, op_errno), op_errno,
338
PS_MSG_INODELK_INFO, "frame=%" PRId64, frame->root->unique,
339
"path=%s", state->loc.path, "uuuid_utoa=%s",
340
uuid_utoa(state->resolve.gfid), "client=%s",
341
STACK_CLIENT_NAME(frame->root), "error-xlator=%s",
342
STACK_ERR_XL_NAME(frame->root), NULL);
348
rsp.op_errno = gf_errno_to_error(op_errno);
351
server_submit_reply(frame, req, &rsp, NULL, 0, NULL,
352
(xdrproc_t)xdr_gfx_common_rsp);
354
GF_FREE(rsp.xdata.pairs.pairs_val);
360
server4_finodelk_cbk(call_frame_t *frame, void *cookie, xlator_t *this,
361
int32_t op_ret, int32_t op_errno, dict_t *xdata)
363
gfx_common_rsp rsp = {
366
server_state_t *state = NULL;
367
rpcsvc_request_t *req = NULL;
369
dict_to_xdr(xdata, &rsp.xdata);
371
state = CALL_STATE(frame);
374
gf_smsg(this->name, fop_log_level(GF_FOP_FINODELK, op_errno), op_errno,
375
PS_MSG_INODELK_INFO, "frame=%" PRId64, frame->root->unique,
376
"FINODELK_fd_no=%" PRId64, state->resolve.fd_no, "uuid_utoa=%s",
377
uuid_utoa(state->resolve.gfid), "client=%s",
378
STACK_CLIENT_NAME(frame->root), "error-xlator=%s",
379
STACK_ERR_XL_NAME(frame->root), NULL);
385
rsp.op_errno = gf_errno_to_error(op_errno);
388
server_submit_reply(frame, req, &rsp, NULL, 0, NULL,
389
(xdrproc_t)xdr_gfx_common_rsp);
391
GF_FREE(rsp.xdata.pairs.pairs_val);
397
server4_entrylk_cbk(call_frame_t *frame, void *cookie, xlator_t *this,
398
int32_t op_ret, int32_t op_errno, dict_t *xdata)
400
gfx_common_rsp rsp = {
403
server_state_t *state = NULL;
404
rpcsvc_request_t *req = NULL;
406
dict_to_xdr(xdata, &rsp.xdata);
408
state = CALL_STATE(frame);
411
gf_smsg(this->name, fop_log_level(GF_FOP_ENTRYLK, op_errno), op_errno,
412
PS_MSG_ENTRYLK_INFO, "frame=%" PRId64, frame->root->unique,
413
"path=%s", state->loc.path, "uuid_utoa=%s",
414
uuid_utoa(state->resolve.gfid), "client=%s",
415
STACK_CLIENT_NAME(frame->root), "error-xlator=%s",
416
STACK_ERR_XL_NAME(frame->root), NULL);
422
rsp.op_errno = gf_errno_to_error(op_errno);
425
server_submit_reply(frame, req, &rsp, NULL, 0, NULL,
426
(xdrproc_t)xdr_gfx_common_rsp);
428
GF_FREE(rsp.xdata.pairs.pairs_val);
434
server4_fentrylk_cbk(call_frame_t *frame, void *cookie, xlator_t *this,
435
int32_t op_ret, int32_t op_errno, dict_t *xdata)
437
gfx_common_rsp rsp = {
440
server_state_t *state = NULL;
441
rpcsvc_request_t *req = NULL;
443
dict_to_xdr(xdata, &rsp.xdata);
445
state = CALL_STATE(frame);
448
gf_smsg(this->name, fop_log_level(GF_FOP_FENTRYLK, op_errno), op_errno,
449
PS_MSG_ENTRYLK_INFO, "frame=%" PRId64, frame->root->unique,
450
"FENTRYLK_fd_no=%" PRId64, state->resolve.fd_no, "uuid_utoa=%s",
451
uuid_utoa(state->resolve.gfid), "client=%s",
452
STACK_CLIENT_NAME(frame->root), "error-xlator: %s",
453
STACK_ERR_XL_NAME(frame->root), NULL);
459
rsp.op_errno = gf_errno_to_error(op_errno);
462
server_submit_reply(frame, req, &rsp, NULL, 0, NULL,
463
(xdrproc_t)xdr_gfx_common_rsp);
465
GF_FREE(rsp.xdata.pairs.pairs_val);
471
server4_access_cbk(call_frame_t *frame, void *cookie, xlator_t *this,
472
int32_t op_ret, int32_t op_errno, dict_t *xdata)
474
gfx_common_rsp rsp = {
477
rpcsvc_request_t *req = NULL;
478
server_state_t *state = NULL;
480
dict_to_xdr(xdata, &rsp.xdata);
483
state = CALL_STATE(frame);
484
gf_smsg(this->name, GF_LOG_INFO, op_errno, PS_MSG_ACCESS_INFO,
485
"frame=%" PRId64, frame->root->unique, "path=%s",
486
(state->loc.path) ? state->loc.path : "", "uuid_utoa=%s",
487
uuid_utoa(state->resolve.gfid), "client=%s",
488
STACK_CLIENT_NAME(frame->root), "error-xlator=%s",
489
STACK_ERR_XL_NAME(frame->root), NULL);
495
rsp.op_errno = gf_errno_to_error(op_errno);
498
server_submit_reply(frame, req, &rsp, NULL, 0, NULL,
499
(xdrproc_t)xdr_gfx_common_rsp);
501
GF_FREE(rsp.xdata.pairs.pairs_val);
507
server4_rmdir_cbk(call_frame_t *frame, void *cookie, xlator_t *this,
508
int32_t op_ret, int32_t op_errno, struct iatt *preparent,
509
struct iatt *postparent, dict_t *xdata)
511
gfx_common_2iatt_rsp rsp = {
514
server_state_t *state = NULL;
515
rpcsvc_request_t *req = NULL;
517
dict_to_xdr(xdata, &rsp.xdata);
519
state = CALL_STATE(frame);
522
gf_smsg(this->name, GF_LOG_INFO, op_errno, PS_MSG_DIR_INFO,
523
"frame=%" PRId64, frame->root->unique, "RMDIR_pat=%s",
524
(state->loc.path) ? state->loc.path : "", "uuid_utoa=%s",
525
uuid_utoa(state->resolve.pargfid), "bname=%s",
526
state->resolve.bname, "client=%s",
527
STACK_CLIENT_NAME(frame->root), "error-xlator=%s",
528
STACK_ERR_XL_NAME(frame->root), NULL);
532
server4_post_entry_remove(state, &rsp, preparent, postparent);
536
rsp.op_errno = gf_errno_to_error(op_errno);
539
server_submit_reply(frame, req, &rsp, NULL, 0, NULL,
540
(xdrproc_t)xdr_gfx_common_2iatt_rsp);
542
GF_FREE(rsp.xdata.pairs.pairs_val);
548
server4_mkdir_cbk(call_frame_t *frame, void *cookie, xlator_t *this,
549
int32_t op_ret, int32_t op_errno, inode_t *inode,
550
struct iatt *stbuf, struct iatt *preparent,
551
struct iatt *postparent, dict_t *xdata)
553
gfx_common_3iatt_rsp rsp = {
556
server_state_t *state = NULL;
557
rpcsvc_request_t *req = NULL;
559
dict_to_xdr(xdata, &rsp.xdata);
561
state = CALL_STATE(frame);
564
gf_smsg(this->name, fop_log_level(GF_FOP_MKDIR, op_errno), op_errno,
565
PS_MSG_DIR_INFO, "frame=%" PRId64, frame->root->unique,
566
"MKDIR_path=%s", (state->loc.path) ? state->loc.path : "",
567
"uuid_utoa=%s", uuid_utoa(state->resolve.pargfid), "bname=%s",
568
state->resolve.bname, "client=%s",
569
STACK_CLIENT_NAME(frame->root), "error-xlator=%s",
570
STACK_ERR_XL_NAME(frame->root), NULL);
574
server4_post_common_3iatt(state, &rsp, inode, stbuf, preparent, postparent);
577
rsp.op_errno = gf_errno_to_error(op_errno);
580
server_submit_reply(frame, req, &rsp, NULL, 0, NULL,
581
(xdrproc_t)xdr_gfx_common_3iatt_rsp);
583
GF_FREE(rsp.xdata.pairs.pairs_val);
589
server4_mknod_cbk(call_frame_t *frame, void *cookie, xlator_t *this,
590
int32_t op_ret, int32_t op_errno, inode_t *inode,
591
struct iatt *stbuf, struct iatt *preparent,
592
struct iatt *postparent, dict_t *xdata)
594
gfx_common_3iatt_rsp rsp = {
597
server_state_t *state = NULL;
598
rpcsvc_request_t *req = NULL;
600
dict_to_xdr(xdata, &rsp.xdata);
602
state = CALL_STATE(frame);
605
gf_smsg(this->name, fop_log_level(GF_FOP_MKNOD, op_errno), op_errno,
606
PS_MSG_MKNOD_INFO, "frame=%" PRId64, frame->root->unique,
607
"path=%s", state->loc.path, "uuid_utoa=%s",
608
uuid_utoa(state->resolve.pargfid), "bname=%s",
609
state->resolve.bname, "client=%s",
610
STACK_CLIENT_NAME(frame->root), "error-xlator=%s",
611
STACK_ERR_XL_NAME(frame->root), NULL);
615
server4_post_common_3iatt(state, &rsp, inode, stbuf, preparent, postparent);
618
rsp.op_errno = gf_errno_to_error(op_errno);
621
server_submit_reply(frame, req, &rsp, NULL, 0, NULL,
622
(xdrproc_t)xdr_gfx_common_3iatt_rsp);
624
GF_FREE(rsp.xdata.pairs.pairs_val);
630
server4_fsyncdir_cbk(call_frame_t *frame, void *cookie, xlator_t *this,
631
int32_t op_ret, int32_t op_errno, dict_t *xdata)
633
gfx_common_rsp rsp = {
636
server_state_t *state = NULL;
637
rpcsvc_request_t *req = NULL;
639
dict_to_xdr(xdata, &rsp.xdata);
642
state = CALL_STATE(frame);
643
gf_smsg(this->name, fop_log_level(GF_FOP_FSYNCDIR, op_errno), op_errno,
644
PS_MSG_DIR_INFO, "frame=%" PRId64, frame->root->unique,
645
"FSYNCDIR_fd_no=%" PRId64, state->resolve.fd_no, "uuid_utoa=%s",
646
uuid_utoa(state->resolve.gfid), "client=%s",
647
STACK_CLIENT_NAME(frame->root), "error-xlator=%s",
648
STACK_ERR_XL_NAME(frame->root), NULL);
654
rsp.op_errno = gf_errno_to_error(op_errno);
657
server_submit_reply(frame, req, &rsp, NULL, 0, NULL,
658
(xdrproc_t)xdr_gfx_common_rsp);
660
GF_FREE(rsp.xdata.pairs.pairs_val);
666
server4_readdir_cbk(call_frame_t *frame, void *cookie, xlator_t *this,
667
int32_t op_ret, int32_t op_errno, gf_dirent_t *entries,
670
gfx_readdir_rsp rsp = {
673
server_state_t *state = NULL;
674
rpcsvc_request_t *req = NULL;
677
dict_to_xdr(xdata, &rsp.xdata);
680
state = CALL_STATE(frame);
681
gf_smsg(this->name, fop_log_level(GF_FOP_READDIR, op_errno), op_errno,
682
PS_MSG_DIR_INFO, "frame=%" PRId64, frame->root->unique,
683
"READDIR_fd_no=%" PRId64, state->resolve.fd_no, "uuid_utoa=%s",
684
uuid_utoa(state->resolve.gfid), "client=%s",
685
STACK_CLIENT_NAME(frame->root), "error-xlator=%s",
686
STACK_ERR_XL_NAME(frame->root), NULL);
690
/* (op_ret == 0) is valid, and means EOF */
692
ret = server4_post_readdir(&rsp, entries);
702
rsp.op_errno = gf_errno_to_error(op_errno);
705
server_submit_reply(frame, req, &rsp, NULL, 0, NULL,
706
(xdrproc_t)xdr_gfx_readdir_rsp_custom);
708
GF_FREE(rsp.xdata.pairs.pairs_val);
710
readdir_rsp_cleanup_v2(&rsp);
716
server4_opendir_cbk(call_frame_t *frame, void *cookie, xlator_t *this,
717
int32_t op_ret, int32_t op_errno, fd_t *fd, dict_t *xdata)
719
server_state_t *state = NULL;
720
rpcsvc_request_t *req = NULL;
726
dict_to_xdr(xdata, &rsp.xdata);
729
state = CALL_STATE(frame);
730
gf_smsg(this->name, fop_log_level(GF_FOP_OPENDIR, op_errno), op_errno,
731
PS_MSG_DIR_INFO, "frame=%" PRId64, frame->root->unique,
732
"OPENDIR_path=%s", (state->loc.path) ? state->loc.path : "",
733
"uuid_utoa=%s", uuid_utoa(state->resolve.gfid), "client=%s",
734
STACK_CLIENT_NAME(frame->root), "error-xlator=%s",
735
STACK_ERR_XL_NAME(frame->root), NULL);
739
op_ret = server4_post_open(frame, this, &rsp, fd);
746
rsp.op_errno = gf_errno_to_error(op_errno);
749
server_submit_reply(frame, req, &rsp, NULL, 0, NULL,
750
(xdrproc_t)xdr_gfx_open_rsp);
752
GF_FREE(rsp.xdata.pairs.pairs_val);
758
server4_removexattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,
759
int32_t op_ret, int32_t op_errno, dict_t *xdata)
761
gfx_common_rsp rsp = {
764
rpcsvc_request_t *req = NULL;
765
server_state_t *state = NULL;
766
gf_loglevel_t loglevel = GF_LOG_NONE;
768
dict_to_xdr(xdata, &rsp.xdata);
771
state = CALL_STATE(frame);
772
if (ENODATA == op_errno || ENOATTR == op_errno)
773
loglevel = GF_LOG_DEBUG;
775
loglevel = GF_LOG_INFO;
777
gf_smsg(this->name, loglevel, op_errno, PS_MSG_REMOVEXATTR_INFO,
778
"frame=%" PRId64, frame->root->unique, "path=%s",
779
state->loc.path, "uuid_utoa=%s", uuid_utoa(state->resolve.gfid),
780
"name=%s", state->name, "client=%s",
781
STACK_CLIENT_NAME(frame->root), "error-xlator=%s",
782
STACK_ERR_XL_NAME(frame->root), NULL);
788
rsp.op_errno = gf_errno_to_error(op_errno);
791
server_submit_reply(frame, req, &rsp, NULL, 0, NULL,
792
(xdrproc_t)xdr_gfx_common_rsp);
794
GF_FREE(rsp.xdata.pairs.pairs_val);
800
server4_fremovexattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,
801
int32_t op_ret, int32_t op_errno, dict_t *xdata)
803
gfx_common_rsp rsp = {
806
rpcsvc_request_t *req = NULL;
807
server_state_t *state = NULL;
809
dict_to_xdr(xdata, &rsp.xdata);
812
state = CALL_STATE(frame);
813
gf_smsg(this->name, fop_log_level(GF_FOP_FREMOVEXATTR, op_errno),
814
op_errno, PS_MSG_REMOVEXATTR_INFO, "frame=%" PRId64,
815
frame->root->unique, "FREMOVEXATTR_fd_no%" PRId64,
816
state->resolve.fd_no, "uuid_utoa=%s",
817
uuid_utoa(state->resolve.gfid), "name=%s", state->name,
818
"client=%s", STACK_CLIENT_NAME(frame->root), "error-xlator: %s",
819
STACK_ERR_XL_NAME(frame->root), NULL);
825
rsp.op_errno = gf_errno_to_error(op_errno);
828
server_submit_reply(frame, req, &rsp, NULL, 0, NULL,
829
(xdrproc_t)xdr_gfx_common_rsp);
831
GF_FREE(rsp.xdata.pairs.pairs_val);
837
server4_getxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,
838
int32_t op_ret, int32_t op_errno, dict_t *dict,
841
gfx_common_dict_rsp rsp = {
844
rpcsvc_request_t *req = NULL;
845
server_state_t *state = NULL;
847
dict_to_xdr(xdata, &rsp.xdata);
850
state = CALL_STATE(frame);
851
gf_smsg(this->name, fop_log_level(GF_FOP_GETXATTR, op_errno), op_errno,
852
PS_MSG_GETXATTR_INFO, "frame=%" PRId64, frame->root->unique,
853
"path=%s", state->loc.path, "uuid_utoa=%s",
854
uuid_utoa(state->resolve.gfid), "name=%s", state->name,
855
"client=%s", STACK_CLIENT_NAME(frame->root), "error-xlator=%s",
856
STACK_ERR_XL_NAME(frame->root), NULL);
860
dict_to_xdr(dict, &rsp.dict);
863
rsp.op_errno = gf_errno_to_error(op_errno);
866
server_submit_reply(frame, req, &rsp, NULL, 0, NULL,
867
(xdrproc_t)xdr_gfx_common_dict_rsp);
869
GF_FREE(rsp.dict.pairs.pairs_val);
871
GF_FREE(rsp.xdata.pairs.pairs_val);
877
server4_fgetxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,
878
int32_t op_ret, int32_t op_errno, dict_t *dict,
881
gfx_common_dict_rsp rsp = {
884
server_state_t *state = NULL;
885
rpcsvc_request_t *req = NULL;
887
dict_to_xdr(xdata, &rsp.xdata);
890
state = CALL_STATE(frame);
891
gf_smsg(this->name, fop_log_level(GF_FOP_FGETXATTR, op_errno), op_errno,
892
PS_MSG_GETXATTR_INFO, "frame=%" PRId64, frame->root->unique,
893
"FGETXATTR_fd_no=%" PRId64, state->resolve.fd_no,
894
"uuid_utoa=%s", uuid_utoa(state->resolve.gfid), "name=%s",
895
state->name, "client=%s", STACK_CLIENT_NAME(frame->root),
896
"error-xlator=%s", STACK_ERR_XL_NAME(frame->root), NULL);
900
dict_to_xdr(dict, &rsp.dict);
903
rsp.op_errno = gf_errno_to_error(op_errno);
906
server_submit_reply(frame, req, &rsp, NULL, 0, NULL,
907
(xdrproc_t)xdr_gfx_common_dict_rsp);
909
GF_FREE(rsp.dict.pairs.pairs_val);
911
GF_FREE(rsp.xdata.pairs.pairs_val);
917
server4_setxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,
918
int32_t op_ret, int32_t op_errno, dict_t *xdata)
920
gfx_common_rsp rsp = {
923
rpcsvc_request_t *req = NULL;
924
server_state_t *state = NULL;
926
dict_to_xdr(xdata, &rsp.xdata);
928
state = CALL_STATE(frame);
931
if (op_errno != ENOTSUP)
932
dict_foreach(state->dict, _gf_server_log_setxattr_failure, frame);
934
if (op_errno == ENOTSUP) {
935
gf_msg_debug(THIS->name, op_errno, "Failed");
937
gf_smsg(THIS->name, GF_LOG_INFO, op_errno, PS_MSG_SETXATTR_INFO,
938
"client=%s", STACK_CLIENT_NAME(frame->root),
939
"error-xlator=%s", STACK_ERR_XL_NAME(frame->root), NULL);
944
if (dict_get_sizen(state->dict, GF_NAMESPACE_KEY)) {
945
/* This inode onwards we will set namespace */
946
gf_msg(THIS->name, GF_LOG_DEBUG, 0, PS_MSG_SETXATTR_INFO,
947
"client=%s, path=%s", STACK_CLIENT_NAME(frame->root),
949
inode_set_namespace_inode(state->loc.inode, state->loc.inode);
954
rsp.op_errno = gf_errno_to_error(op_errno);
957
server_submit_reply(frame, req, &rsp, NULL, 0, NULL,
958
(xdrproc_t)xdr_gfx_common_rsp);
960
GF_FREE(rsp.xdata.pairs.pairs_val);
966
server4_fsetxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,
967
int32_t op_ret, int32_t op_errno, dict_t *xdata)
969
gfx_common_rsp rsp = {
972
rpcsvc_request_t *req = NULL;
973
server_state_t *state = NULL;
975
dict_to_xdr(xdata, &rsp.xdata);
978
state = CALL_STATE(frame);
979
if (op_errno != ENOTSUP) {
980
dict_foreach(state->dict, _gf_server_log_setxattr_failure, frame);
982
if (op_errno == ENOTSUP) {
983
gf_msg_debug(THIS->name, op_errno, "Failed");
985
gf_smsg(THIS->name, GF_LOG_INFO, op_errno, PS_MSG_SETXATTR_INFO,
986
"client=%s", STACK_CLIENT_NAME(frame->root),
987
"error-xlator=%s", STACK_ERR_XL_NAME(frame->root), NULL);
994
rsp.op_errno = gf_errno_to_error(op_errno);
997
server_submit_reply(frame, req, &rsp, NULL, 0, NULL,
998
(xdrproc_t)xdr_gfx_common_rsp);
1000
GF_FREE(rsp.xdata.pairs.pairs_val);
1006
server4_rename_cbk(call_frame_t *frame, void *cookie, xlator_t *this,
1007
int32_t op_ret, int32_t op_errno, struct iatt *stbuf,
1008
struct iatt *preoldparent, struct iatt *postoldparent,
1009
struct iatt *prenewparent, struct iatt *postnewparent,
1012
gfx_rename_rsp rsp = {
1015
server_state_t *state = NULL;
1016
rpcsvc_request_t *req = NULL;
1017
char oldpar_str[50] = {
1020
char newpar_str[50] = {
1024
dict_to_xdr(xdata, &rsp.xdata);
1026
state = CALL_STATE(frame);
1029
uuid_utoa_r(state->resolve.pargfid, oldpar_str);
1030
uuid_utoa_r(state->resolve2.pargfid, newpar_str);
1031
gf_smsg(this->name, GF_LOG_INFO, op_errno, PS_MSG_RENAME_INFO,
1032
"frame=%" PRId64, frame->root->unique, "loc.path=%s",
1033
state->loc.path, "oldpar_str=%s", oldpar_str, "resolve-name=%s",
1034
state->resolve.bname, "loc2.path=%s", state->loc2.path,
1035
"newpar_str=%s", newpar_str, "resolve2=%s",
1036
state->resolve2.bname, "client=%s",
1037
STACK_CLIENT_NAME(frame->root), "error-xlator=%s",
1038
STACK_ERR_XL_NAME(frame->root), NULL);
1042
server4_post_rename(frame, state, &rsp, stbuf, preoldparent, postoldparent,
1043
prenewparent, postnewparent);
1045
rsp.op_ret = op_ret;
1046
rsp.op_errno = gf_errno_to_error(op_errno);
1049
server_submit_reply(frame, req, &rsp, NULL, 0, NULL,
1050
(xdrproc_t)xdr_gfx_rename_rsp);
1052
GF_FREE(rsp.xdata.pairs.pairs_val);
1058
server4_unlink_cbk(call_frame_t *frame, void *cookie, xlator_t *this,
1059
int32_t op_ret, int32_t op_errno, struct iatt *preparent,
1060
struct iatt *postparent, dict_t *xdata)
1062
gfx_common_2iatt_rsp rsp = {
1065
server_state_t *state = NULL;
1066
rpcsvc_request_t *req = NULL;
1068
dict_to_xdr(xdata, &rsp.xdata);
1070
state = CALL_STATE(frame);
1073
gf_smsg(this->name, fop_log_level(GF_FOP_UNLINK, op_errno), op_errno,
1074
PS_MSG_LINK_INFO, "frame=%" PRId64, frame->root->unique,
1075
"UNLINK_path=%s", state->loc.path, "uuid_utoa=%s",
1076
uuid_utoa(state->resolve.pargfid), "bname=%s",
1077
state->resolve.bname, "client=%s",
1078
STACK_CLIENT_NAME(frame->root), "error-xlator: %s",
1079
STACK_ERR_XL_NAME(frame->root), NULL);
1083
/* TODO: log gfid of the inodes */
1084
gf_msg_trace(frame->root->client->bound_xl->name, 0,
1088
frame->root->unique, state->loc.name);
1090
server4_post_entry_remove(state, &rsp, preparent, postparent);
1093
rsp.op_ret = op_ret;
1094
rsp.op_errno = gf_errno_to_error(op_errno);
1097
server_submit_reply(frame, req, &rsp, NULL, 0, NULL,
1098
(xdrproc_t)xdr_gfx_common_2iatt_rsp);
1100
GF_FREE(rsp.xdata.pairs.pairs_val);
1106
server4_symlink_cbk(call_frame_t *frame, void *cookie, xlator_t *this,
1107
int32_t op_ret, int32_t op_errno, inode_t *inode,
1108
struct iatt *stbuf, struct iatt *preparent,
1109
struct iatt *postparent, dict_t *xdata)
1111
gfx_common_3iatt_rsp rsp = {
1114
server_state_t *state = NULL;
1115
rpcsvc_request_t *req = NULL;
1117
dict_to_xdr(xdata, &rsp.xdata);
1119
state = CALL_STATE(frame);
1122
gf_smsg(this->name, GF_LOG_INFO, op_errno, PS_MSG_LINK_INFO,
1123
"frame=%" PRId64, frame->root->unique, "SYMLINK_path= %s",
1124
(state->loc.path) ? state->loc.path : "", "uuid_utoa=%s",
1125
uuid_utoa(state->resolve.pargfid), "bname=%s",
1126
state->resolve.bname, "client=%s",
1127
STACK_CLIENT_NAME(frame->root), "error-xlator=%s",
1128
STACK_ERR_XL_NAME(frame->root), NULL);
1132
server4_post_common_3iatt(state, &rsp, inode, stbuf, preparent, postparent);
1135
rsp.op_ret = op_ret;
1136
rsp.op_errno = gf_errno_to_error(op_errno);
1139
server_submit_reply(frame, req, &rsp, NULL, 0, NULL,
1140
(xdrproc_t)xdr_gfx_common_3iatt_rsp);
1142
GF_FREE(rsp.xdata.pairs.pairs_val);
1148
server4_link_cbk(call_frame_t *frame, void *cookie, xlator_t *this,
1149
int32_t op_ret, int32_t op_errno, inode_t *inode,
1150
struct iatt *stbuf, struct iatt *preparent,
1151
struct iatt *postparent, dict_t *xdata)
1153
gfx_common_3iatt_rsp rsp = {
1156
server_state_t *state = NULL;
1157
rpcsvc_request_t *req = NULL;
1158
char gfid_str[50] = {
1161
char newpar_str[50] = {
1165
dict_to_xdr(xdata, &rsp.xdata);
1167
state = CALL_STATE(frame);
1170
uuid_utoa_r(state->resolve.gfid, gfid_str);
1171
uuid_utoa_r(state->resolve2.pargfid, newpar_str);
1173
gf_smsg(this->name, GF_LOG_INFO, op_errno, PS_MSG_LINK_INFO,
1174
"frame=%" PRId64, frame->root->unique, "LINK_path=%s",
1175
state->loc.path, "gfid_str=%s", gfid_str, "newpar_str=%s",
1176
newpar_str, "resolve2.bname=%s", state->resolve2.bname,
1177
"client=%s", STACK_CLIENT_NAME(frame->root), "error-xlator=%s",
1178
STACK_ERR_XL_NAME(frame->root), NULL);
1182
server4_post_link(state, &rsp, inode, stbuf, preparent, postparent);
1185
rsp.op_ret = op_ret;
1186
rsp.op_errno = gf_errno_to_error(op_errno);
1189
server_submit_reply(frame, req, &rsp, NULL, 0, NULL,
1190
(xdrproc_t)xdr_gfx_common_3iatt_rsp);
1192
GF_FREE(rsp.xdata.pairs.pairs_val);
1198
server4_truncate_cbk(call_frame_t *frame, void *cookie, xlator_t *this,
1199
int32_t op_ret, int32_t op_errno, struct iatt *prebuf,
1200
struct iatt *postbuf, dict_t *xdata)
1202
gfx_common_2iatt_rsp rsp = {
1205
server_state_t *state = NULL;
1206
rpcsvc_request_t *req = NULL;
1208
dict_to_xdr(xdata, &rsp.xdata);
1211
state = CALL_STATE(frame);
1212
gf_smsg(this->name, GF_LOG_INFO, op_errno, PS_MSG_TRUNCATE_INFO,
1213
"frame=%" PRId64, frame->root->unique, "TRUNCATE_path=%s",
1214
state->loc.path, "uuid_utoa=%s", uuid_utoa(state->resolve.gfid),
1215
"client=%s", STACK_CLIENT_NAME(frame->root), "error-xlator=%s",
1216
STACK_ERR_XL_NAME(frame->root), NULL);
1220
server4_post_common_2iatt(&rsp, prebuf, postbuf);
1223
rsp.op_ret = op_ret;
1224
rsp.op_errno = gf_errno_to_error(op_errno);
1227
server_submit_reply(frame, req, &rsp, NULL, 0, NULL,
1228
(xdrproc_t)xdr_gfx_common_2iatt_rsp);
1230
GF_FREE(rsp.xdata.pairs.pairs_val);
1236
server4_fstat_cbk(call_frame_t *frame, void *cookie, xlator_t *this,
1237
int32_t op_ret, int32_t op_errno, struct iatt *stbuf,
1240
gfx_common_iatt_rsp rsp = {
1243
server_state_t *state = NULL;
1244
rpcsvc_request_t *req = NULL;
1246
dict_to_xdr(xdata, &rsp.xdata);
1248
state = CALL_STATE(frame);
1250
gf_smsg(this->name, fop_log_level(GF_FOP_FSTAT, op_errno), op_errno,
1251
PS_MSG_STAT_INFO, "frame=%" PRId64, frame->root->unique,
1252
"FSTAT_fd_no=%" PRId64, state->resolve.fd_no, "uuid_utoa=%s",
1253
uuid_utoa(state->resolve.gfid), "client=%s",
1254
STACK_CLIENT_NAME(frame->root), "error-xlator=%s",
1255
STACK_ERR_XL_NAME(frame->root), NULL);
1259
server4_post_common_iatt(state, &rsp, stbuf);
1262
rsp.op_ret = op_ret;
1263
rsp.op_errno = gf_errno_to_error(op_errno);
1266
server_submit_reply(frame, req, &rsp, NULL, 0, NULL,
1267
(xdrproc_t)xdr_gfx_common_iatt_rsp);
1269
GF_FREE(rsp.xdata.pairs.pairs_val);
1275
server4_ftruncate_cbk(call_frame_t *frame, void *cookie, xlator_t *this,
1276
int32_t op_ret, int32_t op_errno, struct iatt *prebuf,
1277
struct iatt *postbuf, dict_t *xdata)
1279
gfx_common_2iatt_rsp rsp = {0};
1280
server_state_t *state = NULL;
1281
rpcsvc_request_t *req = NULL;
1283
dict_to_xdr(xdata, &rsp.xdata);
1286
state = CALL_STATE(frame);
1287
gf_smsg(this->name, fop_log_level(GF_FOP_FTRUNCATE, op_errno), op_errno,
1288
PS_MSG_TRUNCATE_INFO, "frame=%" PRId64, frame->root->unique,
1289
"FTRUNCATE_fd_no=%" PRId64, state->resolve.fd_no,
1290
"uuid_utoa=%s", uuid_utoa(state->resolve.gfid), "client=%s",
1291
STACK_CLIENT_NAME(frame->root), "error-xlator=%s",
1292
STACK_ERR_XL_NAME(frame->root), NULL);
1296
server4_post_common_2iatt(&rsp, prebuf, postbuf);
1299
rsp.op_ret = op_ret;
1300
rsp.op_errno = gf_errno_to_error(op_errno);
1303
server_submit_reply(frame, req, &rsp, NULL, 0, NULL,
1304
(xdrproc_t)xdr_gfx_common_2iatt_rsp);
1306
GF_FREE(rsp.xdata.pairs.pairs_val);
1312
server4_flush_cbk(call_frame_t *frame, void *cookie, xlator_t *this,
1313
int32_t op_ret, int32_t op_errno, dict_t *xdata)
1315
gfx_common_rsp rsp = {
1318
server_state_t *state = NULL;
1319
rpcsvc_request_t *req = NULL;
1321
dict_to_xdr(xdata, &rsp.xdata);
1324
state = CALL_STATE(frame);
1325
gf_smsg(this->name, fop_log_level(GF_FOP_FLUSH, op_errno), op_errno,
1326
PS_MSG_FLUSH_INFO, "frame=%" PRId64, frame->root->unique,
1327
"FLUSH_fd_no=%" PRId64, state->resolve.fd_no, "uuid_utoa=%s",
1328
uuid_utoa(state->resolve.gfid), "client=%s",
1329
STACK_CLIENT_NAME(frame->root), "error-xlator: %s",
1330
STACK_ERR_XL_NAME(frame->root), NULL);
1335
rsp.op_ret = op_ret;
1336
rsp.op_errno = gf_errno_to_error(op_errno);
1339
server_submit_reply(frame, req, &rsp, NULL, 0, NULL,
1340
(xdrproc_t)xdr_gfx_common_rsp);
1342
GF_FREE(rsp.xdata.pairs.pairs_val);
1348
server4_fsync_cbk(call_frame_t *frame, void *cookie, xlator_t *this,
1349
int32_t op_ret, int32_t op_errno, struct iatt *prebuf,
1350
struct iatt *postbuf, dict_t *xdata)
1352
gfx_common_2iatt_rsp rsp = {
1355
server_state_t *state = NULL;
1356
rpcsvc_request_t *req = NULL;
1358
dict_to_xdr(xdata, &rsp.xdata);
1361
state = CALL_STATE(frame);
1362
gf_smsg(this->name, fop_log_level(GF_FOP_FSYNC, op_errno), op_errno,
1363
PS_MSG_SYNC_INFO, "frame=%" PRId64, frame->root->unique,
1364
"FSYNC_fd_no=%" PRId64, state->resolve.fd_no, "uuid_utoa=%s",
1365
uuid_utoa(state->resolve.gfid), "client=%s",
1366
STACK_CLIENT_NAME(frame->root), "error-xlator: %s",
1367
STACK_ERR_XL_NAME(frame->root), NULL);
1371
server4_post_common_2iatt(&rsp, prebuf, postbuf);
1374
rsp.op_ret = op_ret;
1375
rsp.op_errno = gf_errno_to_error(op_errno);
1378
server_submit_reply(frame, req, &rsp, NULL, 0, NULL,
1379
(xdrproc_t)xdr_gfx_common_2iatt_rsp);
1381
GF_FREE(rsp.xdata.pairs.pairs_val);
1387
server4_writev_cbk(call_frame_t *frame, void *cookie, xlator_t *this,
1388
int32_t op_ret, int32_t op_errno, struct iatt *prebuf,
1389
struct iatt *postbuf, dict_t *xdata)
1391
gfx_common_2iatt_rsp rsp = {
1394
server_state_t *state = NULL;
1395
rpcsvc_request_t *req = NULL;
1397
dict_to_xdr(xdata, &rsp.xdata);
1400
state = CALL_STATE(frame);
1401
gf_smsg(this->name, fop_log_level(GF_FOP_WRITE, op_errno), op_errno,
1402
PS_MSG_WRITE_INFO, "frame=%" PRId64, frame->root->unique,
1403
"WRITEV_fd_no=%" PRId64, state->resolve.fd_no, "uuid_utoa=%s",
1404
uuid_utoa(state->resolve.gfid), "client=%s",
1405
STACK_CLIENT_NAME(frame->root), "error-xlator=%s",
1406
STACK_ERR_XL_NAME(frame->root), NULL);
1410
server4_post_common_2iatt(&rsp, prebuf, postbuf);
1413
rsp.op_ret = op_ret;
1414
rsp.op_errno = gf_errno_to_error(op_errno);
1417
server_submit_reply(frame, req, &rsp, NULL, 0, NULL,
1418
(xdrproc_t)xdr_gfx_common_2iatt_rsp);
1420
GF_FREE(rsp.xdata.pairs.pairs_val);
1426
server4_readv_cbk(call_frame_t *frame, void *cookie, xlator_t *this,
1427
int32_t op_ret, int32_t op_errno, struct iovec *vector,
1428
int32_t count, struct iatt *stbuf, struct iobref *iobref,
1431
gfx_read_rsp rsp = {
1434
server_state_t *state = NULL;
1435
rpcsvc_request_t *req = NULL;
1437
#ifdef GF_TESTING_IO_XDATA
1443
ret = dict_set_str(xdata, "testing-the-xdata-key",
1444
"testing-xdata-value");
1447
dict_to_xdr(xdata, &rsp.xdata);
1450
state = CALL_STATE(frame);
1451
gf_smsg(this->name, fop_log_level(GF_FOP_READ, op_errno), op_errno,
1452
PS_MSG_READ_INFO, "frame=%" PRId64, frame->root->unique,
1453
"READV_fd_no=%" PRId64, state->resolve.fd_no, "uuid_utoa=%s",
1454
uuid_utoa(state->resolve.gfid), "client=%s",
1455
STACK_CLIENT_NAME(frame->root), "error-xlator=%s",
1456
STACK_ERR_XL_NAME(frame->root), NULL);
1460
server4_post_readv(&rsp, stbuf, op_ret);
1463
rsp.op_ret = op_ret;
1464
rsp.op_errno = gf_errno_to_error(op_errno);
1467
server_submit_reply(frame, req, &rsp, vector, count, iobref,
1468
(xdrproc_t)xdr_gfx_read_rsp);
1470
GF_FREE(rsp.xdata.pairs.pairs_val);
1476
server4_rchecksum_cbk(call_frame_t *frame, void *cookie, xlator_t *this,
1477
int32_t op_ret, int32_t op_errno, uint32_t weak_checksum,
1478
uint8_t *strong_checksum, dict_t *xdata)
1480
gfx_rchecksum_rsp rsp = {
1483
rpcsvc_request_t *req = NULL;
1484
server_state_t *state = NULL;
1486
dict_to_xdr(xdata, &rsp.xdata);
1489
state = CALL_STATE(frame);
1490
gf_smsg(this->name, fop_log_level(GF_FOP_RCHECKSUM, op_errno), op_errno,
1491
PS_MSG_CHKSUM_INFO, "frame=%" PRId64, frame->root->unique,
1492
"RCHECKSUM_fd_no=%" PRId64, state->resolve.fd_no,
1493
"uuid_utoa=%s", uuid_utoa(state->resolve.gfid), "client=%s",
1494
STACK_CLIENT_NAME(frame->root), "error-xlator=%s",
1495
STACK_ERR_XL_NAME(frame->root), NULL);
1499
server4_post_rchecksum(&rsp, weak_checksum, strong_checksum);
1501
rsp.op_ret = op_ret;
1502
rsp.op_errno = gf_errno_to_error(op_errno);
1505
server_submit_reply(frame, req, &rsp, NULL, 0, NULL,
1506
(xdrproc_t)xdr_gfx_rchecksum_rsp);
1508
GF_FREE(rsp.xdata.pairs.pairs_val);
1514
server4_open_cbk(call_frame_t *frame, void *cookie, xlator_t *this,
1515
int32_t op_ret, int32_t op_errno, fd_t *fd, dict_t *xdata)
1517
server_state_t *state = NULL;
1518
rpcsvc_request_t *req = NULL;
1519
gfx_open_rsp rsp = {
1523
dict_to_xdr(xdata, &rsp.xdata);
1526
state = CALL_STATE(frame);
1527
gf_smsg(this->name, fop_log_level(GF_FOP_OPEN, op_errno), op_errno,
1528
PS_MSG_OPEN_INFO, "frame=%" PRId64, frame->root->unique,
1529
"OPEN_path=%s", state->loc.path, "uuid_utoa=%s",
1530
uuid_utoa(state->resolve.gfid), "client=%s",
1531
STACK_CLIENT_NAME(frame->root), "error-xlator=%s",
1532
STACK_ERR_XL_NAME(frame->root), NULL);
1536
op_ret = server4_post_open(frame, this, &rsp, fd);
1540
rsp.op_ret = op_ret;
1541
rsp.op_errno = gf_errno_to_error(op_errno);
1544
server_submit_reply(frame, req, &rsp, NULL, 0, NULL,
1545
(xdrproc_t)xdr_gfx_open_rsp);
1546
GF_FREE(rsp.xdata.pairs.pairs_val);
1552
server4_create_cbk(call_frame_t *frame, void *cookie, xlator_t *this,
1553
int32_t op_ret, int32_t op_errno, fd_t *fd, inode_t *inode,
1554
struct iatt *stbuf, struct iatt *preparent,
1555
struct iatt *postparent, dict_t *xdata)
1557
server_state_t *state = NULL;
1558
rpcsvc_request_t *req = NULL;
1560
gfx_create_rsp rsp = {
1564
dict_to_xdr(xdata, &rsp.xdata);
1566
state = CALL_STATE(frame);
1570
this->name, GF_LOG_INFO, op_errno, PS_MSG_CREATE_INFO,
1571
"frame=%" PRId64, frame->root->unique, "path=%s", state->loc.path,
1572
"uuid_utoa=%s", uuid_utoa(state->resolve.pargfid), "bname=%s",
1573
state->resolve.bname, "client=%s", STACK_CLIENT_NAME(frame->root),
1574
"error-xlator=%s", STACK_ERR_XL_NAME(frame->root), NULL);
1578
/* TODO: log gfid too */
1579
gf_msg_trace(frame->root->client->bound_xl->name, 0,
1583
frame->root->unique, state->loc.name,
1584
uuid_utoa(stbuf->ia_gfid));
1586
op_ret = server4_post_create(frame, &rsp, state, this, fd, inode, stbuf,
1587
preparent, postparent);
1597
rsp.op_ret = op_ret;
1598
rsp.op_errno = gf_errno_to_error(op_errno);
1601
server_submit_reply(frame, req, &rsp, NULL, 0, NULL,
1602
(xdrproc_t)xdr_gfx_create_rsp);
1604
GF_FREE(rsp.xdata.pairs.pairs_val);
1610
server4_readlink_cbk(call_frame_t *frame, void *cookie, xlator_t *this,
1611
int32_t op_ret, int32_t op_errno, const char *buf,
1612
struct iatt *stbuf, dict_t *xdata)
1614
gfx_readlink_rsp rsp = {
1617
server_state_t *state = NULL;
1618
rpcsvc_request_t *req = NULL;
1620
dict_to_xdr(xdata, &rsp.xdata);
1623
state = CALL_STATE(frame);
1624
gf_smsg(this->name, GF_LOG_INFO, op_errno, PS_MSG_LINK_INFO,
1625
"frame=%" PRId64, frame->root->unique, "READLINK_path=%s",
1626
state->loc.path, "uuid_utoa=%s", uuid_utoa(state->resolve.gfid),
1627
"client=%s", STACK_CLIENT_NAME(frame->root), "error-xlator=%s",
1628
STACK_ERR_XL_NAME(frame->root), NULL);
1632
server4_post_readlink(&rsp, stbuf, buf);
1634
rsp.op_ret = op_ret;
1635
rsp.op_errno = gf_errno_to_error(op_errno);
1640
server_submit_reply(frame, req, &rsp, NULL, 0, NULL,
1641
(xdrproc_t)xdr_gfx_readlink_rsp);
1643
GF_FREE(rsp.xdata.pairs.pairs_val);
1649
server4_stat_cbk(call_frame_t *frame, void *cookie, xlator_t *this,
1650
int32_t op_ret, int32_t op_errno, struct iatt *stbuf,
1653
gfx_common_iatt_rsp rsp = {
1656
server_state_t *state = NULL;
1657
rpcsvc_request_t *req = NULL;
1659
dict_to_xdr(xdata, &rsp.xdata);
1661
state = CALL_STATE(frame);
1663
gf_smsg(this->name, fop_log_level(GF_FOP_STAT, op_errno), op_errno,
1664
PS_MSG_STAT_INFO, "frame=%" PRId64, frame->root->unique,
1665
"path=%s", (state->loc.path) ? state->loc.path : "",
1666
"uuid_utoa=%s", uuid_utoa(state->resolve.gfid), "client=%s",
1667
STACK_CLIENT_NAME(frame->root), "error-xlator=%s",
1668
STACK_ERR_XL_NAME(frame->root), NULL);
1672
server4_post_common_iatt(state, &rsp, stbuf);
1674
rsp.op_ret = op_ret;
1675
rsp.op_errno = gf_errno_to_error(op_errno);
1678
server_submit_reply(frame, req, &rsp, NULL, 0, NULL,
1679
(xdrproc_t)xdr_gfx_common_iatt_rsp);
1681
GF_FREE(rsp.xdata.pairs.pairs_val);
1687
server4_setattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,
1688
int32_t op_ret, int32_t op_errno, struct iatt *statpre,
1689
struct iatt *statpost, dict_t *xdata)
1691
gfx_common_2iatt_rsp rsp = {
1694
server_state_t *state = NULL;
1695
rpcsvc_request_t *req = NULL;
1697
dict_to_xdr(xdata, &rsp.xdata);
1700
state = CALL_STATE(frame);
1701
gf_smsg(this->name, GF_LOG_INFO, op_errno, PS_MSG_SETATTR_INFO,
1702
"frame=%" PRId64, frame->root->unique, "path=%s",
1703
(state->loc.path) ? state->loc.path : "", "uuid_utoa=%s",
1704
uuid_utoa(state->resolve.gfid), "client=%s",
1705
STACK_CLIENT_NAME(frame->root), "error-xlator=%s",
1706
STACK_ERR_XL_NAME(frame->root), NULL);
1710
server4_post_common_2iatt(&rsp, statpre, statpost);
1713
rsp.op_ret = op_ret;
1714
rsp.op_errno = gf_errno_to_error(op_errno);
1717
server_submit_reply(frame, req, &rsp, NULL, 0, NULL,
1718
(xdrproc_t)xdr_gfx_common_2iatt_rsp);
1720
GF_FREE(rsp.xdata.pairs.pairs_val);
1726
server4_fsetattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this,
1727
int32_t op_ret, int32_t op_errno, struct iatt *statpre,
1728
struct iatt *statpost, dict_t *xdata)
1730
gfx_common_2iatt_rsp rsp = {
1733
server_state_t *state = NULL;
1734
rpcsvc_request_t *req = NULL;
1736
dict_to_xdr(xdata, &rsp.xdata);
1739
state = CALL_STATE(frame);
1740
gf_smsg(this->name, fop_log_level(GF_FOP_FSETATTR, op_errno), op_errno,
1741
PS_MSG_SETATTR_INFO, "frame=%" PRId64,
1742
"FSETATTR_fd_no=%" PRId64, state->resolve.fd_no, "uuid_utoa=%s",
1743
uuid_utoa(state->resolve.gfid), "client=%s",
1744
STACK_CLIENT_NAME(frame->root), "error-xlator=%s",
1745
STACK_ERR_XL_NAME(frame->root), NULL);
1749
server4_post_common_2iatt(&rsp, statpre, statpost);
1752
rsp.op_ret = op_ret;
1753
rsp.op_errno = gf_errno_to_error(op_errno);
1756
server_submit_reply(frame, req, &rsp, NULL, 0, NULL,
1757
(xdrproc_t)xdr_gfx_common_2iatt_rsp);
1759
GF_FREE(rsp.xdata.pairs.pairs_val);
1765
server4_xattrop_cbk(call_frame_t *frame, void *cookie, xlator_t *this,
1766
int32_t op_ret, int32_t op_errno, dict_t *dict,
1769
gfx_common_dict_rsp rsp = {
1772
server_state_t *state = NULL;
1773
rpcsvc_request_t *req = NULL;
1775
dict_to_xdr(xdata, &rsp.xdata);
1778
state = CALL_STATE(frame);
1779
gf_smsg(this->name, fop_log_level(GF_FOP_XATTROP, op_errno), op_errno,
1780
PS_MSG_XATTROP_INFO, "frame=%" PRId64, frame->root->unique,
1781
"path=%s", state->loc.path, "uuid_utoa=%s",
1782
uuid_utoa(state->resolve.gfid), "client=%s",
1783
STACK_CLIENT_NAME(frame->root), "error-xlator=%s",
1784
STACK_ERR_XL_NAME(frame->root), NULL);
1788
dict_to_xdr(dict, &rsp.dict);
1790
rsp.op_ret = op_ret;
1791
rsp.op_errno = gf_errno_to_error(op_errno);
1794
server_submit_reply(frame, req, &rsp, NULL, 0, NULL,
1795
(xdrproc_t)xdr_gfx_common_dict_rsp);
1797
GF_FREE(rsp.dict.pairs.pairs_val);
1799
GF_FREE(rsp.xdata.pairs.pairs_val);
1805
server4_fxattrop_cbk(call_frame_t *frame, void *cookie, xlator_t *this,
1806
int32_t op_ret, int32_t op_errno, dict_t *dict,
1809
gfx_common_dict_rsp rsp = {
1812
server_state_t *state = NULL;
1813
rpcsvc_request_t *req = NULL;
1815
dict_to_xdr(xdata, &rsp.xdata);
1818
state = CALL_STATE(frame);
1819
gf_smsg(this->name, fop_log_level(GF_FOP_FXATTROP, op_errno), op_errno,
1820
PS_MSG_XATTROP_INFO, "frame=%" PRId64, frame->root->unique,
1821
"FXATTROP_fd_no=%" PRId64, state->resolve.fd_no, "uuid_utoa=%s",
1822
uuid_utoa(state->resolve.gfid), "client=%s",
1823
STACK_CLIENT_NAME(frame->root), "error-xlator=%s",
1824
STACK_ERR_XL_NAME(frame->root), NULL);
1828
dict_to_xdr(dict, &rsp.dict);
1831
rsp.op_ret = op_ret;
1832
rsp.op_errno = gf_errno_to_error(op_errno);
1835
server_submit_reply(frame, req, &rsp, NULL, 0, NULL,
1836
(xdrproc_t)xdr_gfx_common_dict_rsp);
1838
GF_FREE(rsp.dict.pairs.pairs_val);
1840
GF_FREE(rsp.xdata.pairs.pairs_val);
1846
server4_readdirp_cbk(call_frame_t *frame, void *cookie, xlator_t *this,
1847
int32_t op_ret, int32_t op_errno, gf_dirent_t *entries,
1850
gfx_readdirp_rsp rsp = {
1853
server_state_t *state = NULL;
1854
rpcsvc_request_t *req = NULL;
1857
state = CALL_STATE(frame);
1859
dict_to_xdr(xdata, &rsp.xdata);
1862
state = CALL_STATE(frame);
1863
gf_smsg(this->name, fop_log_level(GF_FOP_READDIRP, op_errno), op_errno,
1864
PS_MSG_DIR_INFO, "frame=%" PRId64, frame->root->unique,
1865
"READDIRP_fd_no=%" PRId64, state->resolve.fd_no, "uuid_utoa=%s",
1866
uuid_utoa(state->resolve.gfid), "client=%s",
1867
STACK_CLIENT_NAME(frame->root), "error-xlator=%s",
1868
STACK_ERR_XL_NAME(frame->root), NULL);
1872
/* (op_ret == 0) is valid, and means EOF */
1874
ret = server4_post_readdirp(&rsp, entries);
1882
gf_link_inodes_from_dirent(state->fd->inode, entries);
1885
rsp.op_ret = op_ret;
1886
rsp.op_errno = gf_errno_to_error(op_errno);
1889
server_submit_reply(frame, req, &rsp, NULL, 0, NULL,
1890
(xdrproc_t)xdr_gfx_readdirp_rsp_custom);
1892
GF_FREE(rsp.xdata.pairs.pairs_val);
1894
readdirp_rsp_cleanup_v2(&rsp);
1900
server4_fallocate_cbk(call_frame_t *frame, void *cookie, xlator_t *this,
1901
int32_t op_ret, int32_t op_errno, struct iatt *statpre,
1902
struct iatt *statpost, dict_t *xdata)
1904
gfx_common_2iatt_rsp rsp = {
1907
server_state_t *state = NULL;
1908
rpcsvc_request_t *req = NULL;
1910
dict_to_xdr(xdata, &rsp.xdata);
1913
state = CALL_STATE(frame);
1914
gf_smsg(this->name, fop_log_level(GF_FOP_FALLOCATE, op_errno), op_errno,
1915
PS_MSG_ALLOC_INFO, "frame=%" PRId64, frame->root->unique,
1916
"FALLOCATE_fd_no=%" PRId64, state->resolve.fd_no,
1917
"uuid_utoa=%s", uuid_utoa(state->resolve.gfid), "client=%s",
1918
STACK_CLIENT_NAME(frame->root), "error-xlator=%s",
1919
STACK_ERR_XL_NAME(frame->root), NULL);
1923
server4_post_common_2iatt(&rsp, statpre, statpost);
1926
rsp.op_ret = op_ret;
1927
rsp.op_errno = gf_errno_to_error(op_errno);
1930
server_submit_reply(frame, req, &rsp, NULL, 0, NULL,
1931
(xdrproc_t)xdr_gfx_common_2iatt_rsp);
1933
GF_FREE(rsp.xdata.pairs.pairs_val);
1939
server4_discard_cbk(call_frame_t *frame, void *cookie, xlator_t *this,
1940
int32_t op_ret, int32_t op_errno, struct iatt *statpre,
1941
struct iatt *statpost, dict_t *xdata)
1943
gfx_common_2iatt_rsp rsp = {
1946
server_state_t *state = NULL;
1947
rpcsvc_request_t *req = NULL;
1949
dict_to_xdr(xdata, &rsp.xdata);
1952
state = CALL_STATE(frame);
1953
gf_smsg(this->name, fop_log_level(GF_FOP_DISCARD, op_errno), op_errno,
1954
PS_MSG_DISCARD_INFO, "frame=%" PRId64, frame->root->unique,
1955
"fd_no=%" PRId64, state->resolve.fd_no, "uuid_utoa=%s",
1956
uuid_utoa(state->resolve.gfid), "client=%s",
1957
STACK_CLIENT_NAME(frame->root), "error-xlator: %s",
1958
STACK_ERR_XL_NAME(frame->root), NULL);
1962
server4_post_common_2iatt(&rsp, statpre, statpost);
1965
rsp.op_ret = op_ret;
1966
rsp.op_errno = gf_errno_to_error(op_errno);
1969
server_submit_reply(frame, req, &rsp, NULL, 0, NULL,
1970
(xdrproc_t)xdr_gfx_common_2iatt_rsp);
1972
GF_FREE(rsp.xdata.pairs.pairs_val);
1978
server4_zerofill_cbk(call_frame_t *frame, void *cookie, xlator_t *this,
1979
int32_t op_ret, int32_t op_errno, struct iatt *statpre,
1980
struct iatt *statpost, dict_t *xdata)
1982
gfx_common_2iatt_rsp rsp = {
1985
server_state_t *state = NULL;
1986
rpcsvc_request_t *req = NULL;
1989
state = CALL_STATE(frame);
1991
dict_to_xdr(xdata, &rsp.xdata);
1994
gf_smsg(this->name, fop_log_level(GF_FOP_ZEROFILL, op_errno), op_errno,
1995
PS_MSG_ZEROFILL_INFO, "frame=%" PRId64, frame->root->unique,
1996
"fd_no=%" PRId64, state->resolve.fd_no, "uuid_utoa=%s",
1997
uuid_utoa(state->resolve.gfid), "client=%s",
1998
STACK_CLIENT_NAME(frame->root), "error-xlator=%s",
1999
STACK_ERR_XL_NAME(frame->root), NULL);
2003
server4_post_common_2iatt(&rsp, statpre, statpost);
2006
rsp.op_ret = op_ret;
2007
rsp.op_errno = gf_errno_to_error(op_errno);
2009
server_submit_reply(frame, req, &rsp, NULL, 0, NULL,
2010
(xdrproc_t)xdr_gfx_common_2iatt_rsp);
2012
GF_FREE(rsp.xdata.pairs.pairs_val);
2018
server4_ipc_cbk(call_frame_t *frame, void *cookie, xlator_t *this,
2019
int32_t op_ret, int32_t op_errno, dict_t *xdata)
2021
gfx_common_rsp rsp = {
2024
server_state_t *state = NULL;
2025
rpcsvc_request_t *req = NULL;
2028
state = CALL_STATE(frame);
2030
dict_to_xdr(xdata, &rsp.xdata);
2033
gf_smsg(this->name, GF_LOG_INFO, op_errno, PS_MSG_SERVER_IPC_INFO,
2034
"frame=%" PRId64, frame->root->unique, "IPC=%" PRId64,
2035
state->resolve.fd_no, "uuid_utoa=%s",
2036
uuid_utoa(state->resolve.gfid), "client=%s",
2037
STACK_CLIENT_NAME(frame->root), "error-xlator=%s",
2038
STACK_ERR_XL_NAME(frame->root), NULL);
2043
rsp.op_ret = op_ret;
2044
rsp.op_errno = gf_errno_to_error(op_errno);
2046
server_submit_reply(frame, req, &rsp, NULL, 0, NULL,
2047
(xdrproc_t)xdr_gfx_common_rsp);
2049
GF_FREE(rsp.xdata.pairs.pairs_val);
2055
server4_seek_cbk(call_frame_t *frame, void *cookie, xlator_t *this,
2056
int32_t op_ret, int32_t op_errno, off_t offset, dict_t *xdata)
2058
struct gfx_seek_rsp rsp = {
2061
server_state_t *state = NULL;
2062
rpcsvc_request_t *req = NULL;
2065
state = CALL_STATE(frame);
2067
dict_to_xdr(xdata, &rsp.xdata);
2070
gf_smsg(this->name, fop_log_level(GF_FOP_SEEK, op_errno), op_errno,
2071
PS_MSG_SEEK_INFO, "frame=%" PRId64, frame->root->unique,
2072
"fd_no=%" PRId64, state->resolve.fd_no, "uuid_utoa=%s",
2073
uuid_utoa(state->resolve.gfid), "client=%s",
2074
STACK_CLIENT_NAME(frame->root), "error-xlator=%s",
2075
STACK_ERR_XL_NAME(frame->root), NULL);
2079
server4_post_seek(&rsp, offset);
2081
rsp.op_ret = op_ret;
2082
rsp.op_errno = gf_errno_to_error(op_errno);
2084
server_submit_reply(frame, req, &rsp, NULL, 0, NULL,
2085
(xdrproc_t)xdr_gfx_seek_rsp);
2087
GF_FREE(rsp.xdata.pairs.pairs_val);
2093
server4_setactivelk_cbk(call_frame_t *frame, void *cookie, xlator_t *this,
2094
int32_t op_ret, int32_t op_errno, dict_t *xdata)
2096
gfx_common_rsp rsp = {
2099
server_state_t *state = NULL;
2100
rpcsvc_request_t *req = NULL;
2102
state = CALL_STATE(frame);
2104
dict_to_xdr(xdata, &rsp.xdata);
2107
state = CALL_STATE(frame);
2108
gf_smsg(this->name, GF_LOG_INFO, op_errno, PS_MSG_SETACTIVELK_INFO,
2109
"frame=%" PRId64, frame->root->unique, "path==%s",
2110
state->loc.path, "uuid_utoa=%s", uuid_utoa(state->resolve.gfid),
2111
"client=%s", STACK_CLIENT_NAME(frame->root), "error-xlator=%s",
2112
STACK_ERR_XL_NAME(frame->root), NULL);
2117
rsp.op_ret = op_ret;
2118
rsp.op_errno = gf_errno_to_error(op_errno);
2122
server_submit_reply(frame, req, &rsp, NULL, 0, NULL,
2123
(xdrproc_t)xdr_gfx_common_rsp);
2125
GF_FREE(rsp.xdata.pairs.pairs_val);
2131
server4_namelink_cbk(call_frame_t *frame, void *cookie, xlator_t *this,
2132
int32_t op_ret, int32_t op_errno, struct iatt *prebuf,
2133
struct iatt *postbuf, dict_t *xdata)
2135
gfx_common_2iatt_rsp rsp = {
2138
rpcsvc_request_t *req = NULL;
2140
dict_to_xdr(xdata, &rsp.xdata);
2144
gfx_stat_from_iattx(&rsp.prestat, prebuf);
2145
gfx_stat_from_iattx(&rsp.poststat, postbuf);
2148
* no point in linking inode here -- there's no stbuf anyway and a
2149
* lookup() for this name entry would be a negative lookup.
2153
rsp.op_ret = op_ret;
2154
rsp.op_errno = gf_errno_to_error(op_errno);
2157
server_submit_reply(frame, req, &rsp, NULL, 0, NULL,
2158
(xdrproc_t)xdr_gfx_common_2iatt_rsp);
2160
GF_FREE(rsp.xdata.pairs.pairs_val);
2166
server4_icreate_cbk(call_frame_t *frame, void *cookie, xlator_t *this,
2167
int32_t op_ret, int32_t op_errno, inode_t *inode,
2168
struct iatt *stbuf, dict_t *xdata)
2170
server_state_t *state = NULL;
2171
inode_t *link_inode = NULL;
2172
rpcsvc_request_t *req = NULL;
2173
gfx_common_iatt_rsp rsp = {
2177
dict_to_xdr(xdata, &rsp.xdata);
2178
state = CALL_STATE(frame);
2181
gf_smsg(this->name, GF_LOG_INFO, op_errno, PS_MSG_CREATE_INFO,
2182
"frame=%" PRId64, frame->root->unique, "ICREATE_gfid=%s",
2183
uuid_utoa(state->resolve.gfid), NULL);
2187
gf_msg_trace(frame->root->client->bound_xl->name, 0,
2191
frame->root->unique, uuid_utoa(stbuf->ia_gfid));
2193
link_inode = inode_link(inode, state->loc.parent, state->loc.name, stbuf);
2201
inode_lookup(link_inode);
2202
inode_unref(link_inode);
2204
gfx_stat_from_iattx(&rsp.stat, stbuf);
2207
rsp.op_ret = op_ret;
2208
rsp.op_errno = gf_errno_to_error(op_errno);
2211
server_submit_reply(frame, req, &rsp, NULL, 0, NULL,
2212
(xdrproc_t)xdr_gfx_common_iatt_rsp);
2214
GF_FREE(rsp.xdata.pairs.pairs_val);
2220
server4_put_cbk(call_frame_t *frame, void *cookie, xlator_t *this,
2221
int32_t op_ret, int32_t op_errno, inode_t *inode,
2222
struct iatt *stbuf, struct iatt *preparent,
2223
struct iatt *postparent, dict_t *xdata)
2225
server_state_t *state = NULL;
2226
rpcsvc_request_t *req = NULL;
2227
gfx_common_3iatt_rsp rsp = {
2231
dict_to_xdr(xdata, &rsp.xdata);
2233
state = CALL_STATE(frame);
2237
this->name, GF_LOG_INFO, op_errno, PS_MSG_PUT_INFO,
2238
"frame=%" PRId64, frame->root->unique, "path=%s", state->loc.path,
2239
"uuid_utoa=%s", uuid_utoa(state->resolve.pargfid), "bname=%s",
2240
state->resolve.bname, "client=%s", STACK_CLIENT_NAME(frame->root),
2241
"error-xlator=%s", STACK_ERR_XL_NAME(frame->root), NULL);
2245
gf_msg_trace(frame->root->client->bound_xl->name, 0,
2249
frame->root->unique, state->loc.name,
2250
uuid_utoa(stbuf->ia_gfid));
2252
server4_post_common_3iatt(state, &rsp, inode, stbuf, preparent, postparent);
2255
rsp.op_ret = op_ret;
2256
rsp.op_errno = gf_errno_to_error(op_errno);
2259
server_submit_reply(frame, req, &rsp, NULL, 0, NULL,
2260
(xdrproc_t)xdr_gfx_common_3iatt_rsp);
2262
GF_FREE(rsp.xdata.pairs.pairs_val);
2268
server4_copy_file_range_cbk(call_frame_t *frame, void *cookie, xlator_t *this,
2269
int32_t op_ret, int32_t op_errno,
2270
struct iatt *stbuf, struct iatt *prebuf_dst,
2271
struct iatt *postbuf_dst, dict_t *xdata)
2273
gfx_common_3iatt_rsp rsp = {
2276
server_state_t *state = NULL;
2277
rpcsvc_request_t *req = NULL;
2278
char in_gfid[GF_UUID_BUF_SIZE] = {0};
2279
char out_gfid[GF_UUID_BUF_SIZE] = {0};
2281
dict_to_xdr(xdata, &rsp.xdata);
2284
state = CALL_STATE(frame);
2286
uuid_utoa_r(state->resolve.gfid, in_gfid);
2287
uuid_utoa_r(state->resolve2.gfid, out_gfid);
2289
gf_smsg(this->name, fop_log_level(GF_FOP_COPY_FILE_RANGE, op_errno),
2290
op_errno, PS_MSG_WRITE_INFO, "frame=%" PRId64,
2291
frame->root->unique, "COPY_FILE_RANGE_fd_no=%" PRId64,
2292
state->resolve.fd_no, "in_gfid=%s", in_gfid,
2293
"resolve2_fd_no=%" PRId64, state->resolve2.fd_no, "out_gfid=%s",
2294
out_gfid, "client=%s", STACK_CLIENT_NAME(frame->root),
2295
"error-xlator=%s", STACK_ERR_XL_NAME(frame->root), NULL);
2300
* server4_post_common_3iatt (ex: used by server4_put_cbk and some
2301
* other cbks) also performs inode linking along with copying of 3
2302
* iatt structures to the response. But, for copy_file_range, linking
2303
* of inode is not needed. Therefore a new function is used to
2304
* construct the response using 3 iatt structures.
2305
* @stbuf: iatt or stat of the source file (or fd)
2306
* @prebuf_dst: iatt or stat of destination file (or fd) before the fop
2307
* @postbuf_dst: iatt or stat of destination file (or fd) after the fop
2309
server4_post_common_3iatt_noinode(&rsp, stbuf, prebuf_dst, postbuf_dst);
2312
rsp.op_ret = op_ret;
2313
rsp.op_errno = gf_errno_to_error(op_errno);
2316
server_submit_reply(frame, req, &rsp, NULL, 0, NULL,
2317
(xdrproc_t)xdr_gfx_common_3iatt_rsp);
2319
GF_FREE(rsp.xdata.pairs.pairs_val);
2324
/* Resume function section */
2327
server4_rchecksum_resume(call_frame_t *frame, xlator_t *bound_xl)
2329
server_state_t *state = NULL;
2331
int op_errno = EINVAL;
2333
state = CALL_STATE(frame);
2335
if (state->resolve.op_ret != 0) {
2336
op_ret = state->resolve.op_ret;
2337
op_errno = state->resolve.op_errno;
2341
STACK_WIND(frame, server4_rchecksum_cbk, bound_xl,
2342
bound_xl->fops->rchecksum, state->fd, state->offset, state->size,
2347
server4_rchecksum_cbk(frame, NULL, frame->this, op_ret, op_errno, 0, NULL,
2354
server4_lease_resume(call_frame_t *frame, xlator_t *bound_xl)
2356
server_state_t *state = NULL;
2358
state = CALL_STATE(frame);
2360
if (state->resolve.op_ret != 0)
2363
STACK_WIND(frame, server4_lease_cbk, bound_xl, bound_xl->fops->lease,
2364
&state->loc, &state->lease, state->xdata);
2369
server4_lease_cbk(frame, NULL, frame->this, state->resolve.op_ret,
2370
state->resolve.op_errno, NULL, NULL);
2375
server4_put_resume(call_frame_t *frame, xlator_t *bound_xl)
2377
server_state_t *state = NULL;
2379
state = CALL_STATE(frame);
2381
if (state->resolve.op_ret != 0)
2384
state->loc.inode = inode_new(state->itable);
2386
STACK_WIND(frame, server4_put_cbk, bound_xl, bound_xl->fops->put,
2387
&(state->loc), state->mode, state->umask, state->flags,
2388
state->payload_vector, state->payload_count, state->offset,
2389
state->iobref, state->dict, state->xdata);
2393
server4_put_cbk(frame, NULL, frame->this, state->resolve.op_ret,
2394
state->resolve.op_errno, NULL, NULL, NULL, NULL, NULL);
2399
server4_lk_resume(call_frame_t *frame, xlator_t *bound_xl)
2401
server_state_t *state = NULL;
2403
state = CALL_STATE(frame);
2405
if (state->resolve.op_ret != 0)
2408
STACK_WIND(frame, server4_lk_cbk, bound_xl, bound_xl->fops->lk, state->fd,
2409
state->cmd, &state->flock, state->xdata);
2414
server4_lk_cbk(frame, NULL, frame->this, state->resolve.op_ret,
2415
state->resolve.op_errno, NULL, NULL);
2420
server4_rename_resume(call_frame_t *frame, xlator_t *bound_xl)
2422
server_state_t *state = NULL;
2426
state = CALL_STATE(frame);
2428
if (state->resolve.op_ret != 0) {
2429
op_ret = state->resolve.op_ret;
2430
op_errno = state->resolve.op_errno;
2434
if (state->resolve2.op_ret != 0) {
2435
op_ret = state->resolve2.op_ret;
2436
op_errno = state->resolve2.op_errno;
2440
if (state->loc.parent->ns_inode != state->loc2.parent->ns_inode) {
2441
/* lets not allow rename across namespaces */
2444
gf_msg(THIS->name, GF_LOG_ERROR, EXDEV, 0,
2445
"%s: rename across different namespaces not supported",
2450
STACK_WIND(frame, server4_rename_cbk, bound_xl, bound_xl->fops->rename,
2451
&state->loc, &state->loc2, state->xdata);
2454
server4_rename_cbk(frame, NULL, frame->this, op_ret, op_errno, NULL, NULL,
2455
NULL, NULL, NULL, NULL);
2460
server4_link_resume(call_frame_t *frame, xlator_t *bound_xl)
2462
server_state_t *state = NULL;
2466
state = CALL_STATE(frame);
2468
if (state->resolve.op_ret != 0) {
2469
op_ret = state->resolve.op_ret;
2470
op_errno = state->resolve.op_errno;
2474
if (state->resolve2.op_ret != 0) {
2475
op_ret = state->resolve2.op_ret;
2476
op_errno = state->resolve2.op_errno;
2480
if (state->loc.inode->ns_inode != state->loc2.parent->ns_inode) {
2481
/* lets not allow linking across namespaces */
2484
gf_msg(THIS->name, GF_LOG_ERROR, EXDEV, 0,
2485
"%s: linking across different namespaces not supported",
2490
state->loc2.inode = inode_ref(state->loc.inode);
2492
STACK_WIND(frame, server4_link_cbk, bound_xl, bound_xl->fops->link,
2493
&state->loc, &state->loc2, state->xdata);
2497
server4_link_cbk(frame, NULL, frame->this, op_ret, op_errno, NULL, NULL,
2503
server4_symlink_resume(call_frame_t *frame, xlator_t *bound_xl)
2505
server_state_t *state = NULL;
2507
state = CALL_STATE(frame);
2509
if (state->resolve.op_ret != 0)
2512
state->loc.inode = inode_new(state->itable);
2514
STACK_WIND(frame, server4_symlink_cbk, bound_xl, bound_xl->fops->symlink,
2515
state->name, &state->loc, state->umask, state->xdata);
2519
server4_symlink_cbk(frame, NULL, frame->this, state->resolve.op_ret,
2520
state->resolve.op_errno, NULL, NULL, NULL, NULL, NULL);
2525
server4_access_resume(call_frame_t *frame, xlator_t *bound_xl)
2527
server_state_t *state = NULL;
2529
state = CALL_STATE(frame);
2531
if (state->resolve.op_ret != 0)
2534
STACK_WIND(frame, server4_access_cbk, bound_xl, bound_xl->fops->access,
2535
&state->loc, state->mask, state->xdata);
2538
server4_access_cbk(frame, NULL, frame->this, state->resolve.op_ret,
2539
state->resolve.op_errno, NULL);
2544
server4_fentrylk_resume(call_frame_t *frame, xlator_t *bound_xl)
2546
GF_UNUSED int ret = -1;
2547
server_state_t *state = NULL;
2549
state = CALL_STATE(frame);
2551
if (state->resolve.op_ret != 0)
2555
state->xdata = dict_new();
2558
ret = dict_set_str(state->xdata, "connection-id",
2559
frame->root->client->client_uid);
2561
STACK_WIND(frame, server4_fentrylk_cbk, bound_xl, bound_xl->fops->fentrylk,
2562
state->volume, state->fd, state->name, state->cmd, state->type,
2567
server4_fentrylk_cbk(frame, NULL, frame->this, state->resolve.op_ret,
2568
state->resolve.op_errno, NULL);
2573
server4_entrylk_resume(call_frame_t *frame, xlator_t *bound_xl)
2575
GF_UNUSED int ret = -1;
2576
server_state_t *state = NULL;
2578
state = CALL_STATE(frame);
2580
if (state->resolve.op_ret != 0)
2584
state->xdata = dict_new();
2587
ret = dict_set_str(state->xdata, "connection-id",
2588
frame->root->client->client_uid);
2590
STACK_WIND(frame, server4_entrylk_cbk, bound_xl, bound_xl->fops->entrylk,
2591
state->volume, &state->loc, state->name, state->cmd, state->type,
2595
server4_entrylk_cbk(frame, NULL, frame->this, state->resolve.op_ret,
2596
state->resolve.op_errno, NULL);
2601
server4_finodelk_resume(call_frame_t *frame, xlator_t *bound_xl)
2603
GF_UNUSED int ret = -1;
2604
server_state_t *state = NULL;
2606
gf_msg_debug(bound_xl->name, 0, "frame %p, xlator %p", frame, bound_xl);
2608
state = CALL_STATE(frame);
2610
if (state->resolve.op_ret != 0)
2614
state->xdata = dict_new();
2617
ret = dict_set_str(state->xdata, "connection-id",
2618
frame->root->client->client_uid);
2620
STACK_WIND(frame, server4_finodelk_cbk, bound_xl, bound_xl->fops->finodelk,
2621
state->volume, state->fd, state->cmd, &state->flock,
2626
server4_finodelk_cbk(frame, NULL, frame->this, state->resolve.op_ret,
2627
state->resolve.op_errno, NULL);
2633
server4_inodelk_resume(call_frame_t *frame, xlator_t *bound_xl)
2635
GF_UNUSED int ret = -1;
2636
server_state_t *state = NULL;
2638
gf_msg_debug(bound_xl->name, 0, "frame %p, xlator %p", frame, bound_xl);
2640
state = CALL_STATE(frame);
2642
if (state->resolve.op_ret != 0)
2646
state->xdata = dict_new();
2649
ret = dict_set_str(state->xdata, "connection-id",
2650
frame->root->client->client_uid);
2652
STACK_WIND(frame, server4_inodelk_cbk, bound_xl, bound_xl->fops->inodelk,
2653
state->volume, &state->loc, state->cmd, &state->flock,
2657
server4_inodelk_cbk(frame, NULL, frame->this, state->resolve.op_ret,
2658
state->resolve.op_errno, NULL);
2663
server4_rmdir_resume(call_frame_t *frame, xlator_t *bound_xl)
2665
server_state_t *state = NULL;
2667
state = CALL_STATE(frame);
2669
if (state->resolve.op_ret != 0)
2672
STACK_WIND(frame, server4_rmdir_cbk, bound_xl, bound_xl->fops->rmdir,
2673
&state->loc, state->flags, state->xdata);
2676
server4_rmdir_cbk(frame, NULL, frame->this, state->resolve.op_ret,
2677
state->resolve.op_errno, NULL, NULL, NULL);
2682
server4_mkdir_resume(call_frame_t *frame, xlator_t *bound_xl)
2685
server_state_t *state = NULL;
2687
state = CALL_STATE(frame);
2689
if (state->resolve.op_ret != 0)
2692
state->loc.inode = inode_new(state->itable);
2694
STACK_WIND(frame, server4_mkdir_cbk, bound_xl, bound_xl->fops->mkdir,
2695
&(state->loc), state->mode, state->umask, state->xdata);
2699
server4_mkdir_cbk(frame, NULL, frame->this, state->resolve.op_ret,
2700
state->resolve.op_errno, NULL, NULL, NULL, NULL, NULL);
2705
server4_mknod_resume(call_frame_t *frame, xlator_t *bound_xl)
2707
server_state_t *state = NULL;
2709
state = CALL_STATE(frame);
2711
if (state->resolve.op_ret != 0)
2714
state->loc.inode = inode_new(state->itable);
2716
STACK_WIND(frame, server4_mknod_cbk, bound_xl, bound_xl->fops->mknod,
2717
&(state->loc), state->mode, state->dev, state->umask,
2722
server4_mknod_cbk(frame, NULL, frame->this, state->resolve.op_ret,
2723
state->resolve.op_errno, NULL, NULL, NULL, NULL, NULL);
2728
server4_fsyncdir_resume(call_frame_t *frame, xlator_t *bound_xl)
2730
server_state_t *state = NULL;
2732
state = CALL_STATE(frame);
2734
if (state->resolve.op_ret != 0)
2737
STACK_WIND(frame, server4_fsyncdir_cbk, bound_xl, bound_xl->fops->fsyncdir,
2738
state->fd, state->flags, state->xdata);
2742
server4_fsyncdir_cbk(frame, NULL, frame->this, state->resolve.op_ret,
2743
state->resolve.op_errno, NULL);
2748
server4_readdir_resume(call_frame_t *frame, xlator_t *bound_xl)
2750
server_state_t *state = NULL;
2752
state = CALL_STATE(frame);
2754
if (state->resolve.op_ret != 0)
2757
GF_ASSERT(state->fd);
2759
STACK_WIND(frame, server4_readdir_cbk, bound_xl, bound_xl->fops->readdir,
2760
state->fd, state->size, state->offset, state->xdata);
2764
server4_readdir_cbk(frame, NULL, frame->this, state->resolve.op_ret,
2765
state->resolve.op_errno, NULL, NULL);
2770
server4_readdirp_resume(call_frame_t *frame, xlator_t *bound_xl)
2772
server_state_t *state = NULL;
2774
state = CALL_STATE(frame);
2776
if (state->resolve.op_ret != 0)
2779
STACK_WIND(frame, server4_readdirp_cbk, bound_xl, bound_xl->fops->readdirp,
2780
state->fd, state->size, state->offset, state->xdata);
2784
server4_readdirp_cbk(frame, NULL, frame->this, state->resolve.op_ret,
2785
state->resolve.op_errno, NULL, NULL);
2790
server4_opendir_resume(call_frame_t *frame, xlator_t *bound_xl)
2792
server_state_t *state = NULL;
2794
state = CALL_STATE(frame);
2796
if (state->resolve.op_ret != 0)
2799
state->fd = fd_create(state->loc.inode, frame->root->pid);
2801
gf_smsg("server", GF_LOG_ERROR, 0, PS_MSG_FD_CREATE_FAILED, NULL);
2805
STACK_WIND(frame, server4_opendir_cbk, bound_xl, bound_xl->fops->opendir,
2806
&state->loc, state->fd, state->xdata);
2809
server4_opendir_cbk(frame, NULL, frame->this, state->resolve.op_ret,
2810
state->resolve.op_errno, NULL, NULL);
2815
server4_statfs_resume(call_frame_t *frame, xlator_t *bound_xl)
2817
server_state_t *state = NULL;
2819
state = CALL_STATE(frame);
2821
if (state->resolve.op_ret != 0)
2824
STACK_WIND(frame, server4_statfs_cbk, bound_xl, bound_xl->fops->statfs,
2825
&state->loc, state->xdata);
2829
server4_statfs_cbk(frame, NULL, frame->this, state->resolve.op_ret,
2830
state->resolve.op_errno, NULL, NULL);
2835
server4_removexattr_resume(call_frame_t *frame, xlator_t *bound_xl)
2837
server_state_t *state = NULL;
2839
state = CALL_STATE(frame);
2841
if (state->resolve.op_ret != 0)
2844
if (dict_get_sizen(state->xdata, GF_NAMESPACE_KEY) ||
2845
!strncmp(GF_NAMESPACE_KEY, state->name, sizeof(GF_NAMESPACE_KEY))) {
2846
gf_msg(bound_xl->name, GF_LOG_ERROR, ENOTSUP, 0,
2847
"%s: removal of namespace is not allowed", state->loc.path);
2848
state->resolve.op_errno = ENOTSUP;
2849
state->resolve.op_ret = -1;
2853
STACK_WIND(frame, server4_removexattr_cbk, bound_xl,
2854
bound_xl->fops->removexattr, &state->loc, state->name,
2858
server4_removexattr_cbk(frame, NULL, frame->this, state->resolve.op_ret,
2859
state->resolve.op_errno, NULL);
2864
server4_fremovexattr_resume(call_frame_t *frame, xlator_t *bound_xl)
2866
server_state_t *state = NULL;
2868
state = CALL_STATE(frame);
2870
if (state->resolve.op_ret != 0)
2873
if (dict_get_sizen(state->xdata, GF_NAMESPACE_KEY) ||
2874
!strncmp(GF_NAMESPACE_KEY, state->name, sizeof(GF_NAMESPACE_KEY))) {
2875
gf_msg(bound_xl->name, GF_LOG_ERROR, ENOTSUP, 0,
2876
"%s: removal of namespace is not allowed",
2877
uuid_utoa(state->fd->inode->gfid));
2878
state->resolve.op_errno = ENOTSUP;
2879
state->resolve.op_ret = -1;
2882
STACK_WIND(frame, server4_fremovexattr_cbk, bound_xl,
2883
bound_xl->fops->fremovexattr, state->fd, state->name,
2887
server4_fremovexattr_cbk(frame, NULL, frame->this, state->resolve.op_ret,
2888
state->resolve.op_errno, NULL);
2893
server4_fgetxattr_resume(call_frame_t *frame, xlator_t *bound_xl)
2895
server_state_t *state = NULL;
2897
state = CALL_STATE(frame);
2899
if (state->resolve.op_ret != 0)
2902
STACK_WIND(frame, server4_fgetxattr_cbk, bound_xl,
2903
bound_xl->fops->fgetxattr, state->fd, state->name, state->xdata);
2906
server4_fgetxattr_cbk(frame, NULL, frame->this, state->resolve.op_ret,
2907
state->resolve.op_errno, NULL, NULL);
2912
server4_xattrop_resume(call_frame_t *frame, xlator_t *bound_xl)
2914
server_state_t *state = NULL;
2916
state = CALL_STATE(frame);
2918
if (state->resolve.op_ret != 0)
2921
STACK_WIND(frame, server4_xattrop_cbk, bound_xl, bound_xl->fops->xattrop,
2922
&state->loc, state->flags, state->dict, state->xdata);
2925
server4_xattrop_cbk(frame, NULL, frame->this, state->resolve.op_ret,
2926
state->resolve.op_errno, NULL, NULL);
2931
server4_fxattrop_resume(call_frame_t *frame, xlator_t *bound_xl)
2933
server_state_t *state = NULL;
2935
state = CALL_STATE(frame);
2937
if (state->resolve.op_ret != 0)
2940
STACK_WIND(frame, server4_fxattrop_cbk, bound_xl, bound_xl->fops->fxattrop,
2941
state->fd, state->flags, state->dict, state->xdata);
2944
server4_fxattrop_cbk(frame, NULL, frame->this, state->resolve.op_ret,
2945
state->resolve.op_errno, NULL, NULL);
2950
server4_fsetxattr_resume(call_frame_t *frame, xlator_t *bound_xl)
2952
server_state_t *state = NULL;
2954
state = CALL_STATE(frame);
2956
if (state->resolve.op_ret != 0)
2959
STACK_WIND(frame, server4_setxattr_cbk, bound_xl, bound_xl->fops->fsetxattr,
2960
state->fd, state->dict, state->flags, state->xdata);
2963
server4_fsetxattr_cbk(frame, NULL, frame->this, state->resolve.op_ret,
2964
state->resolve.op_errno, NULL);
2970
server4_unlink_resume(call_frame_t *frame, xlator_t *bound_xl)
2972
server_state_t *state = NULL;
2974
state = CALL_STATE(frame);
2976
if (state->resolve.op_ret != 0)
2979
STACK_WIND(frame, server4_unlink_cbk, bound_xl, bound_xl->fops->unlink,
2980
&state->loc, state->flags, state->xdata);
2983
server4_unlink_cbk(frame, NULL, frame->this, state->resolve.op_ret,
2984
state->resolve.op_errno, NULL, NULL, NULL);
2989
server4_truncate_resume(call_frame_t *frame, xlator_t *bound_xl)
2991
server_state_t *state = NULL;
2993
state = CALL_STATE(frame);
2995
if (state->resolve.op_ret != 0)
2998
STACK_WIND(frame, server4_truncate_cbk, bound_xl, bound_xl->fops->truncate,
2999
&state->loc, state->offset, state->xdata);
3002
server4_truncate_cbk(frame, NULL, frame->this, state->resolve.op_ret,
3003
state->resolve.op_errno, NULL, NULL, NULL);
3008
server4_fstat_resume(call_frame_t *frame, xlator_t *bound_xl)
3010
server_state_t *state = NULL;
3012
state = CALL_STATE(frame);
3014
if (state->resolve.op_ret != 0)
3017
STACK_WIND(frame, server4_fstat_cbk, bound_xl, bound_xl->fops->fstat,
3018
state->fd, state->xdata);
3021
server4_fstat_cbk(frame, NULL, frame->this, state->resolve.op_ret,
3022
state->resolve.op_errno, NULL, NULL);
3027
server4_setxattr_resume(call_frame_t *frame, xlator_t *bound_xl)
3029
server_state_t *state = NULL;
3031
state = CALL_STATE(frame);
3033
if (state->resolve.op_ret != 0)
3036
STACK_WIND(frame, server4_setxattr_cbk, bound_xl, bound_xl->fops->setxattr,
3037
&state->loc, state->dict, state->flags, state->xdata);
3040
server4_setxattr_cbk(frame, NULL, frame->this, state->resolve.op_ret,
3041
state->resolve.op_errno, NULL);
3047
server4_getxattr_resume(call_frame_t *frame, xlator_t *bound_xl)
3049
server_state_t *state = NULL;
3051
state = CALL_STATE(frame);
3053
if (state->resolve.op_ret != 0)
3056
STACK_WIND(frame, server4_getxattr_cbk, bound_xl, bound_xl->fops->getxattr,
3057
&state->loc, state->name, state->xdata);
3060
server4_getxattr_cbk(frame, NULL, frame->this, state->resolve.op_ret,
3061
state->resolve.op_errno, NULL, NULL);
3066
server4_ftruncate_resume(call_frame_t *frame, xlator_t *bound_xl)
3068
server_state_t *state = NULL;
3070
state = CALL_STATE(frame);
3072
if (state->resolve.op_ret != 0)
3075
STACK_WIND(frame, server4_ftruncate_cbk, bound_xl,
3076
bound_xl->fops->ftruncate, state->fd, state->offset,
3080
server4_ftruncate_cbk(frame, NULL, frame->this, state->resolve.op_ret,
3081
state->resolve.op_errno, NULL, NULL, NULL);
3087
server4_flush_resume(call_frame_t *frame, xlator_t *bound_xl)
3089
server_state_t *state = NULL;
3091
state = CALL_STATE(frame);
3093
if (state->resolve.op_ret != 0)
3096
STACK_WIND(frame, server4_flush_cbk, bound_xl, bound_xl->fops->flush,
3097
state->fd, state->xdata);
3100
server4_flush_cbk(frame, NULL, frame->this, state->resolve.op_ret,
3101
state->resolve.op_errno, NULL);
3107
server4_fsync_resume(call_frame_t *frame, xlator_t *bound_xl)
3109
server_state_t *state = NULL;
3111
state = CALL_STATE(frame);
3113
if (state->resolve.op_ret != 0)
3116
STACK_WIND(frame, server4_fsync_cbk, bound_xl, bound_xl->fops->fsync,
3117
state->fd, state->flags, state->xdata);
3120
server4_fsync_cbk(frame, NULL, frame->this, state->resolve.op_ret,
3121
state->resolve.op_errno, NULL, NULL, NULL);
3127
server4_writev_resume(call_frame_t *frame, xlator_t *bound_xl)
3129
server_state_t *state = NULL;
3131
state = CALL_STATE(frame);
3133
if (state->resolve.op_ret != 0)
3136
STACK_WIND(frame, server4_writev_cbk, bound_xl, bound_xl->fops->writev,
3137
state->fd, state->payload_vector, state->payload_count,
3138
state->offset, state->flags, state->iobref, state->xdata);
3142
server4_writev_cbk(frame, NULL, frame->this, state->resolve.op_ret,
3143
state->resolve.op_errno, NULL, NULL, NULL);
3148
server4_readv_resume(call_frame_t *frame, xlator_t *bound_xl)
3150
server_state_t *state = NULL;
3152
state = CALL_STATE(frame);
3154
if (state->resolve.op_ret != 0)
3157
STACK_WIND(frame, server4_readv_cbk, bound_xl, bound_xl->fops->readv,
3158
state->fd, state->size, state->offset, state->flags,
3163
server4_readv_cbk(frame, NULL, frame->this, state->resolve.op_ret,
3164
state->resolve.op_errno, NULL, 0, NULL, NULL, NULL);
3169
server4_create_resume(call_frame_t *frame, xlator_t *bound_xl)
3171
server_state_t *state = NULL;
3173
state = CALL_STATE(frame);
3175
if (state->resolve.op_ret != 0)
3178
state->loc.inode = inode_new(state->itable);
3180
state->fd = fd_create(state->loc.inode, frame->root->pid);
3182
gf_smsg("server", GF_LOG_ERROR, 0, PS_MSG_FD_CREATE_FAILED, "inode=%s",
3183
state->loc.inode ? uuid_utoa(state->loc.inode->gfid) : NULL,
3185
state->resolve.op_ret = -1;
3186
state->resolve.op_errno = ENOMEM;
3189
state->fd->flags = state->flags;
3191
STACK_WIND(frame, server4_create_cbk, bound_xl, bound_xl->fops->create,
3192
&(state->loc), state->flags, state->mode, state->umask,
3193
state->fd, state->xdata);
3197
server4_create_cbk(frame, NULL, frame->this, state->resolve.op_ret,
3198
state->resolve.op_errno, NULL, NULL, NULL, NULL, NULL,
3204
server4_open_resume(call_frame_t *frame, xlator_t *bound_xl)
3206
server_state_t *state = NULL;
3208
state = CALL_STATE(frame);
3210
if (state->resolve.op_ret != 0)
3213
state->fd = fd_create(state->loc.inode, frame->root->pid);
3214
state->fd->flags = state->flags;
3216
STACK_WIND(frame, server4_open_cbk, bound_xl, bound_xl->fops->open,
3217
&state->loc, state->flags, state->fd, state->xdata);
3221
server4_open_cbk(frame, NULL, frame->this, state->resolve.op_ret,
3222
state->resolve.op_errno, NULL, NULL);
3227
server4_readlink_resume(call_frame_t *frame, xlator_t *bound_xl)
3229
server_state_t *state = NULL;
3231
state = CALL_STATE(frame);
3233
if (state->resolve.op_ret != 0)
3236
STACK_WIND(frame, server4_readlink_cbk, bound_xl, bound_xl->fops->readlink,
3237
&state->loc, state->size, state->xdata);
3240
server4_readlink_cbk(frame, NULL, frame->this, state->resolve.op_ret,
3241
state->resolve.op_errno, NULL, NULL, NULL);
3246
server4_fsetattr_resume(call_frame_t *frame, xlator_t *bound_xl)
3248
server_state_t *state = NULL;
3250
state = CALL_STATE(frame);
3252
if (state->resolve.op_ret != 0)
3255
STACK_WIND(frame, server4_fsetattr_cbk, bound_xl, bound_xl->fops->fsetattr,
3256
state->fd, &state->stbuf, state->valid, state->xdata);
3259
server4_fsetattr_cbk(frame, NULL, frame->this, state->resolve.op_ret,
3260
state->resolve.op_errno, NULL, NULL, NULL);
3266
server4_setattr_resume(call_frame_t *frame, xlator_t *bound_xl)
3268
server_state_t *state = NULL;
3270
state = CALL_STATE(frame);
3272
if (state->resolve.op_ret != 0)
3275
STACK_WIND(frame, server4_setattr_cbk, bound_xl, bound_xl->fops->setattr,
3276
&state->loc, &state->stbuf, state->valid, state->xdata);
3279
server4_setattr_cbk(frame, NULL, frame->this, state->resolve.op_ret,
3280
state->resolve.op_errno, NULL, NULL, NULL);
3286
server4_stat_resume(call_frame_t *frame, xlator_t *bound_xl)
3288
server_state_t *state = NULL;
3290
state = CALL_STATE(frame);
3292
if (state->resolve.op_ret != 0)
3295
STACK_WIND(frame, server4_stat_cbk, bound_xl, bound_xl->fops->stat,
3296
&state->loc, state->xdata);
3299
server4_stat_cbk(frame, NULL, frame->this, state->resolve.op_ret,
3300
state->resolve.op_errno, NULL, NULL);
3305
server4_lookup_resume(call_frame_t *frame, xlator_t *bound_xl)
3307
server_state_t *state = NULL;
3308
dict_t *xdata = NULL;
3310
state = CALL_STATE(frame);
3312
if (state->resolve.op_ret != 0)
3315
xdata = state->xdata ? dict_ref(state->xdata) : dict_new();
3317
state->resolve.op_ret = -1;
3318
state->resolve.op_errno = ENOMEM;
3321
if (!state->loc.inode) {
3322
state->loc.inode = server_inode_new(state->itable, state->loc.gfid);
3323
int ret = dict_set_int32(xdata, GF_NAMESPACE_KEY, 1);
3325
gf_msg(THIS->name, GF_LOG_ERROR, ENOMEM, 0,
3326
"dict set (namespace) failed (path: %s), continuing",
3328
state->resolve.op_ret = -1;
3329
state->resolve.op_errno = ENOMEM;
3332
if (state->loc.path && (state->loc.path[0] == '<')) {
3333
/* This is a lookup on gfid : get full-path */
3334
/* TODO: handle gfid based lookup in a better way. Ref GH PR #1763
3336
ret = dict_set_int32(xdata, "get-full-path", 1);
3338
gf_msg(THIS->name, GF_LOG_INFO, ENOMEM, 0,
3339
"%s: dict set (full-path) failed, continuing",
3344
state->is_revalidate = 1;
3347
STACK_WIND(frame, server4_lookup_cbk, bound_xl, bound_xl->fops->lookup,
3348
&state->loc, xdata);
3354
server4_lookup_cbk(frame, NULL, frame->this, state->resolve.op_ret,
3355
state->resolve.op_errno, NULL, NULL, NULL, NULL);
3363
server4_fallocate_resume(call_frame_t *frame, xlator_t *bound_xl)
3365
server_state_t *state = NULL;
3367
state = CALL_STATE(frame);
3369
if (state->resolve.op_ret != 0)
3372
STACK_WIND(frame, server4_fallocate_cbk, bound_xl,
3373
bound_xl->fops->fallocate, state->fd, state->flags,
3374
state->offset, state->size, state->xdata);
3377
server4_fallocate_cbk(frame, NULL, frame->this, state->resolve.op_ret,
3378
state->resolve.op_errno, NULL, NULL, NULL);
3384
server4_discard_resume(call_frame_t *frame, xlator_t *bound_xl)
3386
server_state_t *state = NULL;
3388
state = CALL_STATE(frame);
3390
if (state->resolve.op_ret != 0)
3393
STACK_WIND(frame, server4_discard_cbk, bound_xl, bound_xl->fops->discard,
3394
state->fd, state->offset, state->size, state->xdata);
3397
server4_discard_cbk(frame, NULL, frame->this, state->resolve.op_ret,
3398
state->resolve.op_errno, NULL, NULL, NULL);
3404
server4_zerofill_resume(call_frame_t *frame, xlator_t *bound_xl)
3406
server_state_t *state = NULL;
3408
state = CALL_STATE(frame);
3410
if (state->resolve.op_ret != 0)
3413
STACK_WIND(frame, server4_zerofill_cbk, bound_xl, bound_xl->fops->zerofill,
3414
state->fd, state->offset, state->size, state->xdata);
3417
server4_zerofill_cbk(frame, NULL, frame->this, state->resolve.op_ret,
3418
state->resolve.op_errno, NULL, NULL, NULL);
3424
server4_seek_resume(call_frame_t *frame, xlator_t *bound_xl)
3426
server_state_t *state = NULL;
3428
state = CALL_STATE(frame);
3430
if (state->resolve.op_ret != 0)
3433
STACK_WIND(frame, server4_seek_cbk, bound_xl, bound_xl->fops->seek,
3434
state->fd, state->offset, state->what, state->xdata);
3437
server4_seek_cbk(frame, NULL, frame->this, state->resolve.op_ret,
3438
state->resolve.op_errno, 0, NULL);
3444
server4_getactivelk_cbk(call_frame_t *frame, void *cookie, xlator_t *this,
3445
int32_t op_ret, int32_t op_errno,
3446
lock_migration_info_t *locklist, dict_t *xdata)
3448
gfx_getactivelk_rsp rsp = {
3451
server_state_t *state = NULL;
3452
rpcsvc_request_t *req = NULL;
3455
state = CALL_STATE(frame);
3457
dict_to_xdr(xdata, &rsp.xdata);
3460
state = CALL_STATE(frame);
3462
gf_smsg(this->name, GF_LOG_INFO, op_errno, PS_MSG_GETACTIVELK_INFO,
3463
"frame=%" PRId64, frame->root->unique, "path=%s",
3464
state->loc.path, "gfid=%s", uuid_utoa(state->resolve.gfid),
3465
"client=%s", STACK_CLIENT_NAME(frame->root), "error-xlator=%s",
3466
STACK_ERR_XL_NAME(frame->root), NULL);
3471
/* (op_ret == 0) means there are no locks on the file*/
3473
ret = serialize_rsp_locklist_v2(locklist, &rsp);
3482
rsp.op_ret = op_ret;
3483
rsp.op_errno = gf_errno_to_error(op_errno);
3487
server_submit_reply(frame, req, &rsp, NULL, 0, NULL,
3488
(xdrproc_t)xdr_gfx_getactivelk_rsp);
3490
GF_FREE(rsp.xdata.pairs.pairs_val);
3492
getactivelkinfo_rsp_cleanup_v2(&rsp);
3498
server4_getactivelk_resume(call_frame_t *frame, xlator_t *bound_xl)
3500
server_state_t *state = NULL;
3502
state = CALL_STATE(frame);
3504
if (state->resolve.op_ret != 0)
3507
STACK_WIND(frame, server4_getactivelk_cbk, bound_xl,
3508
bound_xl->fops->getactivelk, &state->loc, state->xdata);
3511
server4_getactivelk_cbk(frame, NULL, frame->this, state->resolve.op_ret,
3512
state->resolve.op_errno, NULL, NULL);
3517
server4_setactivelk_resume(call_frame_t *frame, xlator_t *bound_xl)
3519
server_state_t *state = NULL;
3521
state = CALL_STATE(frame);
3523
if (state->resolve.op_ret != 0)
3526
STACK_WIND(frame, server4_setactivelk_cbk, bound_xl,
3527
bound_xl->fops->setactivelk, &state->loc, &state->locklist,
3531
server4_setactivelk_cbk(frame, NULL, frame->this, state->resolve.op_ret,
3532
state->resolve.op_errno, NULL);
3536
server4_namelink_resume(call_frame_t *frame, xlator_t *bound_xl)
3538
server_state_t *state = NULL;
3540
state = CALL_STATE(frame);
3542
if (state->resolve.op_ret != 0)
3545
state->loc.inode = inode_new(state->itable);
3547
STACK_WIND(frame, server4_namelink_cbk, bound_xl, bound_xl->fops->namelink,
3548
&(state->loc), state->xdata);
3552
server4_namelink_cbk(frame, NULL, frame->this, state->resolve.op_ret,
3553
state->resolve.op_errno, NULL, NULL, NULL);
3558
server4_icreate_resume(call_frame_t *frame, xlator_t *bound_xl)
3560
server_state_t *state = NULL;
3562
state = CALL_STATE(frame);
3564
if (state->resolve.op_ret != 0)
3567
state->loc.inode = inode_new(state->itable);
3569
STACK_WIND(frame, server4_icreate_cbk, bound_xl, bound_xl->fops->icreate,
3570
&(state->loc), state->mode, state->xdata);
3574
server4_icreate_cbk(frame, NULL, frame->this, state->resolve.op_ret,
3575
state->resolve.op_errno, NULL, NULL, NULL);
3580
server4_copy_file_range_resume(call_frame_t *frame, xlator_t *bound_xl)
3582
server_state_t *state = NULL;
3584
state = CALL_STATE(frame);
3586
if (state->resolve.op_ret != 0)
3589
STACK_WIND(frame, server4_copy_file_range_cbk, bound_xl,
3590
bound_xl->fops->copy_file_range, state->fd, state->off_in,
3591
state->fd_out, state->off_out, state->size, state->flags,
3596
server4_copy_file_range_cbk(frame, NULL, frame->this, state->resolve.op_ret,
3597
state->resolve.op_errno, NULL, NULL, NULL,
3603
server4_0_stat(rpcsvc_request_t *req)
3605
server_state_t *state = NULL;
3606
call_frame_t *frame = NULL;
3607
gfx_stat_req args = {
3617
/* Initialize args first, then decode */
3618
ret = rpc_receive_common(req, &frame, &state, NULL, &args, xdr_gfx_stat_req,
3624
state->resolve.type = RESOLVE_MUST;
3625
set_resolve_gfid(frame->root->client, state->resolve.gfid, args.gfid);
3627
if (xdr_to_dict(&args.xdata, &state->xdata)) {
3628
SERVER_REQ_SET_ERROR(req, ret);
3633
resolve_and_resume(frame, server4_stat_resume);
3641
server4_0_setattr(rpcsvc_request_t *req)
3643
server_state_t *state = NULL;
3644
call_frame_t *frame = NULL;
3645
gfx_setattr_req args = {
3655
ret = rpc_receive_common(req, &frame, &state, NULL, &args,
3656
xdr_gfx_setattr_req, GF_FOP_SETATTR);
3661
state->resolve.type = RESOLVE_MUST;
3662
set_resolve_gfid(frame->root->client, state->resolve.gfid, args.gfid);
3664
gfx_stat_to_iattx(&args.stbuf, &state->stbuf);
3665
state->valid = args.valid;
3667
if (xdr_to_dict(&args.xdata, &state->xdata)) {
3668
SERVER_REQ_SET_ERROR(req, ret);
3673
resolve_and_resume(frame, server4_setattr_resume);
3681
server4_0_fallocate(rpcsvc_request_t *req)
3683
server_state_t *state = NULL;
3684
call_frame_t *frame = NULL;
3685
gfx_fallocate_req args = {
3693
ret = rpc_receive_common(req, &frame, &state, NULL, &args,
3694
xdr_gfx_fallocate_req, GF_FOP_FALLOCATE);
3699
state->resolve.type = RESOLVE_MUST;
3700
state->resolve.fd_no = args.fd;
3702
state->flags = args.flags;
3703
state->offset = args.offset;
3704
state->size = args.size;
3705
memcpy(state->resolve.gfid, args.gfid, 16);
3707
if (xdr_to_dict(&args.xdata, &state->xdata)) {
3708
SERVER_REQ_SET_ERROR(req, ret);
3713
resolve_and_resume(frame, server4_fallocate_resume);
3721
server4_0_discard(rpcsvc_request_t *req)
3723
server_state_t *state = NULL;
3724
call_frame_t *frame = NULL;
3725
gfx_discard_req args = {
3733
ret = rpc_receive_common(req, &frame, &state, NULL, &args,
3734
xdr_gfx_discard_req, GF_FOP_DISCARD);
3739
state->resolve.type = RESOLVE_MUST;
3740
state->resolve.fd_no = args.fd;
3742
state->offset = args.offset;
3743
state->size = args.size;
3744
memcpy(state->resolve.gfid, args.gfid, 16);
3746
if (xdr_to_dict(&args.xdata, &state->xdata)) {
3747
SERVER_REQ_SET_ERROR(req, ret);
3752
resolve_and_resume(frame, server4_discard_resume);
3760
server4_0_zerofill(rpcsvc_request_t *req)
3762
server_state_t *state = NULL;
3763
call_frame_t *frame = NULL;
3764
gfx_zerofill_req args = {
3773
ret = rpc_receive_common(req, &frame, &state, NULL, &args,
3774
xdr_gfx_zerofill_req, GF_FOP_ZEROFILL);
3780
state->resolve.type = RESOLVE_MUST;
3781
state->resolve.fd_no = args.fd;
3783
state->offset = args.offset;
3784
state->size = args.size;
3785
memcpy(state->resolve.gfid, args.gfid, 16);
3787
if (xdr_to_dict(&args.xdata, &state->xdata)) {
3788
SERVER_REQ_SET_ERROR(req, ret);
3792
resolve_and_resume(frame, server4_zerofill_resume);
3796
req->rpc_err = GARBAGE_ARGS;
3802
server4_0_ipc(rpcsvc_request_t *req)
3804
server_state_t *state = NULL;
3805
call_frame_t *frame = NULL;
3806
gfx_ipc_req args = {
3810
xlator_t *bound_xl = NULL;
3815
ret = rpc_receive_common(req, &frame, &state, NULL, &args, xdr_gfx_ipc_req,
3821
bound_xl = frame->root->client->bound_xl;
3822
if (xdr_to_dict(&args.xdata, &state->xdata)) {
3823
SERVER_REQ_SET_ERROR(req, ret);
3827
STACK_WIND(frame, server4_ipc_cbk, bound_xl, bound_xl->fops->ipc, args.op,
3836
server4_0_seek(rpcsvc_request_t *req)
3838
server_state_t *state = NULL;
3839
call_frame_t *frame = NULL;
3840
gfx_seek_req args = {
3850
ret = rpc_receive_common(req, &frame, &state, NULL, &args, xdr_gfx_seek_req,
3856
state->resolve.type = RESOLVE_MUST;
3857
state->resolve.fd_no = args.fd;
3859
state->offset = args.offset;
3860
state->what = args.what;
3861
memcpy(state->resolve.gfid, args.gfid, 16);
3863
if (xdr_to_dict(&args.xdata, &state->xdata)) {
3864
SERVER_REQ_SET_ERROR(req, ret);
3869
resolve_and_resume(frame, server4_seek_resume);
3876
server4_0_readlink(rpcsvc_request_t *req)
3878
server_state_t *state = NULL;
3879
call_frame_t *frame = NULL;
3880
gfx_readlink_req args = {
3890
ret = rpc_receive_common(req, &frame, &state, NULL, &args,
3891
xdr_gfx_readlink_req, GF_FOP_READLINK);
3896
state->resolve.type = RESOLVE_MUST;
3897
memcpy(state->resolve.gfid, args.gfid, 16);
3899
state->size = args.size;
3901
if (xdr_to_dict(&args.xdata, &state->xdata)) {
3902
SERVER_REQ_SET_ERROR(req, ret);
3907
resolve_and_resume(frame, server4_readlink_resume);
3915
server4_0_create(rpcsvc_request_t *req)
3917
server_state_t *state = NULL;
3918
call_frame_t *frame = NULL;
3919
gfx_create_req args = {
3929
ret = rpc_receive_common(req, &frame, &state, NULL, &args,
3930
xdr_gfx_create_req, GF_FOP_CREATE);
3935
state->resolve.bname = gf_strdup(args.bname);
3936
state->mode = args.mode;
3937
state->umask = args.umask;
3938
state->flags = gf_flags_to_flags(args.flags);
3940
set_resolve_gfid(frame->root->client, state->resolve.pargfid, args.pargfid);
3942
if (state->flags & O_EXCL) {
3943
state->resolve.type = RESOLVE_NOT;
3945
state->resolve.type = RESOLVE_DONTCARE;
3948
if (xdr_to_dict(&args.xdata, &state->xdata)) {
3949
SERVER_REQ_SET_ERROR(req, ret);
3954
resolve_and_resume(frame, server4_create_resume);
3963
server4_0_open(rpcsvc_request_t *req)
3965
server_state_t *state = NULL;
3966
call_frame_t *frame = NULL;
3967
gfx_open_req args = {
3977
ret = rpc_receive_common(req, &frame, &state, NULL, &args, xdr_gfx_open_req,
3983
state->resolve.type = RESOLVE_MUST;
3984
memcpy(state->resolve.gfid, args.gfid, 16);
3986
state->flags = gf_flags_to_flags(args.flags);
3988
if (xdr_to_dict(&args.xdata, &state->xdata)) {
3989
SERVER_REQ_SET_ERROR(req, ret);
3994
resolve_and_resume(frame, server4_open_resume);
4000
server4_0_readv(rpcsvc_request_t *req)
4002
server_state_t *state = NULL;
4003
call_frame_t *frame = NULL;
4004
gfx_read_req args = {
4014
ret = rpc_receive_common(req, &frame, &state, NULL, &args, xdr_gfx_read_req,
4020
state->resolve.type = RESOLVE_MUST;
4021
state->resolve.fd_no = args.fd;
4022
state->size = args.size;
4023
state->offset = args.offset;
4024
state->flags = args.flag;
4026
memcpy(state->resolve.gfid, args.gfid, 16);
4028
if (xdr_to_dict(&args.xdata, &state->xdata)) {
4029
SERVER_REQ_SET_ERROR(req, ret);
4034
resolve_and_resume(frame, server4_readv_resume);
4040
server4_0_writev(rpcsvc_request_t *req)
4042
server_state_t *state = NULL;
4043
call_frame_t *frame = NULL;
4044
gfx_write_req args = {
4056
ret = rpc_receive_common(req, &frame, &state, &len, &args,
4057
xdr_gfx_write_req, GF_FOP_WRITE);
4062
state->resolve.type = RESOLVE_MUST;
4063
state->resolve.fd_no = args.fd;
4064
state->offset = args.offset;
4065
state->size = args.size;
4066
state->flags = args.flag;
4067
state->iobref = iobref_ref(req->iobref);
4068
memcpy(state->resolve.gfid, args.gfid, 16);
4070
if (len < req->msg[0].iov_len) {
4071
state->payload_vector[0].iov_base = (req->msg[0].iov_base + len);
4072
state->payload_vector[0].iov_len = req->msg[0].iov_len - len;
4073
state->payload_count = 1;
4076
for (i = 1; i < req->count; i++) {
4077
state->payload_vector[state->payload_count++] = req->msg[i];
4080
len = iov_length(state->payload_vector, state->payload_count);
4082
GF_ASSERT(state->size == len);
4084
if (xdr_to_dict(&args.xdata, &state->xdata)) {
4085
SERVER_REQ_SET_ERROR(req, ret);
4089
#ifdef GF_TESTING_IO_XDATA
4090
dict_dump_to_log(state->xdata);
4094
resolve_and_resume(frame, server4_writev_resume);
4100
#define SERVER4_0_VECWRITE_START 0
4101
#define SERVER4_0_VECWRITE_READING_HDR 1
4102
#define SERVER4_0_VECWRITE_READING_OPAQUE 2
4105
server4_0_writev_vecsizer(int state, ssize_t *readsize, char *base_addr,
4110
gfx_write_req write_req = {
4118
case SERVER4_0_VECWRITE_START:
4119
size = xdr_sizeof((xdrproc_t)xdr_gfx_write_req, &write_req);
4122
nextstate = SERVER4_0_VECWRITE_READING_HDR;
4124
case SERVER4_0_VECWRITE_READING_HDR:
4125
size = xdr_sizeof((xdrproc_t)xdr_gfx_write_req, &write_req);
4127
xdrmem_create(&xdr, base_addr, size, XDR_DECODE);
4129
/* This will fail if there is xdata sent from client, if not,
4131
xdr_gfx_write_req(&xdr, &write_req);
4133
/* need to round off to proper roof (%4), as XDR packing pads
4134
the end of opaque object with '0' */
4135
size = gf_roof(write_req.xdata.xdr_size, 4);
4140
nextstate = SERVER4_0_VECWRITE_START;
4142
nextstate = SERVER4_0_VECWRITE_READING_OPAQUE;
4144
free(write_req.xdata.pairs.pairs_val);
4148
case SERVER4_0_VECWRITE_READING_OPAQUE:
4150
nextstate = SERVER4_0_VECWRITE_START;
4158
server4_0_release(rpcsvc_request_t *req)
4160
client_t *client = NULL;
4161
server_ctx_t *serv_ctx = NULL;
4162
gfx_release_req args = {
4167
gfx_common_rsp rsp = {
4172
ret = xdr_to_generic(req->msg[0], &args, (xdrproc_t)xdr_gfx_release_req);
4174
SERVER_REQ_SET_ERROR(req, ret);
4178
client = req->trans->xl_private;
4180
/* Handshake is not complete yet. */
4181
req->rpc_err = SYSTEM_ERR;
4185
serv_ctx = server_ctx_get(client, client->this);
4186
if (serv_ctx == NULL) {
4187
gf_smsg(req->trans->name, GF_LOG_INFO, 0, PS_MSG_SERVER_CTX_GET_FAILED,
4189
req->rpc_err = SYSTEM_ERR;
4193
gf_fd_put(serv_ctx->fdtable, args.fd);
4195
server_submit_reply(NULL, req, &rsp, NULL, 0, NULL,
4196
(xdrproc_t)xdr_gfx_common_rsp);
4204
server4_0_releasedir(rpcsvc_request_t *req)
4206
client_t *client = NULL;
4207
server_ctx_t *serv_ctx = NULL;
4208
gfx_releasedir_req args = {
4213
gfx_common_rsp rsp = {
4218
ret = xdr_to_generic(req->msg[0], &args, (xdrproc_t)xdr_gfx_release_req);
4220
SERVER_REQ_SET_ERROR(req, ret);
4224
client = req->trans->xl_private;
4226
SERVER_REQ_SET_ERROR(req, ret);
4230
serv_ctx = server_ctx_get(client, client->this);
4231
if (serv_ctx == NULL) {
4232
gf_smsg(req->trans->name, GF_LOG_INFO, 0, PS_MSG_SERVER_CTX_GET_FAILED,
4234
req->rpc_err = SYSTEM_ERR;
4238
gf_fd_put(serv_ctx->fdtable, args.fd);
4240
server_submit_reply(NULL, req, &rsp, NULL, 0, NULL,
4241
(xdrproc_t)xdr_gfx_common_rsp);
4249
server4_0_fsync(rpcsvc_request_t *req)
4251
server_state_t *state = NULL;
4252
call_frame_t *frame = NULL;
4253
gfx_fsync_req args = {
4263
ret = rpc_receive_common(req, &frame, &state, NULL, &args,
4264
xdr_gfx_fsync_req, GF_FOP_FSYNC);
4269
state->resolve.type = RESOLVE_MUST;
4270
state->resolve.fd_no = args.fd;
4271
state->flags = args.data;
4272
memcpy(state->resolve.gfid, args.gfid, 16);
4274
if (xdr_to_dict(&args.xdata, &state->xdata)) {
4275
SERVER_REQ_SET_ERROR(req, ret);
4280
resolve_and_resume(frame, server4_fsync_resume);
4287
server4_0_flush(rpcsvc_request_t *req)
4289
server_state_t *state = NULL;
4290
call_frame_t *frame = NULL;
4291
gfx_flush_req args = {
4301
ret = rpc_receive_common(req, &frame, &state, NULL, &args,
4302
xdr_gfx_flush_req, GF_FOP_FLUSH);
4307
state->resolve.type = RESOLVE_MUST;
4308
state->resolve.fd_no = args.fd;
4309
memcpy(state->resolve.gfid, args.gfid, 16);
4311
if (xdr_to_dict(&args.xdata, &state->xdata)) {
4312
SERVER_REQ_SET_ERROR(req, ret);
4317
resolve_and_resume(frame, server4_flush_resume);
4324
server4_0_ftruncate(rpcsvc_request_t *req)
4326
server_state_t *state = NULL;
4327
call_frame_t *frame = NULL;
4328
gfx_ftruncate_req args = {
4338
ret = rpc_receive_common(req, &frame, &state, NULL, &args,
4339
xdr_gfx_ftruncate_req, GF_FOP_FTRUNCATE);
4344
state->resolve.type = RESOLVE_MUST;
4345
state->resolve.fd_no = args.fd;
4346
state->offset = args.offset;
4347
memcpy(state->resolve.gfid, args.gfid, 16);
4349
if (xdr_to_dict(&args.xdata, &state->xdata)) {
4350
SERVER_REQ_SET_ERROR(req, ret);
4355
resolve_and_resume(frame, server4_ftruncate_resume);
4362
server4_0_fstat(rpcsvc_request_t *req)
4364
server_state_t *state = NULL;
4365
call_frame_t *frame = NULL;
4366
gfx_fstat_req args = {
4376
ret = rpc_receive_common(req, &frame, &state, NULL, &args,
4377
xdr_gfx_fstat_req, GF_FOP_FSTAT);
4382
state->resolve.type = RESOLVE_MUST;
4383
state->resolve.fd_no = args.fd;
4384
set_resolve_gfid(frame->root->client, state->resolve.gfid, args.gfid);
4386
if (xdr_to_dict(&args.xdata, &state->xdata)) {
4387
SERVER_REQ_SET_ERROR(req, ret);
4392
resolve_and_resume(frame, server4_fstat_resume);
4399
server4_0_truncate(rpcsvc_request_t *req)
4401
server_state_t *state = NULL;
4402
call_frame_t *frame = NULL;
4403
gfx_truncate_req args = {
4413
ret = rpc_receive_common(req, &frame, &state, NULL, &args,
4414
xdr_gfx_truncate_req, GF_FOP_TRUNCATE);
4419
state->resolve.type = RESOLVE_MUST;
4420
memcpy(state->resolve.gfid, args.gfid, 16);
4421
state->offset = args.offset;
4423
if (xdr_to_dict(&args.xdata, &state->xdata)) {
4424
SERVER_REQ_SET_ERROR(req, ret);
4429
resolve_and_resume(frame, server4_truncate_resume);
4436
server4_0_unlink(rpcsvc_request_t *req)
4438
server_state_t *state = NULL;
4439
call_frame_t *frame = NULL;
4440
gfx_unlink_req args = {
4450
ret = rpc_receive_common(req, &frame, &state, NULL, &args,
4451
xdr_gfx_unlink_req, GF_FOP_UNLINK);
4456
state->resolve.type = RESOLVE_MUST;
4457
state->resolve.bname = gf_strdup(args.bname);
4459
set_resolve_gfid(frame->root->client, state->resolve.pargfid, args.pargfid);
4461
state->flags = args.xflags;
4463
if (xdr_to_dict(&args.xdata, &state->xdata)) {
4464
SERVER_REQ_SET_ERROR(req, ret);
4469
resolve_and_resume(frame, server4_unlink_resume);
4477
server4_0_setxattr(rpcsvc_request_t *req)
4479
server_state_t *state = NULL;
4480
call_frame_t *frame = NULL;
4481
gfx_setxattr_req args = {
4491
ret = rpc_receive_common(req, &frame, &state, NULL, &args,
4492
xdr_gfx_setxattr_req, GF_FOP_SETXATTR);
4497
state->resolve.type = RESOLVE_MUST;
4498
state->flags = args.flags;
4499
set_resolve_gfid(frame->root->client, state->resolve.gfid, args.gfid);
4501
if (xdr_to_dict(&args.dict, &state->dict)) {
4502
SERVER_REQ_SET_ERROR(req, ret);
4506
/* There can be some commands hidden in key, check and proceed */
4507
gf_server_check_setxattr_cmd(frame, state->dict);
4509
if (xdr_to_dict(&args.xdata, &state->xdata)) {
4510
SERVER_REQ_SET_ERROR(req, ret);
4514
/* Let the namespace setting can happen only from special mounts, this
4515
should prevent all mounts creating fake namespace. */
4516
if ((frame->root->pid >= 0) &&
4517
dict_get_sizen(state->dict, GF_NAMESPACE_KEY)) {
4518
gf_smsg("server", GF_LOG_ERROR, 0, PS_MSG_SETXATTR_INFO, "path=%s",
4519
state->loc.path, "key=%s", GF_NAMESPACE_KEY, NULL);
4520
SERVER_REQ_SET_ERROR(req, ret);
4525
resolve_and_resume(frame, server4_setxattr_resume);
4532
server4_0_fsetxattr(rpcsvc_request_t *req)
4534
server_state_t *state = NULL;
4535
call_frame_t *frame = NULL;
4536
gfx_fsetxattr_req args = {
4546
ret = rpc_receive_common(req, &frame, &state, NULL, &args,
4547
xdr_gfx_fsetxattr_req, GF_FOP_FSETXATTR);
4552
state->resolve.type = RESOLVE_MUST;
4553
state->resolve.fd_no = args.fd;
4554
state->flags = args.flags;
4555
set_resolve_gfid(frame->root->client, state->resolve.gfid, args.gfid);
4557
if (xdr_to_dict(&args.dict, &state->dict)) {
4558
SERVER_REQ_SET_ERROR(req, ret);
4562
if (xdr_to_dict(&args.xdata, &state->xdata)) {
4563
SERVER_REQ_SET_ERROR(req, ret);
4568
resolve_and_resume(frame, server4_fsetxattr_resume);
4575
server4_0_fxattrop(rpcsvc_request_t *req)
4577
server_state_t *state = NULL;
4578
call_frame_t *frame = NULL;
4579
gfx_fxattrop_req args = {
4589
ret = rpc_receive_common(req, &frame, &state, NULL, &args,
4590
xdr_gfx_fxattrop_req, GF_FOP_FXATTROP);
4595
state->resolve.type = RESOLVE_MUST;
4596
state->resolve.fd_no = args.fd;
4597
state->flags = args.flags;
4598
set_resolve_gfid(frame->root->client, state->resolve.gfid, args.gfid);
4600
if (xdr_to_dict(&args.dict, &state->dict)) {
4601
SERVER_REQ_SET_ERROR(req, ret);
4605
if (xdr_to_dict(&args.xdata, &state->xdata)) {
4606
SERVER_REQ_SET_ERROR(req, ret);
4611
resolve_and_resume(frame, server4_fxattrop_resume);
4618
server4_0_xattrop(rpcsvc_request_t *req)
4620
server_state_t *state = NULL;
4621
call_frame_t *frame = NULL;
4622
gfx_xattrop_req args = {
4632
ret = rpc_receive_common(req, &frame, &state, NULL, &args,
4633
xdr_gfx_xattrop_req, GF_FOP_XATTROP);
4638
state->resolve.type = RESOLVE_MUST;
4639
state->flags = args.flags;
4640
set_resolve_gfid(frame->root->client, state->resolve.gfid, args.gfid);
4642
if (xdr_to_dict(&args.dict, &state->dict)) {
4643
SERVER_REQ_SET_ERROR(req, ret);
4647
if (xdr_to_dict(&args.xdata, &state->xdata)) {
4648
SERVER_REQ_SET_ERROR(req, ret);
4653
resolve_and_resume(frame, server4_xattrop_resume);
4660
server4_0_getxattr(rpcsvc_request_t *req)
4662
server_state_t *state = NULL;
4663
call_frame_t *frame = NULL;
4664
gfx_getxattr_req args = {
4674
ret = rpc_receive_common(req, &frame, &state, NULL, &args,
4675
xdr_gfx_getxattr_req, GF_FOP_GETXATTR);
4680
state->resolve.type = RESOLVE_MUST;
4681
set_resolve_gfid(frame->root->client, state->resolve.gfid, args.gfid);
4684
state->name = gf_strdup(args.name);
4685
/* There can be some commands hidden in key, check and proceed */
4686
gf_server_check_getxattr_cmd(frame, state->name);
4689
if (xdr_to_dict(&args.xdata, &state->xdata)) {
4690
SERVER_REQ_SET_ERROR(req, ret);
4695
resolve_and_resume(frame, server4_getxattr_resume);
4703
server4_0_fgetxattr(rpcsvc_request_t *req)
4705
server_state_t *state = NULL;
4706
call_frame_t *frame = NULL;
4707
gfx_fgetxattr_req args = {
4717
ret = rpc_receive_common(req, &frame, &state, NULL, &args,
4718
xdr_gfx_fgetxattr_req, GF_FOP_FGETXATTR);
4723
state->resolve.type = RESOLVE_MUST;
4724
state->resolve.fd_no = args.fd;
4725
set_resolve_gfid(frame->root->client, state->resolve.gfid, args.gfid);
4727
state->name = gf_strdup(args.name);
4729
if (xdr_to_dict(&args.xdata, &state->xdata)) {
4730
SERVER_REQ_SET_ERROR(req, ret);
4735
resolve_and_resume(frame, server4_fgetxattr_resume);
4743
server4_0_removexattr(rpcsvc_request_t *req)
4745
server_state_t *state = NULL;
4746
call_frame_t *frame = NULL;
4747
gfx_removexattr_req args = {
4757
ret = rpc_receive_common(req, &frame, &state, NULL, &args,
4758
xdr_gfx_removexattr_req, GF_FOP_REMOVEXATTR);
4763
state->resolve.type = RESOLVE_MUST;
4764
set_resolve_gfid(frame->root->client, state->resolve.gfid, args.gfid);
4765
state->name = gf_strdup(args.name);
4767
if (xdr_to_dict(&args.xdata, &state->xdata)) {
4768
SERVER_REQ_SET_ERROR(req, ret);
4773
resolve_and_resume(frame, server4_removexattr_resume);
4781
server4_0_fremovexattr(rpcsvc_request_t *req)
4783
server_state_t *state = NULL;
4784
call_frame_t *frame = NULL;
4785
gfx_fremovexattr_req args = {
4795
ret = rpc_receive_common(req, &frame, &state, NULL, &args,
4796
xdr_gfx_fremovexattr_req, GF_FOP_FREMOVEXATTR);
4801
state->resolve.type = RESOLVE_MUST;
4802
state->resolve.fd_no = args.fd;
4803
set_resolve_gfid(frame->root->client, state->resolve.gfid, args.gfid);
4804
state->name = gf_strdup(args.name);
4806
if (xdr_to_dict(&args.xdata, &state->xdata)) {
4807
SERVER_REQ_SET_ERROR(req, ret);
4812
resolve_and_resume(frame, server4_fremovexattr_resume);
4820
server4_0_opendir(rpcsvc_request_t *req)
4822
server_state_t *state = NULL;
4823
call_frame_t *frame = NULL;
4824
gfx_opendir_req args = {
4834
ret = rpc_receive_common(req, &frame, &state, NULL, &args,
4835
xdr_gfx_opendir_req, GF_FOP_OPENDIR);
4840
state->resolve.type = RESOLVE_MUST;
4841
set_resolve_gfid(frame->root->client, state->resolve.gfid, args.gfid);
4843
if (xdr_to_dict(&args.xdata, &state->xdata)) {
4844
SERVER_REQ_SET_ERROR(req, ret);
4849
resolve_and_resume(frame, server4_opendir_resume);
4856
server4_0_readdirp(rpcsvc_request_t *req)
4858
server_state_t *state = NULL;
4859
call_frame_t *frame = NULL;
4860
gfx_readdirp_req args = {
4865
size_t headers_size = 0;
4871
ret = rpc_receive_common(req, &frame, &state, NULL, &args,
4872
xdr_gfx_readdirp_req, GF_FOP_READDIRP);
4877
/* FIXME: this should go away when variable sized iobufs are introduced
4878
* and transport layer can send msgs bigger than current page-size.
4880
headers_size = sizeof(struct rpc_msg) + sizeof(gfx_readdir_rsp);
4881
if ((frame->this->ctx->page_size < args.size) ||
4882
((frame->this->ctx->page_size - args.size) < headers_size)) {
4883
state->size = frame->this->ctx->page_size - headers_size;
4885
state->size = args.size;
4888
state->resolve.type = RESOLVE_MUST;
4889
state->resolve.fd_no = args.fd;
4890
state->offset = args.offset;
4891
set_resolve_gfid(frame->root->client, state->resolve.gfid, args.gfid);
4893
/* here, dict itself works as xdata */
4894
if (xdr_to_dict(&args.xdata, &state->xdata)) {
4895
SERVER_REQ_SET_ERROR(req, ret);
4900
resolve_and_resume(frame, server4_readdirp_resume);
4906
server4_0_readdir(rpcsvc_request_t *req)
4908
server_state_t *state = NULL;
4909
call_frame_t *frame = NULL;
4910
gfx_readdir_req args = {
4915
size_t headers_size = 0;
4921
ret = rpc_receive_common(req, &frame, &state, NULL, &args,
4922
xdr_gfx_readdir_req, GF_FOP_READDIR);
4927
/* FIXME: this should go away when variable sized iobufs are introduced
4928
* and transport layer can send msgs bigger than current page-size.
4930
headers_size = sizeof(struct rpc_msg) + sizeof(gfx_readdir_rsp);
4931
if ((frame->this->ctx->page_size < args.size) ||
4932
((frame->this->ctx->page_size - args.size) < headers_size)) {
4933
state->size = frame->this->ctx->page_size - headers_size;
4935
state->size = args.size;
4938
state->resolve.type = RESOLVE_MUST;
4939
state->resolve.fd_no = args.fd;
4940
state->offset = args.offset;
4941
set_resolve_gfid(frame->root->client, state->resolve.gfid, args.gfid);
4943
if (xdr_to_dict(&args.xdata, &state->xdata)) {
4944
SERVER_REQ_SET_ERROR(req, ret);
4949
resolve_and_resume(frame, server4_readdir_resume);
4956
server4_0_fsyncdir(rpcsvc_request_t *req)
4958
server_state_t *state = NULL;
4959
call_frame_t *frame = NULL;
4960
gfx_fsyncdir_req args = {
4970
ret = rpc_receive_common(req, &frame, &state, NULL, &args,
4971
xdr_gfx_fsyncdir_req, GF_FOP_FSYNCDIR);
4976
state->resolve.type = RESOLVE_MUST;
4977
state->resolve.fd_no = args.fd;
4978
state->flags = args.data;
4979
set_resolve_gfid(frame->root->client, state->resolve.gfid, args.gfid);
4981
if (xdr_to_dict(&args.xdata, &state->xdata)) {
4982
SERVER_REQ_SET_ERROR(req, ret);
4987
resolve_and_resume(frame, server4_fsyncdir_resume);
4994
server4_0_mknod(rpcsvc_request_t *req)
4996
server_state_t *state = NULL;
4997
call_frame_t *frame = NULL;
4998
gfx_mknod_req args = {
5008
ret = rpc_receive_common(req, &frame, &state, NULL, &args,
5009
xdr_gfx_mknod_req, GF_FOP_MKNOD);
5014
state->resolve.type = RESOLVE_NOT;
5015
set_resolve_gfid(frame->root->client, state->resolve.pargfid, args.pargfid);
5017
state->resolve.bname = gf_strdup(args.bname);
5019
state->mode = args.mode;
5020
state->dev = args.dev;
5021
state->umask = args.umask;
5023
if (xdr_to_dict(&args.xdata, &state->xdata)) {
5024
SERVER_REQ_SET_ERROR(req, ret);
5029
resolve_and_resume(frame, server4_mknod_resume);
5038
server4_0_mkdir(rpcsvc_request_t *req)
5040
server_state_t *state = NULL;
5041
call_frame_t *frame = NULL;
5042
gfx_mkdir_req args = {
5052
ret = rpc_receive_common(req, &frame, &state, NULL, &args,
5053
xdr_gfx_mkdir_req, GF_FOP_MKDIR);
5058
state->resolve.type = RESOLVE_NOT;
5059
set_resolve_gfid(frame->root->client, state->resolve.pargfid, args.pargfid);
5060
state->resolve.bname = gf_strdup(args.bname);
5062
state->mode = args.mode;
5063
state->umask = args.umask;
5065
if (xdr_to_dict(&args.xdata, &state->xdata)) {
5066
SERVER_REQ_SET_ERROR(req, ret);
5071
resolve_and_resume(frame, server4_mkdir_resume);
5080
server4_0_rmdir(rpcsvc_request_t *req)
5082
server_state_t *state = NULL;
5083
call_frame_t *frame = NULL;
5084
gfx_rmdir_req args = {
5094
ret = rpc_receive_common(req, &frame, &state, NULL, &args,
5095
xdr_gfx_rmdir_req, GF_FOP_RMDIR);
5100
state->resolve.type = RESOLVE_MUST;
5101
set_resolve_gfid(frame->root->client, state->resolve.pargfid, args.pargfid);
5102
state->resolve.bname = gf_strdup(args.bname);
5104
state->flags = args.xflags;
5106
if (xdr_to_dict(&args.xdata, &state->xdata)) {
5107
SERVER_REQ_SET_ERROR(req, ret);
5112
resolve_and_resume(frame, server4_rmdir_resume);
5120
server4_0_inodelk(rpcsvc_request_t *req)
5122
server_state_t *state = NULL;
5123
call_frame_t *frame = NULL;
5124
gfx_inodelk_req args = {
5135
ret = rpc_receive_common(req, &frame, &state, NULL, &args,
5136
xdr_gfx_inodelk_req, GF_FOP_INODELK);
5141
state->resolve.type = RESOLVE_EXACT;
5142
set_resolve_gfid(frame->root->client, state->resolve.gfid, args.gfid);
5147
state->cmd = F_GETLK;
5150
state->cmd = F_SETLK;
5153
state->cmd = F_SETLKW;
5157
state->type = args.type;
5158
state->volume = gf_strdup(args.volume);
5160
gf_proto_flock_to_flock(&args.flock, &state->flock);
5162
switch (state->type) {
5164
state->flock.l_type = F_RDLCK;
5167
state->flock.l_type = F_WRLCK;
5170
state->flock.l_type = F_UNLCK;
5174
if (xdr_to_dict(&args.xdata, &state->xdata)) {
5175
SERVER_REQ_SET_ERROR(req, ret);
5180
resolve_and_resume(frame, server4_inodelk_resume);
5184
free(args.flock.lk_owner.lk_owner_val);
5190
server4_0_finodelk(rpcsvc_request_t *req)
5192
server_state_t *state = NULL;
5193
call_frame_t *frame = NULL;
5194
gfx_finodelk_req args = {
5204
ret = rpc_receive_common(req, &frame, &state, NULL, &args,
5205
xdr_gfx_finodelk_req, GF_FOP_FINODELK);
5210
state->resolve.type = RESOLVE_EXACT;
5211
state->volume = gf_strdup(args.volume);
5212
state->resolve.fd_no = args.fd;
5213
state->cmd = args.cmd;
5214
set_resolve_gfid(frame->root->client, state->resolve.gfid, args.gfid);
5216
switch (state->cmd) {
5218
state->cmd = F_GETLK;
5221
state->cmd = F_SETLK;
5224
state->cmd = F_SETLKW;
5228
state->type = args.type;
5230
gf_proto_flock_to_flock(&args.flock, &state->flock);
5232
switch (state->type) {
5234
state->flock.l_type = F_RDLCK;
5237
state->flock.l_type = F_WRLCK;
5240
state->flock.l_type = F_UNLCK;
5244
if (xdr_to_dict(&args.xdata, &state->xdata)) {
5245
SERVER_REQ_SET_ERROR(req, ret);
5250
resolve_and_resume(frame, server4_finodelk_resume);
5254
free(args.flock.lk_owner.lk_owner_val);
5260
server4_0_entrylk(rpcsvc_request_t *req)
5262
server_state_t *state = NULL;
5263
call_frame_t *frame = NULL;
5264
gfx_entrylk_req args = {
5274
ret = rpc_receive_common(req, &frame, &state, NULL, &args,
5275
xdr_gfx_entrylk_req, GF_FOP_ENTRYLK);
5280
state->resolve.type = RESOLVE_EXACT;
5281
set_resolve_gfid(frame->root->client, state->resolve.gfid, args.gfid);
5284
state->name = gf_strdup(args.name);
5285
state->volume = gf_strdup(args.volume);
5287
state->cmd = args.cmd;
5288
state->type = args.type;
5290
if (xdr_to_dict(&args.xdata, &state->xdata)) {
5291
SERVER_REQ_SET_ERROR(req, ret);
5296
resolve_and_resume(frame, server4_entrylk_resume);
5305
server4_0_fentrylk(rpcsvc_request_t *req)
5307
server_state_t *state = NULL;
5308
call_frame_t *frame = NULL;
5309
gfx_fentrylk_req args = {
5319
ret = rpc_receive_common(req, &frame, &state, NULL, &args,
5320
xdr_gfx_fentrylk_req, GF_FOP_FENTRYLK);
5325
state->resolve.type = RESOLVE_EXACT;
5326
state->resolve.fd_no = args.fd;
5327
state->cmd = args.cmd;
5328
state->type = args.type;
5329
set_resolve_gfid(frame->root->client, state->resolve.gfid, args.gfid);
5332
state->name = gf_strdup(args.name);
5333
state->volume = gf_strdup(args.volume);
5335
if (xdr_to_dict(&args.xdata, &state->xdata)) {
5336
SERVER_REQ_SET_ERROR(req, ret);
5341
resolve_and_resume(frame, server4_fentrylk_resume);
5350
server4_0_access(rpcsvc_request_t *req)
5352
server_state_t *state = NULL;
5353
call_frame_t *frame = NULL;
5354
gfx_access_req args = {
5364
ret = rpc_receive_common(req, &frame, &state, NULL, &args,
5365
xdr_gfx_access_req, GF_FOP_ACCESS);
5370
state->resolve.type = RESOLVE_MUST;
5371
set_resolve_gfid(frame->root->client, state->resolve.gfid, args.gfid);
5372
state->mask = args.mask;
5374
if (xdr_to_dict(&args.xdata, &state->xdata)) {
5375
SERVER_REQ_SET_ERROR(req, ret);
5380
resolve_and_resume(frame, server4_access_resume);
5387
server4_0_symlink(rpcsvc_request_t *req)
5389
server_state_t *state = NULL;
5390
call_frame_t *frame = NULL;
5391
gfx_symlink_req args = {
5401
ret = rpc_receive_common(req, &frame, &state, NULL, &args,
5402
xdr_gfx_symlink_req, GF_FOP_SYMLINK);
5407
state->resolve.type = RESOLVE_NOT;
5408
set_resolve_gfid(frame->root->client, state->resolve.pargfid, args.pargfid);
5409
state->resolve.bname = gf_strdup(args.bname);
5410
state->name = gf_strdup(args.linkname);
5411
state->umask = args.umask;
5413
if (xdr_to_dict(&args.xdata, &state->xdata)) {
5414
SERVER_REQ_SET_ERROR(req, ret);
5419
resolve_and_resume(frame, server4_symlink_resume);
5423
free(args.linkname);
5429
server4_0_link(rpcsvc_request_t *req)
5431
server_state_t *state = NULL;
5432
call_frame_t *frame = NULL;
5433
gfx_link_req args = {
5443
ret = rpc_receive_common(req, &frame, &state, NULL, &args, xdr_gfx_link_req,
5449
state->resolve.type = RESOLVE_MUST;
5450
memcpy(state->resolve.gfid, args.oldgfid, 16);
5452
state->resolve2.type = RESOLVE_NOT;
5453
state->resolve2.bname = gf_strdup(args.newbname);
5454
set_resolve_gfid(frame->root->client, state->resolve2.pargfid,
5457
if (xdr_to_dict(&args.xdata, &state->xdata)) {
5458
SERVER_REQ_SET_ERROR(req, ret);
5463
resolve_and_resume(frame, server4_link_resume);
5465
free(args.newbname);
5471
server4_0_rename(rpcsvc_request_t *req)
5473
server_state_t *state = NULL;
5474
call_frame_t *frame = NULL;
5475
gfx_rename_req args = {
5485
ret = rpc_receive_common(req, &frame, &state, NULL, &args,
5486
xdr_gfx_rename_req, GF_FOP_RENAME);
5491
state->resolve.type = RESOLVE_MUST;
5492
state->resolve.bname = gf_strdup(args.oldbname);
5493
set_resolve_gfid(frame->root->client, state->resolve.pargfid, args.oldgfid);
5495
state->resolve2.type = RESOLVE_MAY;
5496
state->resolve2.bname = gf_strdup(args.newbname);
5497
set_resolve_gfid(frame->root->client, state->resolve2.pargfid,
5500
if (xdr_to_dict(&args.xdata, &state->xdata)) {
5501
SERVER_REQ_SET_ERROR(req, ret);
5506
resolve_and_resume(frame, server4_rename_resume);
5508
free(args.oldbname);
5509
free(args.newbname);
5515
server4_0_lease(rpcsvc_request_t *req)
5517
server_state_t *state = NULL;
5518
call_frame_t *frame = NULL;
5519
gfx_lease_req args = {
5529
ret = rpc_receive_common(req, &frame, &state, NULL, &args,
5530
xdr_gfx_lease_req, GF_FOP_LEASE);
5535
state->resolve.type = RESOLVE_MUST;
5536
set_resolve_gfid(frame->root->client, state->resolve.gfid, args.gfid);
5537
gf_proto_lease_to_lease(&args.lease, &state->lease);
5539
if (xdr_to_dict(&args.xdata, &state->xdata)) {
5540
SERVER_REQ_SET_ERROR(req, ret);
5545
resolve_and_resume(frame, server4_lease_resume);
5552
server4_0_lk(rpcsvc_request_t *req)
5554
server_state_t *state = NULL;
5555
call_frame_t *frame = NULL;
5566
ret = rpc_receive_common(req, &frame, &state, NULL, &args, xdr_gfx_lk_req,
5572
state->resolve.fd_no = args.fd;
5573
state->cmd = args.cmd;
5574
state->type = args.type;
5575
set_resolve_gfid(frame->root->client, state->resolve.gfid, args.gfid);
5577
switch (state->cmd) {
5579
state->cmd = F_GETLK;
5582
state->cmd = F_SETLK;
5585
state->cmd = F_SETLKW;
5587
case GF_LK_RESLK_LCK:
5588
state->cmd = F_RESLK_LCK;
5590
case GF_LK_RESLK_LCKW:
5591
state->cmd = F_RESLK_LCKW;
5593
case GF_LK_RESLK_UNLCK:
5594
state->cmd = F_RESLK_UNLCK;
5596
case GF_LK_GETLK_FD:
5597
state->cmd = F_GETLK_FD;
5601
gf_proto_flock_to_flock(&args.flock, &state->flock);
5603
switch (state->type) {
5605
state->flock.l_type = F_RDLCK;
5608
state->flock.l_type = F_WRLCK;
5611
state->flock.l_type = F_UNLCK;
5614
gf_smsg(frame->root->client->bound_xl->name, GF_LOG_ERROR, 0,
5615
PS_MSG_LOCK_ERROR, "fd=%" PRId64, state->resolve.fd_no,
5616
"uuid_utoa=%s", uuid_utoa(state->fd->inode->gfid),
5617
"lock type=" PRId32, state->type, NULL);
5621
if (xdr_to_dict(&args.xdata, &state->xdata)) {
5622
SERVER_REQ_SET_ERROR(req, ret);
5627
resolve_and_resume(frame, server4_lk_resume);
5630
free(args.flock.lk_owner.lk_owner_val);
5636
server4_0_null(rpcsvc_request_t *req)
5638
gfx_common_rsp rsp = {
5645
server_submit_reply(NULL, req, &rsp, NULL, 0, NULL,
5646
(xdrproc_t)xdr_gfx_common_rsp);
5652
server4_0_lookup(rpcsvc_request_t *req)
5654
call_frame_t *frame = NULL;
5655
server_state_t *state = NULL;
5656
gfx_lookup_req args = {
5663
GF_VALIDATE_OR_GOTO("server", req, err);
5665
ret = rpc_receive_common(req, &frame, &state, NULL, &args,
5666
xdr_gfx_lookup_req, GF_FOP_LOOKUP);
5671
state->resolve.type = RESOLVE_DONTCARE;
5673
if (args.bname && strcmp(args.bname, "")) {
5674
set_resolve_gfid(frame->root->client, state->resolve.pargfid,
5676
state->resolve.bname = gf_strdup(args.bname);
5678
set_resolve_gfid(frame->root->client, state->resolve.gfid, args.gfid);
5681
if (xdr_to_dict(&args.xdata, &state->xdata)) {
5682
SERVER_REQ_SET_ERROR(req, ret);
5687
resolve_and_resume(frame, server4_lookup_resume);
5696
server4_0_statfs(rpcsvc_request_t *req)
5698
server_state_t *state = NULL;
5699
call_frame_t *frame = NULL;
5700
gfx_statfs_req args = {
5710
ret = rpc_receive_common(req, &frame, &state, NULL, &args,
5711
xdr_gfx_statfs_req, GF_FOP_STATFS);
5716
state->resolve.type = RESOLVE_MUST;
5717
set_resolve_gfid(frame->root->client, state->resolve.gfid, args.gfid);
5719
if (xdr_to_dict(&args.xdata, &state->xdata)) {
5720
SERVER_REQ_SET_ERROR(req, ret);
5725
resolve_and_resume(frame, server4_statfs_resume);
5732
server4_0_getactivelk(rpcsvc_request_t *req)
5734
server_state_t *state = NULL;
5735
call_frame_t *frame = NULL;
5736
gfx_getactivelk_req args = {
5746
ret = rpc_receive_common(req, &frame, &state, NULL, &args,
5747
xdr_gfx_getactivelk_req, GF_FOP_GETACTIVELK);
5752
state->resolve.type = RESOLVE_MUST;
5753
set_resolve_gfid(frame->root->client, state->resolve.gfid, args.gfid);
5755
/* here, dict itself works as xdata */
5756
if (xdr_to_dict(&args.xdata, &state->xdata)) {
5757
SERVER_REQ_SET_ERROR(req, ret);
5762
resolve_and_resume(frame, server4_getactivelk_resume);
5769
server4_0_setactivelk(rpcsvc_request_t *req)
5771
server_state_t *state = NULL;
5772
call_frame_t *frame = NULL;
5773
gfx_setactivelk_req args = {
5783
ret = rpc_receive_common(req, &frame, &state, NULL, &args,
5784
xdr_gfx_setactivelk_req, GF_FOP_SETACTIVELK);
5789
state->resolve.type = RESOLVE_MUST;
5790
set_resolve_gfid(frame->root->client, state->resolve.gfid, args.gfid);
5792
/* here, dict itself works as xdata */
5793
if (xdr_to_dict(&args.xdata, &state->xdata)) {
5794
SERVER_REQ_SET_ERROR(req, ret);
5798
ret = unserialize_req_locklist_v2(&args, &state->locklist);
5804
resolve_and_resume(frame, server4_setactivelk_resume);
5810
server4_0_namelink(rpcsvc_request_t *req)
5812
server_state_t *state = NULL;
5813
call_frame_t *frame = NULL;
5814
gfx_namelink_req args = {
5824
ret = rpc_receive_common(req, &frame, &state, NULL, &args,
5825
xdr_gfx_namelink_req, GF_FOP_NAMELINK);
5830
state->resolve.bname = gf_strdup(args.bname);
5831
memcpy(state->resolve.pargfid, args.pargfid, sizeof(uuid_t));
5833
state->resolve.type = RESOLVE_NOT;
5835
if (xdr_to_dict(&args.xdata, &state->xdata)) {
5836
SERVER_REQ_SET_ERROR(req, ret);
5840
resolve_and_resume(frame, server4_namelink_resume);
5847
server4_0_icreate(rpcsvc_request_t *req)
5849
server_state_t *state = NULL;
5850
call_frame_t *frame = NULL;
5851
gfx_icreate_req args = {
5864
ret = rpc_receive_common(req, &frame, &state, NULL, &args,
5865
xdr_gfx_icreate_req, GF_FOP_ICREATE);
5870
memcpy(gfid, args.gfid, sizeof(uuid_t));
5872
state->mode = args.mode;
5873
gf_asprintf(&state->resolve.bname, INODE_PATH_FMT, uuid_utoa(gfid));
5875
/* parent is an auxiliary inode number */
5876
memset(state->resolve.pargfid, 0, sizeof(uuid_t));
5877
state->resolve.pargfid[15] = GF_AUXILLARY_PARGFID;
5879
state->resolve.type = RESOLVE_NOT;
5881
if (xdr_to_dict(&args.xdata, &state->xdata)) {
5882
SERVER_REQ_SET_ERROR(req, ret);
5886
resolve_and_resume(frame, server4_icreate_resume);
5893
server4_0_fsetattr(rpcsvc_request_t *req)
5895
server_state_t *state = NULL;
5896
call_frame_t *frame = NULL;
5897
gfx_fsetattr_req args = {
5905
ret = rpc_receive_common(req, &frame, &state, NULL, &args,
5906
xdr_gfx_fsetattr_req, GF_FOP_FSETATTR);
5911
state->resolve.type = RESOLVE_MUST;
5912
state->resolve.fd_no = args.fd;
5913
memcpy(state->resolve.gfid, args.gfid, 16);
5915
gfx_stat_to_iattx(&args.stbuf, &state->stbuf);
5916
state->valid = args.valid;
5918
if (xdr_to_dict(&args.xdata, &state->xdata)) {
5919
SERVER_REQ_SET_ERROR(req, ret);
5923
resolve_and_resume(frame, server4_fsetattr_resume);
5930
server4_0_rchecksum(rpcsvc_request_t *req)
5932
server_state_t *state = NULL;
5933
call_frame_t *frame = NULL;
5934
gfx_rchecksum_req args = {
5942
ret = rpc_receive_common(req, &frame, &state, NULL, &args,
5943
xdr_gfx_rchecksum_req, GF_FOP_RCHECKSUM);
5948
state->resolve.type = RESOLVE_MAY;
5949
state->resolve.fd_no = args.fd;
5950
state->offset = args.offset;
5951
state->size = args.len;
5953
memcpy(state->resolve.gfid, args.gfid, 16);
5955
if (xdr_to_dict(&args.xdata, &state->xdata)) {
5956
SERVER_REQ_SET_ERROR(req, ret);
5960
resolve_and_resume(frame, server4_rchecksum_resume);
5966
server4_0_put(rpcsvc_request_t *req)
5968
server_state_t *state = NULL;
5969
call_frame_t *frame = NULL;
5970
gfx_put_req args = {
5982
ret = rpc_receive_common(req, &frame, &state, &len, &args, xdr_gfx_put_req,
5988
state->resolve.bname = gf_strdup(args.bname);
5989
state->mode = args.mode;
5990
state->umask = args.umask;
5991
state->flags = gf_flags_to_flags(args.flag);
5992
state->offset = args.offset;
5993
state->size = args.size;
5994
state->iobref = iobref_ref(req->iobref);
5996
if (len < req->msg[0].iov_len) {
5997
state->payload_vector[0].iov_base = (req->msg[0].iov_base + len);
5998
state->payload_vector[0].iov_len = req->msg[0].iov_len - len;
5999
state->payload_count = 1;
6002
for (i = 1; i < req->count; i++) {
6003
state->payload_vector[state->payload_count++] = req->msg[i];
6006
len = iov_length(state->payload_vector, state->payload_count);
6008
GF_ASSERT(state->size == len);
6010
set_resolve_gfid(frame->root->client, state->resolve.pargfid, args.pargfid);
6012
if (state->flags & O_EXCL) {
6013
state->resolve.type = RESOLVE_NOT;
6015
state->resolve.type = RESOLVE_DONTCARE;
6018
if (xdr_to_dict(&args.xattr, &state->dict)) {
6019
SERVER_REQ_SET_ERROR(req, ret);
6022
if (xdr_to_dict(&args.xdata, &state->xdata)) {
6023
SERVER_REQ_SET_ERROR(req, ret);
6028
resolve_and_resume(frame, server4_put_resume);
6037
server4_0_compound(rpcsvc_request_t *req)
6040
SERVER_REQ_SET_ERROR(req, ret);
6045
server4_0_copy_file_range(rpcsvc_request_t *req)
6047
server_state_t *state = NULL;
6048
call_frame_t *frame = NULL;
6049
gfx_copy_file_range_req args = {
6060
ret = rpc_receive_common(req, &frame, &state, &len, &args,
6061
xdr_gfx_copy_file_range_req,
6062
GF_FOP_COPY_FILE_RANGE);
6067
state->resolve.type = RESOLVE_MUST;
6068
state->resolve.fd_no = args.fd_in;
6069
state->resolve2.type = RESOLVE_MUST; /*making this resolve must */
6070
state->resolve2.fd_no = args.fd_out;
6071
state->off_in = args.off_in;
6072
state->off_out = args.off_out;
6073
state->size = args.size;
6074
state->flags = args.flag;
6075
memcpy(state->resolve.gfid, args.gfid1, 16);
6076
memcpy(state->resolve2.gfid, args.gfid2, 16);
6078
if (xdr_to_dict(&args.xdata, &state->xdata)) {
6079
SERVER_REQ_SET_ERROR(req, ret);
6084
resolve_and_resume(frame, server4_copy_file_range_resume);
6091
server_null(rpcsvc_request_t *req)
6093
gf_common_rsp rsp = {
6100
server_submit_reply(NULL, req, &rsp, NULL, 0, NULL,
6101
(xdrproc_t)xdr_gf_common_rsp);
6106
static rpcsvc_actor_t glusterfs4_0_fop_actors[] = {
6107
[GFS3_OP_NULL] = {"NULL", server_null, NULL, GFS3_OP_NULL, 0},
6108
[GFS3_OP_STAT] = {"STAT", server4_0_stat, NULL, GFS3_OP_STAT, 0},
6109
[GFS3_OP_READLINK] = {"READLINK", server4_0_readlink, NULL,
6110
GFS3_OP_READLINK, 0},
6111
[GFS3_OP_MKNOD] = {"MKNOD", server4_0_mknod, NULL, GFS3_OP_MKNOD, 0},
6112
[GFS3_OP_MKDIR] = {"MKDIR", server4_0_mkdir, NULL, GFS3_OP_MKDIR, 0},
6113
[GFS3_OP_UNLINK] = {"UNLINK", server4_0_unlink, NULL, GFS3_OP_UNLINK, 0},
6114
[GFS3_OP_RMDIR] = {"RMDIR", server4_0_rmdir, NULL, GFS3_OP_RMDIR, 0},
6115
[GFS3_OP_SYMLINK] = {"SYMLINK", server4_0_symlink, NULL, GFS3_OP_SYMLINK,
6117
[GFS3_OP_RENAME] = {"RENAME", server4_0_rename, NULL, GFS3_OP_RENAME, 0},
6118
[GFS3_OP_LINK] = {"LINK", server4_0_link, NULL, GFS3_OP_LINK, 0},
6119
[GFS3_OP_TRUNCATE] = {"TRUNCATE", server4_0_truncate, NULL,
6120
GFS3_OP_TRUNCATE, 0},
6121
[GFS3_OP_OPEN] = {"OPEN", server4_0_open, NULL, GFS3_OP_OPEN, 0},
6122
[GFS3_OP_READ] = {"READ", server4_0_readv, NULL, GFS3_OP_READ, 0},
6123
[GFS3_OP_WRITE] = {"WRITE", server4_0_writev, server4_0_writev_vecsizer,
6125
[GFS3_OP_STATFS] = {"STATFS", server4_0_statfs, NULL, GFS3_OP_STATFS, 0},
6126
[GFS3_OP_FLUSH] = {"FLUSH", server4_0_flush, NULL, GFS3_OP_FLUSH, 0},
6127
[GFS3_OP_FSYNC] = {"FSYNC", server4_0_fsync, NULL, GFS3_OP_FSYNC, 0},
6128
[GFS3_OP_GETXATTR] = {"GETXATTR", server4_0_getxattr, NULL,
6129
GFS3_OP_GETXATTR, 0},
6130
[GFS3_OP_SETXATTR] = {"SETXATTR", server4_0_setxattr, NULL,
6131
GFS3_OP_SETXATTR, 0},
6132
[GFS3_OP_REMOVEXATTR] = {"REMOVEXATTR", server4_0_removexattr, NULL,
6133
GFS3_OP_REMOVEXATTR, 0},
6134
[GFS3_OP_OPENDIR] = {"OPENDIR", server4_0_opendir, NULL, GFS3_OP_OPENDIR,
6136
[GFS3_OP_FSYNCDIR] = {"FSYNCDIR", server4_0_fsyncdir, NULL,
6137
GFS3_OP_FSYNCDIR, 0},
6138
[GFS3_OP_ACCESS] = {"ACCESS", server4_0_access, NULL, GFS3_OP_ACCESS, 0},
6139
[GFS3_OP_CREATE] = {"CREATE", server4_0_create, NULL, GFS3_OP_CREATE, 0},
6140
[GFS3_OP_FTRUNCATE] = {"FTRUNCATE", server4_0_ftruncate, NULL,
6141
GFS3_OP_FTRUNCATE, 0},
6142
[GFS3_OP_FSTAT] = {"FSTAT", server4_0_fstat, NULL, GFS3_OP_FSTAT, 0},
6143
[GFS3_OP_LK] = {"LK", server4_0_lk, NULL, GFS3_OP_LK, 0},
6144
[GFS3_OP_LOOKUP] = {"LOOKUP", server4_0_lookup, NULL, GFS3_OP_LOOKUP, 0},
6145
[GFS3_OP_READDIR] = {"READDIR", server4_0_readdir, NULL, GFS3_OP_READDIR,
6147
[GFS3_OP_INODELK] = {"INODELK", server4_0_inodelk, NULL, GFS3_OP_INODELK,
6149
[GFS3_OP_FINODELK] = {"FINODELK", server4_0_finodelk, NULL,
6150
GFS3_OP_FINODELK, 0},
6151
[GFS3_OP_ENTRYLK] = {"ENTRYLK", server4_0_entrylk, NULL, GFS3_OP_ENTRYLK,
6153
[GFS3_OP_FENTRYLK] = {"FENTRYLK", server4_0_fentrylk, NULL,
6154
GFS3_OP_FENTRYLK, 0},
6155
[GFS3_OP_XATTROP] = {"XATTROP", server4_0_xattrop, NULL, GFS3_OP_XATTROP,
6157
[GFS3_OP_FXATTROP] = {"FXATTROP", server4_0_fxattrop, NULL,
6158
GFS3_OP_FXATTROP, 0},
6159
[GFS3_OP_FGETXATTR] = {"FGETXATTR", server4_0_fgetxattr, NULL,
6160
GFS3_OP_FGETXATTR, 0},
6161
[GFS3_OP_FSETXATTR] = {"FSETXATTR", server4_0_fsetxattr, NULL,
6162
GFS3_OP_FSETXATTR, 0},
6163
[GFS3_OP_RCHECKSUM] = {"RCHECKSUM", server4_0_rchecksum, NULL,
6164
GFS3_OP_RCHECKSUM, 0},
6165
[GFS3_OP_SETATTR] = {"SETATTR", server4_0_setattr, NULL, GFS3_OP_SETATTR,
6167
[GFS3_OP_FSETATTR] = {"FSETATTR", server4_0_fsetattr, NULL,
6168
GFS3_OP_FSETATTR, 0},
6169
[GFS3_OP_READDIRP] = {"READDIRP", server4_0_readdirp, NULL,
6170
GFS3_OP_READDIRP, 0},
6171
[GFS3_OP_RELEASE] = {"RELEASE", server4_0_release, NULL, GFS3_OP_RELEASE,
6173
[GFS3_OP_RELEASEDIR] = {"RELEASEDIR", server4_0_releasedir, NULL,
6174
GFS3_OP_RELEASEDIR, 0},
6175
[GFS3_OP_FREMOVEXATTR] = {"FREMOVEXATTR", server4_0_fremovexattr, NULL,
6176
GFS3_OP_FREMOVEXATTR, 0},
6177
[GFS3_OP_FALLOCATE] = {"FALLOCATE", server4_0_fallocate, NULL, DRC_NA,
6178
GFS3_OP_FALLOCATE, 0},
6179
[GFS3_OP_DISCARD] = {"DISCARD", server4_0_discard, NULL, DRC_NA,
6180
GFS3_OP_DISCARD, 0},
6181
[GFS3_OP_ZEROFILL] = {"ZEROFILL", server4_0_zerofill, NULL, DRC_NA,
6182
GFS3_OP_ZEROFILL, 0},
6183
[GFS3_OP_IPC] = {"IPC", server4_0_ipc, NULL, DRC_NA, GFS3_OP_IPC, 0},
6184
[GFS3_OP_SEEK] = {"SEEK", server4_0_seek, NULL, DRC_NA, GFS3_OP_SEEK, 0},
6185
[GFS3_OP_LEASE] = {"LEASE", server4_0_lease, NULL, DRC_NA, GFS3_OP_LEASE,
6187
[GFS3_OP_GETACTIVELK] = {"GETACTIVELK", server4_0_getactivelk, NULL, DRC_NA,
6188
GFS3_OP_GETACTIVELK, 0},
6189
[GFS3_OP_SETACTIVELK] = {"SETACTIVELK", server4_0_setactivelk, NULL, DRC_NA,
6190
GFS3_OP_SETACTIVELK, 0},
6191
[GFS3_OP_COMPOUND] = {"COMPOUND", server4_0_compound, NULL, DRC_NA,
6192
GFS3_OP_COMPOUND, 0},
6193
[GFS3_OP_ICREATE] = {"ICREATE", server4_0_icreate, NULL, DRC_NA,
6194
GFS3_OP_ICREATE, 0},
6195
[GFS3_OP_NAMELINK] = {"NAMELINK", server4_0_namelink, NULL, DRC_NA,
6196
GFS3_OP_NAMELINK, 0},
6197
[GFS3_OP_COPY_FILE_RANGE] = {"COPY-FILE-RANGE", server4_0_copy_file_range,
6198
NULL, DRC_NA, GFS3_OP_COPY_FILE_RANGE, 0},
6201
struct rpcsvc_program glusterfs4_0_fop_prog = {
6202
.progname = "GlusterFS 4.x v1",
6203
.prognum = GLUSTER_FOP_PROGRAM,
6204
.progver = GLUSTER_FOP_VERSION_v2,
6205
.numactors = GLUSTER_FOP_PROCCNT,
6206
.actors = glusterfs4_0_fop_actors,
6207
.ownthread = _gf_true,