Blame xlators/protocol/client/src/client.h

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 */