|
Packit |
b2c0d9 |
/*
|
|
Packit |
b2c0d9 |
Copyright (c) 2008-2012 Red Hat, Inc. <http://www.redhat.com>
|
|
Packit |
b2c0d9 |
This file is part of GlusterFS.
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
This file is licensed to you under your choice of the GNU Lesser
|
|
Packit |
b2c0d9 |
General Public License, version 3 or any later version (LGPLv3 or
|
|
Packit |
b2c0d9 |
later), or the GNU General Public License, version 2 (GPLv2), in all
|
|
Packit |
b2c0d9 |
cases as published by the Free Software Foundation.
|
|
Packit |
b2c0d9 |
*/
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
#ifndef _CLIENT_H
|
|
Packit |
b2c0d9 |
#define _CLIENT_H
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
#include <pthread.h>
|
|
Packit |
b2c0d9 |
#include <stdint.h>
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
#include "rpc-clnt.h"
|
|
Packit |
b2c0d9 |
#include <glusterfs/list.h>
|
|
Packit |
b2c0d9 |
#include <glusterfs/inode.h>
|
|
Packit |
b2c0d9 |
#include "client-mem-types.h"
|
|
Packit |
b2c0d9 |
#include "protocol-common.h"
|
|
Packit |
b2c0d9 |
#include "glusterfs3.h"
|
|
Packit |
b2c0d9 |
#include "glusterfs3-xdr.h"
|
|
Packit |
b2c0d9 |
#include <glusterfs/fd-lk.h>
|
|
Packit |
b2c0d9 |
#include <glusterfs/defaults.h>
|
|
Packit |
b2c0d9 |
#include <glusterfs/default-args.h>
|
|
Packit |
b2c0d9 |
#include "client-messages.h"
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
/* FIXME: Needs to be defined in a common file */
|
|
Packit |
b2c0d9 |
#define CLIENT_DUMP_LOCKS "trusted.glusterfs.clientlk-dump"
|
|
Packit |
b2c0d9 |
#define GF_MAX_SOCKET_WINDOW_SIZE (1 * GF_UNIT_MB)
|
|
Packit |
b2c0d9 |
#define GF_MIN_SOCKET_WINDOW_SIZE (0)
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
typedef enum {
|
|
Packit |
b2c0d9 |
DEFAULT_REMOTE_FD = 0,
|
|
Packit |
b2c0d9 |
FALLBACK_TO_ANON_FD = 1
|
|
Packit |
b2c0d9 |
} clnt_remote_fd_flags_t;
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
#define CPD_REQ_FIELD(v, f) (v)->compound_req_u.compound_##f##_req
|
|
Packit |
b2c0d9 |
#define CPD_RSP_FIELD(v, f) (v)->compound_rsp_u.compound_##f##_rsp
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
#define CLIENT_POST_FOP(fop, this_rsp_u, this_args_cbk, params...) \
|
|
Packit |
b2c0d9 |
do { \
|
|
Packit |
b2c0d9 |
gf_common_rsp *_this_rsp = &CPD_RSP_FIELD(this_rsp_u, fop); \
|
|
Packit |
b2c0d9 |
int _op_ret = 0; \
|
|
Packit |
b2c0d9 |
int _op_errno = 0; \
|
|
Packit |
b2c0d9 |
\
|
|
Packit |
b2c0d9 |
_op_ret = _this_rsp->op_ret; \
|
|
Packit |
b2c0d9 |
_op_errno = gf_error_to_errno(_this_rsp->op_errno); \
|
|
Packit |
b2c0d9 |
args_##fop##_cbk_store(this_args_cbk, _op_ret, _op_errno, params); \
|
|
Packit |
b2c0d9 |
} while (0)
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
#define CLIENT_POST_FOP_TYPE(fop, this_rsp_u, this_args_cbk, params...) \
|
|
Packit |
b2c0d9 |
do { \
|
|
Packit |
b2c0d9 |
gfs3_##fop##_rsp *_this_rsp = &CPD_RSP_FIELD(this_rsp_u, fop); \
|
|
Packit |
b2c0d9 |
int _op_ret = 0; \
|
|
Packit |
b2c0d9 |
int _op_errno = 0; \
|
|
Packit |
b2c0d9 |
\
|
|
Packit |
b2c0d9 |
_op_ret = _this_rsp->op_ret; \
|
|
Packit |
b2c0d9 |
_op_errno = gf_error_to_errno(_this_rsp->op_errno); \
|
|
Packit |
b2c0d9 |
args_##fop##_cbk_store(this_args_cbk, _op_ret, _op_errno, params); \
|
|
Packit |
b2c0d9 |
} while (0)
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
#define CLIENT_PRE_FOP(fop, xl, compound_req, op_errno, label, params...) \
|
|
Packit |
b2c0d9 |
do { \
|
|
Packit |
b2c0d9 |
gfs3_##fop##_req *_req = (gfs3_##fop##_req *)compound_req; \
|
|
Packit |
b2c0d9 |
int _ret = 0; \
|
|
Packit |
b2c0d9 |
\
|
|
Packit |
b2c0d9 |
_ret = client_pre_##fop(xl, _req, params); \
|
|
Packit |
b2c0d9 |
if (_ret < 0) { \
|
|
Packit |
b2c0d9 |
op_errno = -ret; \
|
|
Packit |
b2c0d9 |
goto label; \
|
|
Packit |
b2c0d9 |
} \
|
|
Packit |
b2c0d9 |
} while (0)
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
#define CLIENT_COMPOUND_FOP_CLEANUP(curr_req, fop) \
|
|
Packit |
b2c0d9 |
do { \
|
|
Packit |
b2c0d9 |
gfs3_##fop##_req *_req = &CPD_REQ_FIELD(curr_req, fop); \
|
|
Packit |
b2c0d9 |
\
|
|
Packit |
b2c0d9 |
GF_FREE(_req->xdata.xdata_val); \
|
|
Packit |
b2c0d9 |
} while (0)
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
#define CLIENT_COMMON_RSP_CLEANUP(rsp, fop, i) \
|
|
Packit |
b2c0d9 |
do { \
|
|
Packit |
b2c0d9 |
compound_rsp *this_rsp = NULL; \
|
|
Packit |
b2c0d9 |
this_rsp = &rsp->compound_rsp_array.compound_rsp_array_val[i]; \
|
|
Packit |
b2c0d9 |
gf_common_rsp *_this_rsp = &CPD_RSP_FIELD(this_rsp, fop); \
|
|
Packit |
b2c0d9 |
\
|
|
Packit |
b2c0d9 |
free(_this_rsp->xdata.xdata_val); \
|
|
Packit |
b2c0d9 |
} while (0)
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
#define CLIENT_FOP_RSP_CLEANUP(rsp, fop, i) \
|
|
Packit |
b2c0d9 |
do { \
|
|
Packit |
b2c0d9 |
compound_rsp *this_rsp = NULL; \
|
|
Packit |
b2c0d9 |
this_rsp = &rsp->compound_rsp_array.compound_rsp_array_val[i]; \
|
|
Packit |
b2c0d9 |
gfs3_##fop##_rsp *_this_rsp = &CPD_RSP_FIELD(this_rsp, fop); \
|
|
Packit |
b2c0d9 |
\
|
|
Packit |
b2c0d9 |
free(_this_rsp->xdata.xdata_val); \
|
|
Packit |
b2c0d9 |
} while (0)
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
#define CLIENT_GET_REMOTE_FD(xl, fd, flags, remote_fd, op_errno, label) \
|
|
Packit |
b2c0d9 |
do { \
|
|
Packit |
b2c0d9 |
int _ret = 0; \
|
|
Packit |
b2c0d9 |
_ret = client_get_remote_fd(xl, fd, flags, &remote_fd); \
|
|
Packit |
b2c0d9 |
if (_ret < 0) { \
|
|
Packit |
b2c0d9 |
op_errno = errno; \
|
|
Packit |
b2c0d9 |
goto label; \
|
|
Packit |
b2c0d9 |
} \
|
|
Packit |
b2c0d9 |
if (remote_fd == -1) { \
|
|
Packit |
b2c0d9 |
gf_msg(xl->name, GF_LOG_WARNING, EBADFD, PC_MSG_BAD_FD, \
|
|
Packit |
b2c0d9 |
" (%s) " \
|
|
Packit |
b2c0d9 |
"remote_fd is -1. EBADFD", \
|
|
Packit |
b2c0d9 |
uuid_utoa(fd->inode->gfid)); \
|
|
Packit |
b2c0d9 |
op_errno = EBADFD; \
|
|
Packit |
b2c0d9 |
goto label; \
|
|
Packit |
b2c0d9 |
} \
|
|
Packit |
b2c0d9 |
} while (0)
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
#define CLIENT_STACK_UNWIND(op, frame, params...) \
|
|
Packit |
b2c0d9 |
do { \
|
|
Packit |
b2c0d9 |
if (!frame) \
|
|
Packit |
b2c0d9 |
break; \
|
|
Packit |
b2c0d9 |
clnt_local_t *__local = frame->local; \
|
|
Packit |
b2c0d9 |
frame->local = NULL; \
|
|
Packit |
b2c0d9 |
STACK_UNWIND_STRICT(op, frame, params); \
|
|
Packit |
b2c0d9 |
client_local_wipe(__local); \
|
|
Packit |
b2c0d9 |
} while (0)
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
/* compound v2 */
|
|
Packit |
b2c0d9 |
#define CPD4_REQ_FIELD(v, f) ((v)->compound_req_v2_u.compound_##f##_req)
|
|
Packit |
b2c0d9 |
#define CPD4_RSP_FIELD(v, f) ((v)->compound_rsp_v2_u.compound_##f##_rsp)
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
#define CLIENT4_POST_FOP(fop, this_rsp_u, this_args_cbk, params...) \
|
|
Packit |
b2c0d9 |
do { \
|
|
Packit |
b2c0d9 |
gfx_common_rsp *_this_rsp = &CPD4_RSP_FIELD(this_rsp_u, fop); \
|
|
Packit |
b2c0d9 |
int _op_ret = 0; \
|
|
Packit |
b2c0d9 |
int _op_errno = 0; \
|
|
Packit |
b2c0d9 |
\
|
|
Packit |
b2c0d9 |
_op_ret = _this_rsp->op_ret; \
|
|
Packit |
b2c0d9 |
_op_errno = gf_error_to_errno(_this_rsp->op_errno); \
|
|
Packit |
b2c0d9 |
args_##fop##_cbk_store(this_args_cbk, _op_ret, _op_errno, params); \
|
|
Packit |
b2c0d9 |
} while (0)
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
#define CLIENT4_POST_FOP_TYPE(fop, rsp_type, this_rsp_u, this_args_cbk, \
|
|
Packit |
b2c0d9 |
params...) \
|
|
Packit |
b2c0d9 |
do { \
|
|
Packit |
b2c0d9 |
gfx_##rsp_type##_rsp *_this_rsp = &CPD4_RSP_FIELD(this_rsp_u, fop); \
|
|
Packit |
b2c0d9 |
int _op_ret = 0; \
|
|
Packit |
b2c0d9 |
int _op_errno = 0; \
|
|
Packit |
b2c0d9 |
\
|
|
Packit |
b2c0d9 |
_op_ret = _this_rsp->op_ret; \
|
|
Packit |
b2c0d9 |
_op_errno = gf_error_to_errno(_this_rsp->op_errno); \
|
|
Packit |
b2c0d9 |
args_##fop##_cbk_store(this_args_cbk, _op_ret, _op_errno, params); \
|
|
Packit |
b2c0d9 |
} while (0)
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
#define CLIENT4_PRE_FOP(fop, xl, compound_req, op_errno, label, params...) \
|
|
Packit |
b2c0d9 |
do { \
|
|
Packit |
b2c0d9 |
gfx_##fop##_req *_req = (gfx_##fop##_req *)compound_req; \
|
|
Packit |
b2c0d9 |
int _ret = 0; \
|
|
Packit |
b2c0d9 |
\
|
|
Packit |
b2c0d9 |
_ret = client_pre_##fop##_v2(xl, _req, params); \
|
|
Packit |
b2c0d9 |
if (_ret < 0) { \
|
|
Packit |
b2c0d9 |
op_errno = -ret; \
|
|
Packit |
b2c0d9 |
goto label; \
|
|
Packit |
b2c0d9 |
} \
|
|
Packit |
b2c0d9 |
} while (0)
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
#define CLIENT4_COMPOUND_FOP_CLEANUP(curr_req, fop) \
|
|
Packit |
b2c0d9 |
do { \
|
|
Packit |
b2c0d9 |
gfx_##fop##_req *_req = &CPD4_REQ_FIELD(curr_req, fop); \
|
|
Packit |
b2c0d9 |
\
|
|
Packit |
b2c0d9 |
GF_FREE(_req->xdata.pairs.pairs_val); \
|
|
Packit |
b2c0d9 |
} while (0)
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
struct clnt_options {
|
|
Packit |
b2c0d9 |
char *remote_subvolume;
|
|
Packit |
b2c0d9 |
int ping_timeout;
|
|
Packit |
b2c0d9 |
};
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
typedef struct clnt_conf {
|
|
Packit |
b2c0d9 |
struct rpc_clnt *rpc;
|
|
Packit |
b2c0d9 |
struct clnt_options opt;
|
|
Packit |
b2c0d9 |
struct rpc_clnt_config rpc_conf;
|
|
Packit |
b2c0d9 |
struct list_head saved_fds;
|
|
Packit |
b2c0d9 |
pthread_spinlock_t fd_lock; /* protects saved_fds list
|
|
Packit |
b2c0d9 |
* and all fdctx */
|
|
Packit |
b2c0d9 |
pthread_mutex_t lock;
|
|
Packit |
b2c0d9 |
int connected;
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
rpc_clnt_prog_t *fops;
|
|
Packit |
b2c0d9 |
rpc_clnt_prog_t *mgmt;
|
|
Packit |
b2c0d9 |
rpc_clnt_prog_t *handshake;
|
|
Packit |
b2c0d9 |
rpc_clnt_prog_t *dump;
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
int client_id;
|
|
Packit |
b2c0d9 |
uint64_t reopen_fd_count; /* Count of fds reopened after a
|
|
Packit |
b2c0d9 |
connection is established */
|
|
Packit |
b2c0d9 |
gf_lock_t rec_lock;
|
|
Packit |
b2c0d9 |
int skip_notify;
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
int last_sent_event; /* Flag used to make sure we are
|
|
Packit |
b2c0d9 |
not repeating the same event
|
|
Packit |
b2c0d9 |
which was sent earlier */
|
|
Packit |
b2c0d9 |
char portmap_err_logged; /* flag used to prevent
|
|
Packit |
b2c0d9 |
excessive logging */
|
|
Packit |
b2c0d9 |
char disconnect_err_logged; /* flag used to prevent
|
|
Packit |
b2c0d9 |
excessive disconnect
|
|
Packit |
b2c0d9 |
logging */
|
|
Packit |
b2c0d9 |
char parent_down;
|
|
Packit |
b2c0d9 |
gf_boolean_t quick_reconnect; /* When reconnecting after
|
|
Packit |
b2c0d9 |
portmap query, do not let
|
|
Packit |
b2c0d9 |
the reconnection happen after
|
|
Packit |
b2c0d9 |
the usual 3-second wait
|
|
Packit |
b2c0d9 |
*/
|
|
Packit |
b2c0d9 |
gf_boolean_t filter_o_direct; /* if set, filter O_DIRECT from
|
|
Packit |
b2c0d9 |
the flags list of open() */
|
|
Packit |
b2c0d9 |
/* set volume is the op which results in creating/re-using
|
|
Packit |
b2c0d9 |
* the conn-id and is called once per connection, this remembers
|
|
Packit |
b2c0d9 |
* how manytimes set_volume is called
|
|
Packit |
b2c0d9 |
*/
|
|
Packit |
b2c0d9 |
uint64_t setvol_count;
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
gf_boolean_t send_gids; /* let the server resolve gids */
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
int event_threads; /* # of event threads
|
|
Packit |
b2c0d9 |
* configured */
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
gf_boolean_t destroy; /* if enabled implies fini was called
|
|
Packit |
b2c0d9 |
* on @this xlator instance */
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
gf_boolean_t child_up; /* Set to true, when child is up, and
|
|
Packit |
b2c0d9 |
* false, when child is down */
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
gf_boolean_t can_log_disconnect; /* socket level connection is
|
|
Packit |
b2c0d9 |
* up, disconnects can be
|
|
Packit |
b2c0d9 |
* logged
|
|
Packit |
b2c0d9 |
*/
|
|
Packit |
b2c0d9 |
} clnt_conf_t;
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
typedef struct _client_fd_ctx {
|
|
Packit |
b2c0d9 |
struct list_head sfd_pos; /* Stores the reference to this
|
|
Packit |
b2c0d9 |
fd's position in the saved_fds list.
|
|
Packit |
b2c0d9 |
*/
|
|
Packit |
b2c0d9 |
int64_t remote_fd;
|
|
Packit |
b2c0d9 |
char is_dir;
|
|
Packit |
b2c0d9 |
char released;
|
|
Packit |
b2c0d9 |
int32_t flags;
|
|
Packit |
b2c0d9 |
fd_lk_ctx_t *lk_ctx;
|
|
Packit |
b2c0d9 |
uuid_t gfid;
|
|
Packit |
b2c0d9 |
void (*reopen_done)(struct _client_fd_ctx *, int64_t rfd, xlator_t *);
|
|
Packit |
b2c0d9 |
struct list_head lock_list; /* List of all granted locks on this fd */
|
|
Packit |
b2c0d9 |
int32_t reopen_attempts;
|
|
Packit |
b2c0d9 |
} clnt_fd_ctx_t;
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
typedef struct _client_posix_lock {
|
|
Packit |
b2c0d9 |
fd_t *fd; /* The fd on which the lk operation was made */
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
struct gf_flock user_flock; /* the flock supplied by the user */
|
|
Packit |
b2c0d9 |
off_t fl_start;
|
|
Packit |
b2c0d9 |
off_t fl_end;
|
|
Packit |
b2c0d9 |
short fl_type;
|
|
Packit |
b2c0d9 |
int32_t cmd; /* the cmd for the lock call */
|
|
Packit |
b2c0d9 |
gf_lkowner_t owner; /* lock owner from fuse */
|
|
Packit |
b2c0d9 |
struct list_head
|
|
Packit |
b2c0d9 |
list; /* reference used to add to the fdctx list of locks */
|
|
Packit |
b2c0d9 |
} client_posix_lock_t;
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
typedef struct client_local {
|
|
Packit |
b2c0d9 |
loc_t loc;
|
|
Packit |
b2c0d9 |
loc_t loc2;
|
|
Packit |
b2c0d9 |
fd_t *fd;
|
|
Packit |
b2c0d9 |
fd_t *fd_out; /* used in copy_file_range */
|
|
Packit |
b2c0d9 |
clnt_fd_ctx_t *fdctx;
|
|
Packit |
b2c0d9 |
uint32_t flags;
|
|
Packit |
b2c0d9 |
struct iobref *iobref;
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
client_posix_lock_t *client_lock;
|
|
Packit |
b2c0d9 |
gf_lkowner_t owner;
|
|
Packit |
b2c0d9 |
int32_t cmd;
|
|
Packit |
b2c0d9 |
struct list_head lock_list;
|
|
Packit |
b2c0d9 |
pthread_mutex_t mutex;
|
|
Packit |
b2c0d9 |
char *name;
|
|
Packit |
b2c0d9 |
gf_boolean_t attempt_reopen;
|
|
Packit |
b2c0d9 |
/*
|
|
Packit |
b2c0d9 |
* The below boolean variable is used
|
|
Packit |
b2c0d9 |
* only for copy_file_range fop
|
|
Packit |
b2c0d9 |
*/
|
|
Packit |
b2c0d9 |
gf_boolean_t attempt_reopen_out;
|
|
Packit |
b2c0d9 |
/* required for compound fops */
|
|
Packit |
b2c0d9 |
compound_args_t *compound_args;
|
|
Packit |
b2c0d9 |
unsigned int length; /* length of a compound fop */
|
|
Packit |
b2c0d9 |
unsigned int
|
|
Packit |
b2c0d9 |
read_length; /* defines the last processed length for a compound read */
|
|
Packit |
b2c0d9 |
} clnt_local_t;
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
typedef struct client_args {
|
|
Packit |
b2c0d9 |
loc_t *loc;
|
|
Packit |
b2c0d9 |
/*
|
|
Packit |
b2c0d9 |
* This is the source fd for copy_file_range and
|
|
Packit |
b2c0d9 |
* the default fd for any other fd based fop which
|
|
Packit |
b2c0d9 |
* requires only one fd (i.e. opetates on one fd)
|
|
Packit |
b2c0d9 |
*/
|
|
Packit |
b2c0d9 |
fd_t *fd;
|
|
Packit |
b2c0d9 |
fd_t *fd_out; /* this is the destination fd for copy_file_range */
|
|
Packit |
b2c0d9 |
const char *linkname;
|
|
Packit |
b2c0d9 |
struct iobref *iobref;
|
|
Packit |
b2c0d9 |
struct iovec *vector;
|
|
Packit |
b2c0d9 |
dict_t *xattr;
|
|
Packit |
b2c0d9 |
struct iatt *stbuf;
|
|
Packit |
b2c0d9 |
loc_t *oldloc;
|
|
Packit |
b2c0d9 |
loc_t *newloc;
|
|
Packit |
b2c0d9 |
const char *name;
|
|
Packit |
b2c0d9 |
struct gf_flock *flock;
|
|
Packit |
b2c0d9 |
const char *volume;
|
|
Packit |
b2c0d9 |
const char *basename;
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
off_t offset;
|
|
Packit |
b2c0d9 |
/*
|
|
Packit |
b2c0d9 |
* According to the man page of copy_file_range,
|
|
Packit |
b2c0d9 |
* the offsets for source and destination file
|
|
Packit |
b2c0d9 |
* are of type loff_t. But the type loff_t is
|
|
Packit |
b2c0d9 |
* linux specific and is actual a typedef of
|
|
Packit |
b2c0d9 |
* off64_t.
|
|
Packit |
b2c0d9 |
*/
|
|
Packit |
b2c0d9 |
off64_t off_in; /* used in copy_file_range for source fd */
|
|
Packit |
b2c0d9 |
off64_t off_out; /* used in copy_file_range for dst fd */
|
|
Packit |
b2c0d9 |
int32_t mask;
|
|
Packit |
b2c0d9 |
int32_t cmd;
|
|
Packit |
b2c0d9 |
size_t size;
|
|
Packit |
b2c0d9 |
mode_t mode;
|
|
Packit |
b2c0d9 |
dev_t rdev;
|
|
Packit |
b2c0d9 |
int32_t flags;
|
|
Packit |
b2c0d9 |
int32_t count;
|
|
Packit |
b2c0d9 |
int32_t datasync;
|
|
Packit |
b2c0d9 |
entrylk_cmd cmd_entrylk;
|
|
Packit |
b2c0d9 |
entrylk_type type;
|
|
Packit |
b2c0d9 |
gf_xattrop_flags_t optype;
|
|
Packit |
b2c0d9 |
int32_t valid;
|
|
Packit |
b2c0d9 |
int32_t len;
|
|
Packit |
b2c0d9 |
gf_seek_what_t what;
|
|
Packit |
b2c0d9 |
struct gf_lease *lease;
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
mode_t umask;
|
|
Packit |
b2c0d9 |
dict_t *xdata;
|
|
Packit |
b2c0d9 |
lock_migration_info_t *locklist;
|
|
Packit |
b2c0d9 |
} clnt_args_t;
|
|
Packit |
b2c0d9 |
|
|
Packit Service |
e2d152 |
typedef struct client_payload {
|
|
Packit Service |
e2d152 |
struct iobref *iobref;
|
|
Packit Service |
e2d152 |
struct iovec *payload;
|
|
Packit Service |
e2d152 |
struct iovec *rsphdr;
|
|
Packit Service |
e2d152 |
struct iovec *rsp_payload;
|
|
Packit Service |
e2d152 |
struct iobref *rsp_iobref;
|
|
Packit Service |
e2d152 |
int payload_cnt;
|
|
Packit Service |
e2d152 |
int rsphdr_cnt;
|
|
Packit Service |
e2d152 |
int rsp_payload_cnt;
|
|
Packit Service |
e2d152 |
} client_payload_t;
|
|
Packit Service |
e2d152 |
|
|
Packit |
b2c0d9 |
typedef ssize_t (*gfs_serialize_t)(struct iovec outmsg, void *args);
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
clnt_fd_ctx_t *
|
|
Packit |
b2c0d9 |
this_fd_get_ctx(fd_t *file, xlator_t *this);
|
|
Packit |
b2c0d9 |
clnt_fd_ctx_t *
|
|
Packit |
b2c0d9 |
this_fd_del_ctx(fd_t *file, xlator_t *this);
|
|
Packit |
b2c0d9 |
void
|
|
Packit |
b2c0d9 |
this_fd_set_ctx(fd_t *file, xlator_t *this, loc_t *loc, clnt_fd_ctx_t *ctx);
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
int
|
|
Packit |
b2c0d9 |
client_local_wipe(clnt_local_t *local);
|
|
Packit |
b2c0d9 |
int
|
|
Packit |
b2c0d9 |
client_submit_request(xlator_t *this, void *req, call_frame_t *frame,
|
|
Packit |
b2c0d9 |
rpc_clnt_prog_t *prog, int procnum, fop_cbk_fn_t cbk,
|
|
Packit Service |
e2d152 |
client_payload_t *cp, xdrproc_t xdrproc);
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
int
|
|
Packit |
b2c0d9 |
client_submit_compound_request(xlator_t *this, void *req, call_frame_t *frame,
|
|
Packit |
b2c0d9 |
rpc_clnt_prog_t *prog, int procnum,
|
|
Packit |
b2c0d9 |
fop_cbk_fn_t cbkfn, struct iovec *req_vector,
|
|
Packit |
b2c0d9 |
int req_count, struct iobref *iobref,
|
|
Packit |
b2c0d9 |
struct iovec *rsphdr, int rsphdr_count,
|
|
Packit |
b2c0d9 |
struct iovec *rsp_payload, int rsp_payload_count,
|
|
Packit |
b2c0d9 |
struct iobref *rsp_iobref, xdrproc_t xdrproc);
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
int
|
|
Packit |
b2c0d9 |
unserialize_rsp_dirent(xlator_t *this, struct gfs3_readdir_rsp *rsp,
|
|
Packit |
b2c0d9 |
gf_dirent_t *entries);
|
|
Packit |
b2c0d9 |
int
|
|
Packit |
b2c0d9 |
unserialize_rsp_direntp(xlator_t *this, fd_t *fd, struct gfs3_readdirp_rsp *rsp,
|
|
Packit |
b2c0d9 |
gf_dirent_t *entries);
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
int
|
|
Packit |
b2c0d9 |
clnt_readdir_rsp_cleanup(gfs3_readdir_rsp *rsp);
|
|
Packit |
b2c0d9 |
int
|
|
Packit |
b2c0d9 |
clnt_readdirp_rsp_cleanup(gfs3_readdirp_rsp *rsp);
|
|
Packit |
b2c0d9 |
int
|
|
Packit |
b2c0d9 |
client_attempt_lock_recovery(xlator_t *this, clnt_fd_ctx_t *fdctx);
|
|
Packit |
b2c0d9 |
int32_t
|
|
Packit |
b2c0d9 |
delete_granted_locks_owner(fd_t *fd, gf_lkowner_t *owner);
|
|
Packit |
b2c0d9 |
int32_t
|
|
Packit |
b2c0d9 |
delete_granted_locks_fd(clnt_fd_ctx_t *fdctx);
|
|
Packit |
b2c0d9 |
int32_t
|
|
Packit |
b2c0d9 |
client_cmd_to_gf_cmd(int32_t cmd, int32_t *gf_cmd);
|
|
Packit |
b2c0d9 |
void
|
|
Packit |
b2c0d9 |
client_save_number_fds(clnt_conf_t *conf, int count);
|
|
Packit |
b2c0d9 |
int
|
|
Packit |
b2c0d9 |
dump_client_locks(inode_t *inode);
|
|
Packit |
b2c0d9 |
int
|
|
Packit |
b2c0d9 |
client_notify_parents_child_up(xlator_t *this);
|
|
Packit |
b2c0d9 |
int32_t
|
|
Packit |
b2c0d9 |
is_client_dump_locks_cmd(char *name);
|
|
Packit |
b2c0d9 |
int32_t
|
|
Packit |
b2c0d9 |
client_dump_locks(char *name, inode_t *inode, dict_t *dict);
|
|
Packit |
b2c0d9 |
int
|
|
Packit |
b2c0d9 |
client_fdctx_destroy(xlator_t *this, clnt_fd_ctx_t *fdctx);
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
int32_t
|
|
Packit |
b2c0d9 |
client_type_to_gf_type(short l_type);
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
int
|
|
Packit |
b2c0d9 |
client_mark_fd_bad(xlator_t *this);
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
int
|
|
Packit |
b2c0d9 |
client_fd_lk_list_empty(fd_lk_ctx_t *lk_ctx, gf_boolean_t use_try_lock);
|
|
Packit |
b2c0d9 |
void
|
|
Packit |
b2c0d9 |
client_default_reopen_done(clnt_fd_ctx_t *fdctx, int64_t rfd, xlator_t *this);
|
|
Packit |
b2c0d9 |
void
|
|
Packit |
b2c0d9 |
client_attempt_reopen(fd_t *fd, xlator_t *this);
|
|
Packit |
b2c0d9 |
int
|
|
Packit |
b2c0d9 |
client_get_remote_fd(xlator_t *this, fd_t *fd, int flags, int64_t *remote_fd);
|
|
Packit |
b2c0d9 |
int
|
|
Packit |
b2c0d9 |
client_fd_fop_prepare_local(call_frame_t *frame, fd_t *fd, int64_t remote_fd);
|
|
Packit |
b2c0d9 |
gf_boolean_t
|
|
Packit |
b2c0d9 |
__is_fd_reopen_in_progress(clnt_fd_ctx_t *fdctx);
|
|
Packit |
b2c0d9 |
int
|
|
Packit |
b2c0d9 |
client_notify_dispatch(xlator_t *this, int32_t event, void *data, ...);
|
|
Packit |
b2c0d9 |
int
|
|
Packit |
b2c0d9 |
client_notify_dispatch_uniq(xlator_t *this, int32_t event, void *data, ...);
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
gf_boolean_t
|
|
Packit |
b2c0d9 |
client_is_reopen_needed(fd_t *fd, xlator_t *this, int64_t remote_fd);
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
int
|
|
Packit |
b2c0d9 |
client_add_fd_to_saved_fds(xlator_t *this, fd_t *fd, loc_t *loc, int32_t flags,
|
|
Packit |
b2c0d9 |
int64_t remote_fd, int is_dir);
|
|
Packit |
b2c0d9 |
int
|
|
Packit |
b2c0d9 |
client_handle_fop_requirements(
|
|
Packit |
b2c0d9 |
xlator_t *this, call_frame_t *frame, gfs3_compound_req *req,
|
|
Packit |
b2c0d9 |
clnt_local_t *local, struct iobref **req_iobref, struct iobref **rsp_iobref,
|
|
Packit |
b2c0d9 |
struct iovec *req_vector, struct iovec *rsp_vector, int *req_count,
|
|
Packit |
b2c0d9 |
int *rsp_count, default_args_t *args, int fop_enum, int index);
|
|
Packit |
b2c0d9 |
int
|
|
Packit |
b2c0d9 |
client_process_response(call_frame_t *frame, xlator_t *this,
|
|
Packit |
b2c0d9 |
struct rpc_req *req, gfs3_compound_rsp *rsp,
|
|
Packit |
b2c0d9 |
compound_args_cbk_t *args_cbk, int index);
|
|
Packit |
b2c0d9 |
void
|
|
Packit |
b2c0d9 |
compound_request_cleanup(gfs3_compound_req *req);
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
int
|
|
Packit |
b2c0d9 |
clnt_unserialize_rsp_locklist(xlator_t *this, struct gfs3_getactivelk_rsp *rsp,
|
|
Packit |
b2c0d9 |
lock_migration_info_t *lmi);
|
|
Packit |
b2c0d9 |
void
|
|
Packit |
b2c0d9 |
clnt_getactivelk_rsp_cleanup(gfs3_getactivelk_rsp *rsp);
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
void
|
|
Packit |
b2c0d9 |
clnt_setactivelk_req_cleanup(gfs3_setactivelk_req *req);
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
int
|
|
Packit |
b2c0d9 |
serialize_req_locklist(lock_migration_info_t *locklist,
|
|
Packit |
b2c0d9 |
gfs3_setactivelk_req *req);
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
void
|
|
Packit |
b2c0d9 |
client_compound_rsp_cleanup(gfs3_compound_rsp *rsp, int len);
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
void
|
|
Packit |
b2c0d9 |
clnt_getactivelk_rsp_cleanup_v2(gfx_getactivelk_rsp *rsp);
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
void
|
|
Packit |
b2c0d9 |
clnt_setactivelk_req_cleanup_v2(gfx_setactivelk_req *req);
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
int
|
|
Packit |
b2c0d9 |
serialize_req_locklist_v2(lock_migration_info_t *locklist,
|
|
Packit |
b2c0d9 |
gfx_setactivelk_req *req);
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
int
|
|
Packit |
b2c0d9 |
clnt_unserialize_rsp_locklist_v2(xlator_t *this,
|
|
Packit |
b2c0d9 |
struct gfx_getactivelk_rsp *rsp,
|
|
Packit |
b2c0d9 |
lock_migration_info_t *lmi);
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
int
|
|
Packit |
b2c0d9 |
unserialize_rsp_dirent_v2(xlator_t *this, struct gfx_readdir_rsp *rsp,
|
|
Packit |
b2c0d9 |
gf_dirent_t *entries);
|
|
Packit |
b2c0d9 |
int
|
|
Packit |
b2c0d9 |
unserialize_rsp_direntp_v2(xlator_t *this, fd_t *fd,
|
|
Packit |
b2c0d9 |
struct gfx_readdirp_rsp *rsp, gf_dirent_t *entries);
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
int
|
|
Packit |
b2c0d9 |
clnt_readdir_rsp_cleanup_v2(gfx_readdir_rsp *rsp);
|
|
Packit |
b2c0d9 |
int
|
|
Packit |
b2c0d9 |
clnt_readdirp_rsp_cleanup_v2(gfx_readdirp_rsp *rsp);
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
int
|
|
Packit |
b2c0d9 |
client_handle_fop_requirements_v2(
|
|
Packit |
b2c0d9 |
xlator_t *this, call_frame_t *frame, gfx_compound_req *req,
|
|
Packit |
b2c0d9 |
clnt_local_t *local, struct iobref **req_iobref, struct iobref **rsp_iobref,
|
|
Packit |
b2c0d9 |
struct iovec *req_vector, struct iovec *rsp_vector, int *req_count,
|
|
Packit |
b2c0d9 |
int *rsp_count, default_args_t *args, int fop_enum, int index);
|
|
Packit |
b2c0d9 |
int
|
|
Packit |
b2c0d9 |
client_process_response_v2(call_frame_t *frame, xlator_t *this,
|
|
Packit |
b2c0d9 |
struct rpc_req *req, gfx_compound_rsp *rsp,
|
|
Packit |
b2c0d9 |
compound_args_cbk_t *args_cbk, int index);
|
|
Packit |
b2c0d9 |
void
|
|
Packit |
b2c0d9 |
compound_request_cleanup_v2(gfx_compound_req *req);
|
|
Packit |
b2c0d9 |
void
|
|
Packit |
b2c0d9 |
client_compound_rsp_cleanup_v2(gfx_compound_rsp *rsp, int len);
|
|
Packit |
b2c0d9 |
|
|
Packit |
b2c0d9 |
#endif /* !_CLIENT_H */
|