diff options
Diffstat (limited to 'xlators/features/bit-rot/src')
| -rw-r--r-- | xlators/features/bit-rot/src/bitd/bit-rot-bitd-messages.h | 82 | ||||
| -rw-r--r-- | xlators/features/bit-rot/src/bitd/bit-rot-scrub-status.h | 26 | ||||
| -rw-r--r-- | xlators/features/bit-rot/src/bitd/bit-rot-scrub.h | 31 | ||||
| -rw-r--r-- | xlators/features/bit-rot/src/bitd/bit-rot-ssm.h | 25 | ||||
| -rw-r--r-- | xlators/features/bit-rot/src/bitd/bit-rot.h | 313 | ||||
| -rw-r--r-- | xlators/features/bit-rot/src/stub/bit-rot-common.h | 179 | ||||
| -rw-r--r-- | xlators/features/bit-rot/src/stub/bit-rot-object-version.h | 12 | ||||
| -rw-r--r-- | xlators/features/bit-rot/src/stub/bit-rot-stub-mem-types.h | 32 | ||||
| -rw-r--r-- | xlators/features/bit-rot/src/stub/bit-rot-stub-messages.h | 52 | ||||
| -rw-r--r-- | xlators/features/bit-rot/src/stub/bit-rot-stub.h | 577 | 
10 files changed, 641 insertions, 688 deletions
diff --git a/xlators/features/bit-rot/src/bitd/bit-rot-bitd-messages.h b/xlators/features/bit-rot/src/bitd/bit-rot-bitd-messages.h index 89a67cc10b1..6f59933a31d 100644 --- a/xlators/features/bit-rot/src/bitd/bit-rot-bitd-messages.h +++ b/xlators/features/bit-rot/src/bitd/bit-rot-bitd-messages.h @@ -23,62 +23,30 @@   * glfs-message-id.h.   */ -GLFS_MSGID(BITROT_BITD, -        BRB_MSG_FD_CREATE_FAILED, -        BRB_MSG_READV_FAILED, -        BRB_MSG_BLOCK_READ_FAILED, -        BRB_MSG_CALC_CHECKSUM_FAILED, -        BRB_MSG_NO_MEMORY, -        BRB_MSG_GET_SIGN_FAILED, -        BRB_MSG_SET_SIGN_FAILED, -        BRB_MSG_OP_FAILED, -        BRB_MSG_READ_AND_SIGN_FAILED, -        BRB_MSG_SIGN_FAILED, -        BRB_MSG_GET_SUBVOL_FAILED, -        BRB_MSG_SET_TIMER_FAILED, -        BRB_MSG_GET_INFO_FAILED, -        BRB_MSG_PATH_FAILED, -        BRB_MSG_MARK_BAD_FILE, -        BRB_MSG_TRIGGER_SIGN, -        BRB_MSG_REGISTER_FAILED, -        BRB_MSG_CRAWLING_START, -        BRB_MSG_SPAWN_FAILED, -        BRB_MSG_INVALID_SUBVOL_CHILD, -        BRB_MSG_SKIP_OBJECT, -        BRB_MSG_NO_CHILD, -        BRB_MSG_CHECKSUM_MISMATCH, -        BRB_MSG_MARK_CORRUPTED, -        BRB_MSG_CRAWLING_FINISH, -        BRB_MSG_CALC_ERROR, -        BRB_MSG_LOOKUP_FAILED, -        BRB_MSG_PARTIAL_VERSION_PRESENCE, -        BRB_MSG_MEM_ACNT_FAILED, -        BRB_MSG_TIMER_WHEEL_UNAVAILABLE, -        BRB_MSG_BITROT_LOADED, -        BRB_MSG_SCALE_DOWN_FAILED, -        BRB_MSG_SCALE_UP_FAILED, -        BRB_MSG_SCALE_DOWN_SCRUBBER, -        BRB_MSG_SCALING_UP_SCRUBBER, -        BRB_MSG_UNKNOWN_THROTTLE, -        BRB_MSG_RATE_LIMIT_INFO, -        BRB_MSG_SCRUB_INFO, -        BRB_MSG_CONNECTED_TO_BRICK, -        BRB_MSG_BRICK_INFO, -        BRB_MSG_SUBVOL_CONNECT_FAILED, -        BRB_MSG_INVALID_SUBVOL, -        BRB_MSG_RESCHEDULE_SCRUBBER_FAILED, -        BRB_MSG_SCRUB_START, -        BRB_MSG_SCRUB_FINISH, -        BRB_MSG_SCRUB_RUNNING, -        BRB_MSG_SCRUB_RESCHEDULED, -        BRB_MSG_SCRUB_TUNABLE, -        BRB_MSG_SCRUB_THREAD_CLEANUP, -        BRB_MSG_SCRUBBER_CLEANED, -        BRB_MSG_GENERIC_SSM_INFO, -        BRB_MSG_ZERO_TIMEOUT_BUG, -        BRB_MSG_BAD_OBJ_READDIR_FAIL, -        BRB_MSG_SSM_FAILED, -        BRB_MSG_SCRUB_WAIT_FAILED -); +GLFS_MSGID(BITROT_BITD, BRB_MSG_FD_CREATE_FAILED, BRB_MSG_READV_FAILED, +           BRB_MSG_BLOCK_READ_FAILED, BRB_MSG_CALC_CHECKSUM_FAILED, +           BRB_MSG_NO_MEMORY, BRB_MSG_GET_SIGN_FAILED, BRB_MSG_SET_SIGN_FAILED, +           BRB_MSG_OP_FAILED, BRB_MSG_READ_AND_SIGN_FAILED, BRB_MSG_SIGN_FAILED, +           BRB_MSG_GET_SUBVOL_FAILED, BRB_MSG_SET_TIMER_FAILED, +           BRB_MSG_GET_INFO_FAILED, BRB_MSG_PATH_FAILED, BRB_MSG_MARK_BAD_FILE, +           BRB_MSG_TRIGGER_SIGN, BRB_MSG_REGISTER_FAILED, +           BRB_MSG_CRAWLING_START, BRB_MSG_SPAWN_FAILED, +           BRB_MSG_INVALID_SUBVOL_CHILD, BRB_MSG_SKIP_OBJECT, BRB_MSG_NO_CHILD, +           BRB_MSG_CHECKSUM_MISMATCH, BRB_MSG_MARK_CORRUPTED, +           BRB_MSG_CRAWLING_FINISH, BRB_MSG_CALC_ERROR, BRB_MSG_LOOKUP_FAILED, +           BRB_MSG_PARTIAL_VERSION_PRESENCE, BRB_MSG_MEM_ACNT_FAILED, +           BRB_MSG_TIMER_WHEEL_UNAVAILABLE, BRB_MSG_BITROT_LOADED, +           BRB_MSG_SCALE_DOWN_FAILED, BRB_MSG_SCALE_UP_FAILED, +           BRB_MSG_SCALE_DOWN_SCRUBBER, BRB_MSG_SCALING_UP_SCRUBBER, +           BRB_MSG_UNKNOWN_THROTTLE, BRB_MSG_RATE_LIMIT_INFO, +           BRB_MSG_SCRUB_INFO, BRB_MSG_CONNECTED_TO_BRICK, BRB_MSG_BRICK_INFO, +           BRB_MSG_SUBVOL_CONNECT_FAILED, BRB_MSG_INVALID_SUBVOL, +           BRB_MSG_RESCHEDULE_SCRUBBER_FAILED, BRB_MSG_SCRUB_START, +           BRB_MSG_SCRUB_FINISH, BRB_MSG_SCRUB_RUNNING, +           BRB_MSG_SCRUB_RESCHEDULED, BRB_MSG_SCRUB_TUNABLE, +           BRB_MSG_SCRUB_THREAD_CLEANUP, BRB_MSG_SCRUBBER_CLEANED, +           BRB_MSG_GENERIC_SSM_INFO, BRB_MSG_ZERO_TIMEOUT_BUG, +           BRB_MSG_BAD_OBJ_READDIR_FAIL, BRB_MSG_SSM_FAILED, +           BRB_MSG_SCRUB_WAIT_FAILED);  #endif /* !_BITROT_BITD_MESSAGES_H_ */ diff --git a/xlators/features/bit-rot/src/bitd/bit-rot-scrub-status.h b/xlators/features/bit-rot/src/bitd/bit-rot-scrub-status.h index 02bd0fab04e..24128b90a66 100644 --- a/xlators/features/bit-rot/src/bitd/bit-rot-scrub-status.h +++ b/xlators/features/bit-rot/src/bitd/bit-rot-scrub-status.h @@ -16,33 +16,33 @@  #include <pthread.h>  struct br_scrub_stats { -        uint64_t       scrubbed_files;       /* Total number of scrubbed file */ +    uint64_t scrubbed_files; /* Total number of scrubbed file */ -        uint64_t       unsigned_files;       /* Total number of unsigned file */ +    uint64_t unsigned_files; /* Total number of unsigned file */ -        uint64_t       scrub_duration;            /* Duration of last scrub */ +    uint64_t scrub_duration; /* Duration of last scrub */ -        char           last_scrub_time[1024];    /*last scrub completion time */ +    char last_scrub_time[1024]; /*last scrub completion time */ -        struct         timeval scrub_start_tv;   /* Scrubbing starting time*/ +    struct timeval scrub_start_tv; /* Scrubbing starting time*/ -        struct         timeval scrub_end_tv;     /* Scrubbing finishing time */ +    struct timeval scrub_end_tv; /* Scrubbing finishing time */ -        int8_t         scrub_running;           /* Scrub running or not */ +    int8_t scrub_running; /* Scrub running or not */ -        pthread_mutex_t  lock; +    pthread_mutex_t lock;  };  typedef struct br_scrub_stats br_scrub_stats_t;  void -br_inc_unsigned_file_count (br_scrub_stats_t *scrub_stat); +br_inc_unsigned_file_count(br_scrub_stats_t *scrub_stat);  void -br_inc_scrubbed_file (br_scrub_stats_t *scrub_stat); +br_inc_scrubbed_file(br_scrub_stats_t *scrub_stat);  void -br_update_scrub_start_time (br_scrub_stats_t *scrub_stat, struct timeval *tv); +br_update_scrub_start_time(br_scrub_stats_t *scrub_stat, struct timeval *tv);  void -br_update_scrub_finish_time (br_scrub_stats_t *scrub_stat, char *timestr, -                             struct timeval *tv); +br_update_scrub_finish_time(br_scrub_stats_t *scrub_stat, char *timestr, +                            struct timeval *tv);  #endif /* __BIT_ROT_SCRUB_STATUS_H__ */ diff --git a/xlators/features/bit-rot/src/bitd/bit-rot-scrub.h b/xlators/features/bit-rot/src/bitd/bit-rot-scrub.h index 8cc88ec153e..7a3c14abb93 100644 --- a/xlators/features/bit-rot/src/bitd/bit-rot-scrub.h +++ b/xlators/features/bit-rot/src/bitd/bit-rot-scrub.h @@ -14,24 +14,33 @@  #include "xlator.h"  #include "bit-rot.h" -void *br_fsscanner (void *); +void * +br_fsscanner(void *); -int32_t br_fsscan_schedule (xlator_t *); -int32_t br_fsscan_reschedule (xlator_t *); -int32_t br_fsscan_activate (xlator_t *); -int32_t br_fsscan_deactivate (xlator_t *); -int32_t br_fsscan_ondemand (xlator_t *); +int32_t +br_fsscan_schedule(xlator_t *); +int32_t +br_fsscan_reschedule(xlator_t *); +int32_t +br_fsscan_activate(xlator_t *); +int32_t +br_fsscan_deactivate(xlator_t *); +int32_t +br_fsscan_ondemand(xlator_t *); -int32_t br_scrubber_handle_options (xlator_t *, br_private_t *, dict_t *); +int32_t +br_scrubber_handle_options(xlator_t *, br_private_t *, dict_t *);  int32_t -br_scrubber_monitor_init (xlator_t *, br_private_t *); +br_scrubber_monitor_init(xlator_t *, br_private_t *); -int32_t br_scrubber_init (xlator_t *, br_private_t *); +int32_t +br_scrubber_init(xlator_t *, br_private_t *); -int32_t br_collect_bad_objects_from_children (xlator_t *this, dict_t *dict); +int32_t +br_collect_bad_objects_from_children(xlator_t *this, dict_t *dict);  void -br_child_set_scrub_state (br_child_t *, gf_boolean_t); +br_child_set_scrub_state(br_child_t *, gf_boolean_t);  #endif /* __BIT_ROT_SCRUB_H__ */ diff --git a/xlators/features/bit-rot/src/bitd/bit-rot-ssm.h b/xlators/features/bit-rot/src/bitd/bit-rot-ssm.h index 8609477180b..f3fbe2928b7 100644 --- a/xlators/features/bit-rot/src/bitd/bit-rot-ssm.h +++ b/xlators/features/bit-rot/src/bitd/bit-rot-ssm.h @@ -14,24 +14,25 @@  #include "xlator.h"  typedef enum br_scrub_state { -        BR_SCRUB_STATE_INACTIVE = 0, -        BR_SCRUB_STATE_PENDING, -        BR_SCRUB_STATE_ACTIVE, -        BR_SCRUB_STATE_PAUSED, -        BR_SCRUB_STATE_IPAUSED, -        BR_SCRUB_STATE_STALLED, -        BR_SCRUB_MAXSTATES, +    BR_SCRUB_STATE_INACTIVE = 0, +    BR_SCRUB_STATE_PENDING, +    BR_SCRUB_STATE_ACTIVE, +    BR_SCRUB_STATE_PAUSED, +    BR_SCRUB_STATE_IPAUSED, +    BR_SCRUB_STATE_STALLED, +    BR_SCRUB_MAXSTATES,  } br_scrub_state_t;  typedef enum br_scrub_event { -        BR_SCRUB_EVENT_SCHEDULE = 0, -        BR_SCRUB_EVENT_PAUSE, -        BR_SCRUB_EVENT_ONDEMAND, -        BR_SCRUB_MAXEVENTS, +    BR_SCRUB_EVENT_SCHEDULE = 0, +    BR_SCRUB_EVENT_PAUSE, +    BR_SCRUB_EVENT_ONDEMAND, +    BR_SCRUB_MAXEVENTS,  } br_scrub_event_t;  struct br_monitor; -int32_t br_scrub_state_machine (xlator_t *, gf_boolean_t); +int32_t +br_scrub_state_machine(xlator_t *, gf_boolean_t);  #endif /* __BIT_ROT_SSM_H__ */ diff --git a/xlators/features/bit-rot/src/bitd/bit-rot.h b/xlators/features/bit-rot/src/bitd/bit-rot.h index 670060c8d88..962b4d717e6 100644 --- a/xlators/features/bit-rot/src/bitd/bit-rot.h +++ b/xlators/features/bit-rot/src/bitd/bit-rot.h @@ -37,271 +37,270 @@  #define BR_WORKERS 4  typedef enum scrub_throttle { -        BR_SCRUB_THROTTLE_VOID       = -1, -        BR_SCRUB_THROTTLE_LAZY       = 0, -        BR_SCRUB_THROTTLE_NORMAL     = 1, -        BR_SCRUB_THROTTLE_AGGRESSIVE = 2, -        BR_SCRUB_THROTTLE_STALLED    = 3, +    BR_SCRUB_THROTTLE_VOID = -1, +    BR_SCRUB_THROTTLE_LAZY = 0, +    BR_SCRUB_THROTTLE_NORMAL = 1, +    BR_SCRUB_THROTTLE_AGGRESSIVE = 2, +    BR_SCRUB_THROTTLE_STALLED = 3,  } scrub_throttle_t;  typedef enum scrub_freq { -        BR_FSSCRUB_FREQ_HOURLY = 1, -        BR_FSSCRUB_FREQ_DAILY, -        BR_FSSCRUB_FREQ_WEEKLY, -        BR_FSSCRUB_FREQ_BIWEEKLY, -        BR_FSSCRUB_FREQ_MONTHLY, -        BR_FSSCRUB_FREQ_MINUTE, -        BR_FSSCRUB_FREQ_STALLED, +    BR_FSSCRUB_FREQ_HOURLY = 1, +    BR_FSSCRUB_FREQ_DAILY, +    BR_FSSCRUB_FREQ_WEEKLY, +    BR_FSSCRUB_FREQ_BIWEEKLY, +    BR_FSSCRUB_FREQ_MONTHLY, +    BR_FSSCRUB_FREQ_MINUTE, +    BR_FSSCRUB_FREQ_STALLED,  } scrub_freq_t; -#define signature_size(hl) (sizeof (br_isignature_t) + hl + 1) +#define signature_size(hl) (sizeof(br_isignature_t) + hl + 1)  struct br_scanfs { -        gf_lock_t entrylock; +    gf_lock_t entrylock; -        pthread_mutex_t waitlock; -        pthread_cond_t  waitcond; +    pthread_mutex_t waitlock; +    pthread_cond_t waitcond; -        unsigned int     entries; -        struct list_head queued; -        struct list_head ready; +    unsigned int entries; +    struct list_head queued; +    struct list_head ready;  };  /* just need three states to track child status */  typedef enum br_child_state { -        BR_CHILD_STATE_CONNECTED = 1, -        BR_CHILD_STATE_INITIALIZING, -        BR_CHILD_STATE_CONNFAILED, -        BR_CHILD_STATE_DISCONNECTED, +    BR_CHILD_STATE_CONNECTED = 1, +    BR_CHILD_STATE_INITIALIZING, +    BR_CHILD_STATE_CONNFAILED, +    BR_CHILD_STATE_DISCONNECTED,  } br_child_state_t;  struct br_child { -        pthread_mutex_t lock;         /* protects child state */ -        char witnessed;               /* witnessed at least one successful -                                         connection */ -        br_child_state_t c_state;     /* current state of this child */ +    pthread_mutex_t lock;     /* protects child state */ +    char witnessed;           /* witnessed at least one successful +                                 connection */ +    br_child_state_t c_state; /* current state of this child */ -        char child_up;                /* Indicates whether this child is -                                         up or not */ -        xlator_t *xl;                 /* client xlator corresponding to -                                         this child */ -        inode_table_t *table;         /* inode table for this child */ -        char brick_path[PATH_MAX];    /* brick export directory of this -                                         child */ -        struct list_head list;        /* hook to attach to the list of -                                         UP children */ -        xlator_t *this;               /* Bit rot xlator */ +    char child_up;             /* Indicates whether this child is +                                  up or not */ +    xlator_t *xl;              /* client xlator corresponding to +                                  this child */ +    inode_table_t *table;      /* inode table for this child */ +    char brick_path[PATH_MAX]; /* brick export directory of this +                                  child */ +    struct list_head list;     /* hook to attach to the list of +                                  UP children */ +    xlator_t *this;            /* Bit rot xlator */ -        pthread_t thread;             /* initial crawler for unsigned -                                         object(s) or scrub crawler */ -        int threadrunning;            /* active thread */ +    pthread_t thread;  /* initial crawler for unsigned +                          object(s) or scrub crawler */ +    int threadrunning; /* active thread */ -        struct mem_pool *timer_pool;  /* timer-wheel's timer mem-pool */ +    struct mem_pool *timer_pool; /* timer-wheel's timer mem-pool */ -        struct timeval tv; +    struct timeval tv; -        struct br_scanfs fsscan;      /* per subvolume FS scanner */ +    struct br_scanfs fsscan; /* per subvolume FS scanner */ -        gf_boolean_t active_scrubbing; /* Actively scrubbing or not */ +    gf_boolean_t active_scrubbing; /* Actively scrubbing or not */  };  typedef struct br_child br_child_t;  struct br_obj_n_workers { -        struct list_head objects;         /* queue of objects expired from the -                                             timer wheel and ready to be picked -                                             up for signing */ -        pthread_t workers[BR_WORKERS];    /* Threads which pick up the objects -                                             from the above queue and start -                                             signing each object */ +    struct list_head objects;      /* queue of objects expired from the +                                      timer wheel and ready to be picked +                                      up for signing */ +    pthread_t workers[BR_WORKERS]; /* Threads which pick up the objects +                                      from the above queue and start +                                      signing each object */  };  struct br_scrubber { -        xlator_t *this; +    xlator_t *this; -        scrub_throttle_t throttle; +    scrub_throttle_t throttle; -        /** -         * frequency of scanning for this subvolume. this should -         * normally be per-child, but since all children follow the -         * same frequency for a volume, this option ends up here -         * instead of br_child_t. -         */ -        scrub_freq_t frequency; +    /** +     * frequency of scanning for this subvolume. this should +     * normally be per-child, but since all children follow the +     * same frequency for a volume, this option ends up here +     * instead of br_child_t. +     */ +    scrub_freq_t frequency; -        gf_boolean_t frequency_reconf; -        gf_boolean_t throttle_reconf; +    gf_boolean_t frequency_reconf; +    gf_boolean_t throttle_reconf; -        pthread_mutex_t mutex; -        pthread_cond_t  cond; +    pthread_mutex_t mutex; +    pthread_cond_t cond; -        unsigned int nr_scrubbers; -        struct list_head scrubbers; +    unsigned int nr_scrubbers; +    struct list_head scrubbers; -        /** -         * list of "rotatable" subvolume(s) undergoing scrubbing -         */ -        struct list_head scrublist; +    /** +     * list of "rotatable" subvolume(s) undergoing scrubbing +     */ +    struct list_head scrublist;  };  struct br_monitor { -        gf_lock_t lock; -        pthread_t thread;         /* Monitor thread */ - -        gf_boolean_t  inited; -        pthread_mutex_t mutex; -        pthread_cond_t cond;      /* Thread starts and will be waiting on cond. -                                     First child which is up wakes this up */ - -        xlator_t *this; -        /* scheduler */ -        uint32_t boot; - -        int32_t active_child_count; /* Number of children currently scrubbing */ -        gf_boolean_t kick;          /* This variable tracks the scrubber is -                                     * kicked or not. Both 'kick' and -                                     * 'active_child_count' uses the same pair -                                     * of mutex-cond variable, i.e, wakelock and -                                     * wakecond. */ - -        pthread_mutex_t wakelock; -        pthread_cond_t  wakecond; - -        gf_boolean_t done; -        pthread_mutex_t donelock; -        pthread_cond_t  donecond; - -        struct gf_tw_timer_list *timer; -        br_scrub_state_t state;   /* current scrub state */ +    gf_lock_t lock; +    pthread_t thread; /* Monitor thread */ + +    gf_boolean_t inited; +    pthread_mutex_t mutex; +    pthread_cond_t cond; /* Thread starts and will be waiting on cond. +                            First child which is up wakes this up */ + +    xlator_t *this; +    /* scheduler */ +    uint32_t boot; + +    int32_t active_child_count; /* Number of children currently scrubbing */ +    gf_boolean_t kick;          /* This variable tracks the scrubber is +                                 * kicked or not. Both 'kick' and +                                 * 'active_child_count' uses the same pair +                                 * of mutex-cond variable, i.e, wakelock and +                                 * wakecond. */ + +    pthread_mutex_t wakelock; +    pthread_cond_t wakecond; + +    gf_boolean_t done; +    pthread_mutex_t donelock; +    pthread_cond_t donecond; + +    struct gf_tw_timer_list *timer; +    br_scrub_state_t state; /* current scrub state */  };  typedef struct br_obj_n_workers br_obj_n_workers_t;  typedef struct br_private br_private_t; -typedef void (*br_scrubbed_file_update) (br_private_t *priv); +typedef void (*br_scrubbed_file_update)(br_private_t *priv);  struct br_private { -        pthread_mutex_t lock; +    pthread_mutex_t lock; -        struct list_head bricks;          /* list of bricks from which enents -                                             have been received */ +    struct list_head bricks; /* list of bricks from which enents +                                have been received */ -        struct list_head signing; +    struct list_head signing; -        pthread_cond_t object_cond;       /* handling signing of objects */ -        int child_count; -        br_child_t *children;             /* list of subvolumes */ -        int up_children; +    pthread_cond_t object_cond; /* handling signing of objects */ +    int child_count; +    br_child_t *children; /* list of subvolumes */ +    int up_children; -        pthread_cond_t cond;              /* handling CHILD_UP notifications */ -        pthread_t thread;                 /* thread for connecting each UP -                                             child with changelog */ +    pthread_cond_t cond; /* handling CHILD_UP notifications */ +    pthread_t thread;    /* thread for connecting each UP +                            child with changelog */ -        struct tvec_base *timer_wheel;    /* timer wheel where the objects which -                                             changelog has sent sits and waits -                                             for expiry */ -        br_obj_n_workers_t *obj_queue;    /* place holder for all the objects -                                             that are expired from timer wheel -                                             and ready to be picked up for -                                             signing and the workers which sign -                                             the objects */ +    struct tvec_base *timer_wheel; /* timer wheel where the objects which +                                      changelog has sent sits and waits +                                      for expiry */ +    br_obj_n_workers_t *obj_queue; /* place holder for all the objects +                                      that are expired from timer wheel +                                      and ready to be picked up for +                                      signing and the workers which sign +                                      the objects */ -        uint32_t expiry_time;              /* objects "wait" time */ +    uint32_t expiry_time; /* objects "wait" time */ -        tbf_t *tbf;                    /* token bucket filter */ +    tbf_t *tbf; /* token bucket filter */ -        gf_boolean_t iamscrubber;         /* function as a fs scrubber */ +    gf_boolean_t iamscrubber; /* function as a fs scrubber */ -        struct br_scrub_stats scrub_stat; /* statistics of scrub*/ +    struct br_scrub_stats scrub_stat; /* statistics of scrub*/ -        struct br_scrubber fsscrub;       /* scrubbers for this subvolume */ +    struct br_scrubber fsscrub; /* scrubbers for this subvolume */ -        struct br_monitor scrub_monitor;  /* scrubber monitor */ +    struct br_monitor scrub_monitor; /* scrubber monitor */  };  struct br_object { -        xlator_t *this; +    xlator_t *this; -        uuid_t gfid; +    uuid_t gfid; -        unsigned long signedversion;    /* version against which this object will -                                           be signed */ -        br_child_t *child;              /* object's subvolume */ +    unsigned long signedversion; /* version against which this object will +                                    be signed */ +    br_child_t *child;           /* object's subvolume */ -        int sign_info; +    int sign_info; -        struct list_head list;          /* hook to add to the queue once the -                                           object is expired from timer wheel */ -        void *data; +    struct list_head list; /* hook to add to the queue once the +                              object is expired from timer wheel */ +    void *data;  };  typedef struct br_object br_object_t; -typedef int32_t (br_scrub_ssm_call) (xlator_t *); +typedef int32_t(br_scrub_ssm_call)(xlator_t *);  void -br_log_object (xlator_t *, char *, uuid_t, int32_t); +br_log_object(xlator_t *, char *, uuid_t, int32_t);  void -br_log_object_path (xlator_t *, char *, const char *, int32_t); +br_log_object_path(xlator_t *, char *, const char *, int32_t);  int32_t -br_calculate_obj_checksum (unsigned char *, -                           br_child_t *, fd_t *, struct iatt *); +br_calculate_obj_checksum(unsigned char *, br_child_t *, fd_t *, struct iatt *);  int32_t -br_prepare_loc (xlator_t *, br_child_t *, loc_t *, gf_dirent_t *, loc_t *); +br_prepare_loc(xlator_t *, br_child_t *, loc_t *, gf_dirent_t *, loc_t *);  gf_boolean_t -bitd_is_bad_file (xlator_t *, br_child_t *, loc_t *, fd_t *); +bitd_is_bad_file(xlator_t *, br_child_t *, loc_t *, fd_t *);  static inline void -_br_set_child_state (br_child_t *child, br_child_state_t state) +_br_set_child_state(br_child_t *child, br_child_state_t state)  { -        child->c_state = state; +    child->c_state = state;  }  static inline int -_br_is_child_connected (br_child_t *child) +_br_is_child_connected(br_child_t *child)  { -        return (child->c_state == BR_CHILD_STATE_CONNECTED); +    return (child->c_state == BR_CHILD_STATE_CONNECTED);  }  static inline int -_br_is_child_scrub_active (br_child_t *child) +_br_is_child_scrub_active(br_child_t *child)  { -        return child->active_scrubbing; +    return child->active_scrubbing;  }  static inline int -_br_child_failed_conn (br_child_t *child) +_br_child_failed_conn(br_child_t *child)  { -        return (child->c_state == BR_CHILD_STATE_CONNFAILED); +    return (child->c_state == BR_CHILD_STATE_CONNFAILED);  }  static inline int -_br_child_witnessed_connection (br_child_t *child) +_br_child_witnessed_connection(br_child_t *child)  { -        return (child->witnessed == 1); +    return (child->witnessed == 1);  }  /* scrub state */  static inline void -_br_monitor_set_scrub_state (struct br_monitor *scrub_monitor, -                           br_scrub_state_t state) +_br_monitor_set_scrub_state(struct br_monitor *scrub_monitor, +                            br_scrub_state_t state)  { -        scrub_monitor->state = state; +    scrub_monitor->state = state;  }  static inline br_scrub_event_t -_br_child_get_scrub_event (struct br_scrubber *fsscrub) +_br_child_get_scrub_event(struct br_scrubber *fsscrub)  { -        return (fsscrub->frequency == BR_FSSCRUB_FREQ_STALLED) -             ? BR_SCRUB_EVENT_PAUSE : BR_SCRUB_EVENT_SCHEDULE; +    return (fsscrub->frequency == BR_FSSCRUB_FREQ_STALLED) +               ? BR_SCRUB_EVENT_PAUSE +               : BR_SCRUB_EVENT_SCHEDULE;  }  int32_t -br_get_bad_objects_list (xlator_t *this, dict_t **dict); - +br_get_bad_objects_list(xlator_t *this, dict_t **dict);  #endif /* __BIT_ROT_H__ */ diff --git a/xlators/features/bit-rot/src/stub/bit-rot-common.h b/xlators/features/bit-rot/src/stub/bit-rot-common.h index 2afc9f47c29..ef683ac7f9f 100644 --- a/xlators/features/bit-rot/src/stub/bit-rot-common.h +++ b/xlators/features/bit-rot/src/stub/bit-rot-common.h @@ -14,71 +14,71 @@  #include "glusterfs.h"  #include "bit-rot-object-version.h" -#define BR_VXATTR_VERSION   (1 << 0) +#define BR_VXATTR_VERSION (1 << 0)  #define BR_VXATTR_SIGNATURE (1 << 1)  #define BR_VXATTR_SIGN_MISSING (BR_VXATTR_SIGNATURE) -#define BR_VXATTR_ALL_MISSING                           \ -        (BR_VXATTR_VERSION | BR_VXATTR_SIGNATURE) +#define BR_VXATTR_ALL_MISSING (BR_VXATTR_VERSION | BR_VXATTR_SIGNATURE) -#define BR_BAD_OBJ_CONTAINER (uuid_t){0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8} +#define BR_BAD_OBJ_CONTAINER                                                   \ +    (uuid_t) { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8 }  typedef enum br_vxattr_state { -        BR_VXATTR_STATUS_FULL     = 0, -        BR_VXATTR_STATUS_MISSING  = 1, -        BR_VXATTR_STATUS_UNSIGNED = 2, -        BR_VXATTR_STATUS_INVALID  = 3, +    BR_VXATTR_STATUS_FULL = 0, +    BR_VXATTR_STATUS_MISSING = 1, +    BR_VXATTR_STATUS_UNSIGNED = 2, +    BR_VXATTR_STATUS_INVALID = 3,  } br_vxattr_status_t;  typedef enum br_sign_state { -        BR_SIGN_INVALID     = -1, -        BR_SIGN_NORMAL      = 0, -        BR_SIGN_REOPEN_WAIT = 1, -        BR_SIGN_QUICK       = 2, +    BR_SIGN_INVALID = -1, +    BR_SIGN_NORMAL = 0, +    BR_SIGN_REOPEN_WAIT = 1, +    BR_SIGN_QUICK = 2,  } br_sign_state_t;  static inline br_vxattr_status_t -br_version_xattr_state (dict_t *xattr, br_version_t **obuf, -                        br_signature_t **sbuf, gf_boolean_t *objbad) +br_version_xattr_state(dict_t *xattr, br_version_t **obuf, +                       br_signature_t **sbuf, gf_boolean_t *objbad)  { -        int32_t             ret    = 0; -        int32_t             vxattr = 0; -        br_vxattr_status_t  status; -        void               *data   = NULL; - -        /** -         * The key being present in the dict indicates the xattr was set on -         * disk. The presence of xattr itself as of now is suffecient to say -         * the the object is bad. -         */ -        *objbad = _gf_false; -        ret = dict_get_bin (xattr, BITROT_OBJECT_BAD_KEY, (void **)&data); -        if (!ret) -                *objbad = _gf_true; - -        ret = dict_get_bin (xattr, BITROT_CURRENT_VERSION_KEY, (void **)obuf); -        if (ret) -                vxattr |= BR_VXATTR_VERSION; - -        ret = dict_get_bin (xattr, BITROT_SIGNING_VERSION_KEY, (void **)sbuf); -        if (ret) -                vxattr |= BR_VXATTR_SIGNATURE; - -        switch (vxattr) { +    int32_t ret = 0; +    int32_t vxattr = 0; +    br_vxattr_status_t status; +    void *data = NULL; + +    /** +     * The key being present in the dict indicates the xattr was set on +     * disk. The presence of xattr itself as of now is suffecient to say +     * the the object is bad. +     */ +    *objbad = _gf_false; +    ret = dict_get_bin(xattr, BITROT_OBJECT_BAD_KEY, (void **)&data); +    if (!ret) +        *objbad = _gf_true; + +    ret = dict_get_bin(xattr, BITROT_CURRENT_VERSION_KEY, (void **)obuf); +    if (ret) +        vxattr |= BR_VXATTR_VERSION; + +    ret = dict_get_bin(xattr, BITROT_SIGNING_VERSION_KEY, (void **)sbuf); +    if (ret) +        vxattr |= BR_VXATTR_SIGNATURE; + +    switch (vxattr) {          case 0: -                status = BR_VXATTR_STATUS_FULL; -                break; +            status = BR_VXATTR_STATUS_FULL; +            break;          case BR_VXATTR_SIGN_MISSING: -                status = BR_VXATTR_STATUS_UNSIGNED; -                break; +            status = BR_VXATTR_STATUS_UNSIGNED; +            break;          case BR_VXATTR_ALL_MISSING: -                status = BR_VXATTR_STATUS_MISSING; -                break; +            status = BR_VXATTR_STATUS_MISSING; +            break;          default: -                status = BR_VXATTR_STATUS_INVALID; -        } +            status = BR_VXATTR_STATUS_INVALID; +    } -        return status; +    return status;  }  /** @@ -86,13 +86,13 @@ br_version_xattr_state (dict_t *xattr, br_version_t **obuf,   * signing.   */  typedef struct br_isignature_in { -        int8_t signaturetype;            /* signature type            */ +    int8_t signaturetype; /* signature type            */ -        unsigned long signedversion;     /* version against which the -                                            object was signed         */ +    unsigned long signedversion; /* version against which the +                                    object was signed         */ -        size_t signaturelen;             /* signature length          */ -        char signature[0];               /* object signature          */ +    size_t signaturelen; /* signature length          */ +    char signature[0];   /* object signature          */  } br_isignature_t;  /** @@ -100,80 +100,79 @@ typedef struct br_isignature_in {   * verification.   */  typedef struct br_isignature_out { -        char stale;                      /* stale signature?          */ +    char stale; /* stale signature?          */ -        unsigned long version;           /* current signed version    */ +    unsigned long version; /* current signed version    */ -        uint32_t time[2];                /* time when the object -                                            got dirtied               */ +    uint32_t time[2]; /* time when the object +                         got dirtied               */ -        int8_t signaturetype;            /* hash type                 */ -        size_t signaturelen;             /* signature length          */ -        char   signature[0];             /* signature (hash)          */ +    int8_t signaturetype; /* hash type                 */ +    size_t signaturelen;  /* signature length          */ +    char signature[0];    /* signature (hash)          */  } br_isignature_out_t;  typedef struct br_stub_init { -        uint32_t timebuf[2]; -        char export[PATH_MAX]; +    uint32_t timebuf[2]; +    char export[PATH_MAX];  } br_stub_init_t;  typedef enum { -        BR_SIGNATURE_TYPE_VOID   = -1,   /* object is not signed       */ -        BR_SIGNATURE_TYPE_ZERO   = 0,    /* min boundary               */ -        BR_SIGNATURE_TYPE_SHA256 = 1,    /* signed with SHA256         */ -        BR_SIGNATURE_TYPE_MAX    = 2,    /* max boundary               */ +    BR_SIGNATURE_TYPE_VOID = -1,  /* object is not signed       */ +    BR_SIGNATURE_TYPE_ZERO = 0,   /* min boundary               */ +    BR_SIGNATURE_TYPE_SHA256 = 1, /* signed with SHA256         */ +    BR_SIGNATURE_TYPE_MAX = 2,    /* max boundary               */  } br_signature_type;  /* BitRot stub start time (virtual xattr) */ -#define GLUSTERFS_GET_BR_STUB_INIT_TIME  "trusted.glusterfs.bit-rot.stub-init" +#define GLUSTERFS_GET_BR_STUB_INIT_TIME "trusted.glusterfs.bit-rot.stub-init"  /* signing/reopen hint */  #define BR_OBJECT_RESIGN 0 -#define BR_OBJECT_REOPEN  1 -#define BR_REOPEN_SIGN_HINT_KEY  "trusted.glusterfs.bit-rot.reopen-hint" +#define BR_OBJECT_REOPEN 1 +#define BR_REOPEN_SIGN_HINT_KEY "trusted.glusterfs.bit-rot.reopen-hint"  static inline int -br_is_signature_type_valid (int8_t signaturetype) +br_is_signature_type_valid(int8_t signaturetype)  { -        return ((signaturetype > BR_SIGNATURE_TYPE_ZERO) -                 && (signaturetype < BR_SIGNATURE_TYPE_MAX)); +    return ((signaturetype > BR_SIGNATURE_TYPE_ZERO) && +            (signaturetype < BR_SIGNATURE_TYPE_MAX));  }  static inline void -br_set_default_ongoingversion (br_version_t *buf, uint32_t *tv) +br_set_default_ongoingversion(br_version_t *buf, uint32_t *tv)  { -        buf->ongoingversion = BITROT_DEFAULT_CURRENT_VERSION; -        buf->timebuf[0] = tv[0]; -        buf->timebuf[1] = tv[1]; +    buf->ongoingversion = BITROT_DEFAULT_CURRENT_VERSION; +    buf->timebuf[0] = tv[0]; +    buf->timebuf[1] = tv[1];  }  static inline void -br_set_default_signature (br_signature_t *buf, size_t *size) +br_set_default_signature(br_signature_t *buf, size_t *size)  { -        buf->signaturetype = (int8_t) BR_SIGNATURE_TYPE_VOID; -        buf->signedversion = BITROT_DEFAULT_SIGNING_VERSION; +    buf->signaturetype = (int8_t)BR_SIGNATURE_TYPE_VOID; +    buf->signedversion = BITROT_DEFAULT_SIGNING_VERSION; -        *size = sizeof (br_signature_t); /* no signature */ +    *size = sizeof(br_signature_t); /* no signature */  }  static inline void -br_set_ongoingversion (br_version_t *buf, -                       unsigned long version, uint32_t *tv) +br_set_ongoingversion(br_version_t *buf, unsigned long version, uint32_t *tv)  { -        buf->ongoingversion = version; -        buf->timebuf[0] = tv[0]; -        buf->timebuf[1] = tv[1]; +    buf->ongoingversion = version; +    buf->timebuf[0] = tv[0]; +    buf->timebuf[1] = tv[1];  }  static inline void -br_set_signature (br_signature_t *buf, -                  br_isignature_t *sign, size_t signaturelen, size_t *size) +br_set_signature(br_signature_t *buf, br_isignature_t *sign, +                 size_t signaturelen, size_t *size)  { -        buf->signaturetype  = sign->signaturetype; -        buf->signedversion  = ntohl (sign->signedversion); +    buf->signaturetype = sign->signaturetype; +    buf->signedversion = ntohl(sign->signedversion); -        memcpy (buf->signature, sign->signature, signaturelen); -        *size = sizeof (br_signature_t) + signaturelen; +    memcpy(buf->signature, sign->signature, signaturelen); +    *size = sizeof(br_signature_t) + signaturelen;  }  #endif /* __BIT_ROT_COMMON_H__ */ diff --git a/xlators/features/bit-rot/src/stub/bit-rot-object-version.h b/xlators/features/bit-rot/src/stub/bit-rot-object-version.h index 1f2497aebe9..7ae6a5200df 100644 --- a/xlators/features/bit-rot/src/stub/bit-rot-object-version.h +++ b/xlators/features/bit-rot/src/stub/bit-rot-object-version.h @@ -15,16 +15,16 @@   * on-disk formats for ongoing version and object signature.   */  typedef struct br_version { -        unsigned long ongoingversion; -        uint32_t timebuf[2]; +    unsigned long ongoingversion; +    uint32_t timebuf[2];  } br_version_t; -typedef struct __attribute__ ((__packed__)) br_signature { -        int8_t signaturetype; +typedef struct __attribute__((__packed__)) br_signature { +    int8_t signaturetype; -        unsigned long signedversion; +    unsigned long signedversion; -        char signature[0]; +    char signature[0];  } br_signature_t;  #endif diff --git a/xlators/features/bit-rot/src/stub/bit-rot-stub-mem-types.h b/xlators/features/bit-rot/src/stub/bit-rot-stub-mem-types.h index 1652a3ebf8d..a3e7b03291e 100644 --- a/xlators/features/bit-rot/src/stub/bit-rot-stub-mem-types.h +++ b/xlators/features/bit-rot/src/stub/bit-rot-stub-mem-types.h @@ -14,22 +14,22 @@  #include "mem-types.h"  enum br_mem_types { -        gf_br_stub_mt_private_t   = gf_common_mt_end + 1, -        gf_br_stub_mt_version_t, -        gf_br_stub_mt_inode_ctx_t, -        gf_br_stub_mt_signature_t, -        gf_br_mt_br_private_t, -        gf_br_mt_br_child_t, -        gf_br_mt_br_object_t, -        gf_br_mt_br_ob_n_wk_t, -        gf_br_mt_br_scrubber_t, -        gf_br_mt_br_fsscan_entry_t, -        gf_br_stub_mt_br_stub_fd_t, -        gf_br_stub_mt_br_scanner_freq_t, -        gf_br_stub_mt_sigstub_t, -        gf_br_mt_br_child_event_t, -        gf_br_stub_mt_misc, -        gf_br_stub_mt_end, +    gf_br_stub_mt_private_t = gf_common_mt_end + 1, +    gf_br_stub_mt_version_t, +    gf_br_stub_mt_inode_ctx_t, +    gf_br_stub_mt_signature_t, +    gf_br_mt_br_private_t, +    gf_br_mt_br_child_t, +    gf_br_mt_br_object_t, +    gf_br_mt_br_ob_n_wk_t, +    gf_br_mt_br_scrubber_t, +    gf_br_mt_br_fsscan_entry_t, +    gf_br_stub_mt_br_stub_fd_t, +    gf_br_stub_mt_br_scanner_freq_t, +    gf_br_stub_mt_sigstub_t, +    gf_br_mt_br_child_event_t, +    gf_br_stub_mt_misc, +    gf_br_stub_mt_end,  };  #endif diff --git a/xlators/features/bit-rot/src/stub/bit-rot-stub-messages.h b/xlators/features/bit-rot/src/stub/bit-rot-stub-messages.h index 2ade4f03997..cccc3b9c599 100644 --- a/xlators/features/bit-rot/src/stub/bit-rot-stub-messages.h +++ b/xlators/features/bit-rot/src/stub/bit-rot-stub-messages.h @@ -23,40 +23,22 @@   * glfs-message-id.h.   */ -GLFS_MSGID(BITROT_STUB, -        BRS_MSG_NO_MEMORY, -        BRS_MSG_SET_EVENT_FAILED, -        BRS_MSG_MEM_ACNT_FAILED, -        BRS_MSG_CREATE_FRAME_FAILED, -        BRS_MSG_SET_CONTEXT_FAILED, -        BRS_MSG_CHANGE_VERSION_FAILED, -        BRS_MSG_ADD_FD_TO_LIST_FAILED, -        BRS_MSG_SET_FD_CONTEXT_FAILED, -        BRS_MSG_CREATE_ANONYMOUS_FD_FAILED, -        BRS_MSG_NO_CHILD, -        BRS_MSG_STUB_ALLOC_FAILED, -        BRS_MSG_GET_INODE_CONTEXT_FAILED, -        BRS_MSG_CANCEL_SIGN_THREAD_FAILED, -        BRS_MSG_ADD_FD_TO_INODE, -        BRS_MSG_SIGN_VERSION_ERROR, -        BRS_MSG_BAD_OBJ_MARK_FAIL, -        BRS_MSG_NON_SCRUB_BAD_OBJ_MARK, -        BRS_MSG_REMOVE_INTERNAL_XATTR, -        BRS_MSG_SET_INTERNAL_XATTR, -        BRS_MSG_BAD_OBJECT_ACCESS, -        BRS_MSG_BAD_CONTAINER_FAIL, -        BRS_MSG_BAD_OBJECT_DIR_FAIL, -        BRS_MSG_BAD_OBJECT_DIR_SEEK_FAIL, -        BRS_MSG_BAD_OBJECT_DIR_TELL_FAIL, -        BRS_MSG_BAD_OBJECT_DIR_READ_FAIL, -        BRS_MSG_GET_FD_CONTEXT_FAILED, -        BRS_MSG_BAD_HANDLE_DIR_NULL, -        BRS_MSG_BAD_OBJ_THREAD_FAIL, -        BRS_MSG_BAD_OBJ_DIR_CLOSE_FAIL, -        BRS_MSG_LINK_FAIL, -        BRS_MSG_BAD_OBJ_UNLINK_FAIL, -        BRS_MSG_DICT_SET_FAILED, -        BRS_MSG_PATH_GET_FAILED -); +GLFS_MSGID(BITROT_STUB, BRS_MSG_NO_MEMORY, BRS_MSG_SET_EVENT_FAILED, +           BRS_MSG_MEM_ACNT_FAILED, BRS_MSG_CREATE_FRAME_FAILED, +           BRS_MSG_SET_CONTEXT_FAILED, BRS_MSG_CHANGE_VERSION_FAILED, +           BRS_MSG_ADD_FD_TO_LIST_FAILED, BRS_MSG_SET_FD_CONTEXT_FAILED, +           BRS_MSG_CREATE_ANONYMOUS_FD_FAILED, BRS_MSG_NO_CHILD, +           BRS_MSG_STUB_ALLOC_FAILED, BRS_MSG_GET_INODE_CONTEXT_FAILED, +           BRS_MSG_CANCEL_SIGN_THREAD_FAILED, BRS_MSG_ADD_FD_TO_INODE, +           BRS_MSG_SIGN_VERSION_ERROR, BRS_MSG_BAD_OBJ_MARK_FAIL, +           BRS_MSG_NON_SCRUB_BAD_OBJ_MARK, BRS_MSG_REMOVE_INTERNAL_XATTR, +           BRS_MSG_SET_INTERNAL_XATTR, BRS_MSG_BAD_OBJECT_ACCESS, +           BRS_MSG_BAD_CONTAINER_FAIL, BRS_MSG_BAD_OBJECT_DIR_FAIL, +           BRS_MSG_BAD_OBJECT_DIR_SEEK_FAIL, BRS_MSG_BAD_OBJECT_DIR_TELL_FAIL, +           BRS_MSG_BAD_OBJECT_DIR_READ_FAIL, BRS_MSG_GET_FD_CONTEXT_FAILED, +           BRS_MSG_BAD_HANDLE_DIR_NULL, BRS_MSG_BAD_OBJ_THREAD_FAIL, +           BRS_MSG_BAD_OBJ_DIR_CLOSE_FAIL, BRS_MSG_LINK_FAIL, +           BRS_MSG_BAD_OBJ_UNLINK_FAIL, BRS_MSG_DICT_SET_FAILED, +           BRS_MSG_PATH_GET_FAILED);  #endif /* !_BITROT_STUB_MESSAGES_H_ */ diff --git a/xlators/features/bit-rot/src/stub/bit-rot-stub.h b/xlators/features/bit-rot/src/stub/bit-rot-stub.h index e15f1cecbc0..a15667e323a 100644 --- a/xlators/features/bit-rot/src/stub/bit-rot-stub.h +++ b/xlators/features/bit-rot/src/stub/bit-rot-stub.h @@ -1,11 +1,11 @@ - /* -   Copyright (c) 2015 Red Hat, Inc. <http://www.redhat.com> -   This file is part of GlusterFS. - -   This file is licensed to you under your choice of the GNU Lesser -   General Public License, version 3 or any later version (LGPLv3 or -   later), or the GNU General Public License, version 2 (GPLv2), in all -   cases as published by the Free Software Foundation. +/* +  Copyright (c) 2015 Red Hat, Inc. <http://www.redhat.com> +  This file is part of GlusterFS. + +  This file is licensed to you under your choice of the GNU Lesser +  General Public License, version 3 or any later version (LGPLv3 or +  later), or the GNU General Public License, version 2 (GPLv2), in all +  cases as published by the Free Software Foundation.  */  #ifndef __BIT_ROT_STUB_H__  #define __BIT_ROT_STUB_H__ @@ -25,305 +25,302 @@  #include "syncop.h"  #include "syncop-utils.h" -#define BAD_OBJECT_THREAD_STACK_SIZE   ((size_t)(1024*1024)) +#define BAD_OBJECT_THREAD_STACK_SIZE ((size_t)(1024 * 1024))  #define BR_STUB_DUMP_STR_SIZE 65536 -#define BR_PATH_MAX_EXTRA (PATH_MAX+1024) -#define BR_PATH_MAX_PLUS (PATH_MAX+2048) +#define BR_PATH_MAX_EXTRA (PATH_MAX + 1024) +#define BR_PATH_MAX_PLUS (PATH_MAX + 2048)  /*   * Oops. Spelling mistake. Correcting it   */ -#define OLD_BR_STUB_QUARANTINE_DIR GF_HIDDEN_PATH"/quanrantine" -#define BR_STUB_QUARANTINE_DIR GF_HIDDEN_PATH"/quarantine" +#define OLD_BR_STUB_QUARANTINE_DIR GF_HIDDEN_PATH "/quanrantine" +#define BR_STUB_QUARANTINE_DIR GF_HIDDEN_PATH "/quarantine"  /* do not reference frame->local in cbk unless initialized.   * Assigned 0x1 marks verisoning flag between call path and   * cbk path.   */ -#define BR_STUB_VER_NOT_ACTIVE_THEN_GOTO(frame, priv, label) do {      \ -                if (priv->do_versioning)                               \ -                        frame->local = (void *)0x1;                    \ -                else                                                   \ -                        goto label;                                    \ -        } while (0) - -#define BR_STUB_VER_COND_GOTO(priv, cond, label) do {       \ -                if (!priv->do_versioning || cond)           \ -                        goto label;                         \ -        } while (0) - -#define BR_STUB_VER_ENABLED_IN_CALLPATH(frame, flag) do {   \ -                if (frame->local)                           \ -                        flag = _gf_true;                    \ -                if (frame->local == (void *) 0x1)           \ -                        frame->local = NULL;                \ -        } while (0) - -#define BR_STUB_RESET_LOCAL_NULL(frame) do {           \ -                if (frame->local == (void *)0x1)      \ -                        frame->local = NULL;           \ -        } while (0) - -typedef int (br_stub_version_cbk) (call_frame_t *, void *, -                                   xlator_t *, int32_t, int32_t, dict_t *); +#define BR_STUB_VER_NOT_ACTIVE_THEN_GOTO(frame, priv, label)                   \ +    do {                                                                       \ +        if (priv->do_versioning)                                               \ +            frame->local = (void *)0x1;                                        \ +        else                                                                   \ +            goto label;                                                        \ +    } while (0) + +#define BR_STUB_VER_COND_GOTO(priv, cond, label)                               \ +    do {                                                                       \ +        if (!priv->do_versioning || cond)                                      \ +            goto label;                                                        \ +    } while (0) + +#define BR_STUB_VER_ENABLED_IN_CALLPATH(frame, flag)                           \ +    do {                                                                       \ +        if (frame->local)                                                      \ +            flag = _gf_true;                                                   \ +        if (frame->local == (void *)0x1)                                       \ +            frame->local = NULL;                                               \ +    } while (0) + +#define BR_STUB_RESET_LOCAL_NULL(frame)                                        \ +    do {                                                                       \ +        if (frame->local == (void *)0x1)                                       \ +            frame->local = NULL;                                               \ +    } while (0) + +typedef int(br_stub_version_cbk)(call_frame_t *, void *, xlator_t *, int32_t, +                                 int32_t, dict_t *);  typedef struct br_stub_inode_ctx { -        int need_writeback;                     /* does the inode need -                                                      a writeback to disk? */ -        unsigned long currentversion;           /* ongoing version */ - -        int            info_sign; -        struct list_head fd_list; /* list of open fds or fds participating in -                                     write operations */ -        gf_boolean_t bad_object; +    int need_writeback;           /* does the inode need +                                        a writeback to disk? */ +    unsigned long currentversion; /* ongoing version */ + +    int info_sign; +    struct list_head fd_list; /* list of open fds or fds participating in +                                 write operations */ +    gf_boolean_t bad_object;  } br_stub_inode_ctx_t;  typedef struct br_stub_fd { -        fd_t *fd; -        struct list_head list; -        struct bad_object_dir { -                DIR *dir; -                off_t dir_eof; -        } bad_object; +    fd_t *fd; +    struct list_head list; +    struct bad_object_dir { +        DIR *dir; +        off_t dir_eof; +    } bad_object;  } br_stub_fd_t; -#define I_DIRTY  (1<<0)        /* inode needs writeback */ -#define I_MODIFIED (1<<1) -#define WRITEBACK_DURABLE 1    /* writeback is durable */ +#define I_DIRTY (1 << 0) /* inode needs writeback */ +#define I_MODIFIED (1 << 1) +#define WRITEBACK_DURABLE 1 /* writeback is durable */  /**   * This could just have been a plain struct without unions and all,   * but we may need additional things in the future.   */  typedef struct br_stub_local { -        call_stub_t *fopstub;   /* stub for original fop */ - -        int versioningtype;     /* not much used atm */ - -        union { -                struct br_stub_ctx { -                        fd_t          *fd; -                        uuid_t         gfid; -                        inode_t       *inode; -                        unsigned long  version; -                } context; -        } u; +    call_stub_t *fopstub; /* stub for original fop */ + +    int versioningtype; /* not much used atm */ + +    union { +        struct br_stub_ctx { +            fd_t *fd; +            uuid_t gfid; +            inode_t *inode; +            unsigned long version; +        } context; +    } u;  } br_stub_local_t;  #define BR_STUB_NO_VERSIONING (1 << 0)  #define BR_STUB_INCREMENTAL_VERSIONING (1 << 1)  typedef struct br_stub_private { -        gf_boolean_t do_versioning; +    gf_boolean_t do_versioning; -        uint32_t boot[2]; -        char export[PATH_MAX]; +    uint32_t boot[2]; +    char export[PATH_MAX]; -        pthread_mutex_t lock; -        pthread_cond_t  cond; +    pthread_mutex_t lock; +    pthread_cond_t cond; -        struct list_head squeue;      /* ordered signing queue */ -        pthread_t signth; -        struct bad_objects_container { -                pthread_t thread; -                pthread_mutex_t bad_lock; -                pthread_cond_t  bad_cond; -                struct list_head bad_queue; -        } container; -        struct mem_pool *local_pool; +    struct list_head squeue; /* ordered signing queue */ +    pthread_t signth; +    struct bad_objects_container { +        pthread_t thread; +        pthread_mutex_t bad_lock; +        pthread_cond_t bad_cond; +        struct list_head bad_queue; +    } container; +    struct mem_pool *local_pool; -        char stub_basepath[BR_PATH_MAX_EXTRA]; +    char stub_basepath[BR_PATH_MAX_EXTRA]; -        uuid_t bad_object_dir_gfid; +    uuid_t bad_object_dir_gfid;  } br_stub_private_t;  br_stub_fd_t * -br_stub_fd_new (void); - +br_stub_fd_new(void);  int -__br_stub_fd_ctx_set (xlator_t *this, fd_t *fd, br_stub_fd_t *br_stub_fd); +__br_stub_fd_ctx_set(xlator_t *this, fd_t *fd, br_stub_fd_t *br_stub_fd);  br_stub_fd_t * -__br_stub_fd_ctx_get (xlator_t *this, fd_t *fd); +__br_stub_fd_ctx_get(xlator_t *this, fd_t *fd);  br_stub_fd_t * -br_stub_fd_ctx_get (xlator_t *this, fd_t *fd); +br_stub_fd_ctx_get(xlator_t *this, fd_t *fd);  int32_t -br_stub_fd_ctx_set (xlator_t *this, fd_t *fd, br_stub_fd_t *br_stub_fd); +br_stub_fd_ctx_set(xlator_t *this, fd_t *fd, br_stub_fd_t *br_stub_fd);  static inline gf_boolean_t -__br_stub_is_bad_object (br_stub_inode_ctx_t *ctx) +__br_stub_is_bad_object(br_stub_inode_ctx_t *ctx)  { -        return ctx->bad_object; +    return ctx->bad_object;  }  static inline void -__br_stub_mark_object_bad (br_stub_inode_ctx_t *ctx) +__br_stub_mark_object_bad(br_stub_inode_ctx_t *ctx)  { -        ctx->bad_object = _gf_true; +    ctx->bad_object = _gf_true;  }  /* inode writeback helpers */  static inline void -__br_stub_mark_inode_dirty (br_stub_inode_ctx_t *ctx) +__br_stub_mark_inode_dirty(br_stub_inode_ctx_t *ctx)  { -        ctx->need_writeback |= I_DIRTY; +    ctx->need_writeback |= I_DIRTY;  }  static inline void -__br_stub_mark_inode_synced (br_stub_inode_ctx_t *ctx) +__br_stub_mark_inode_synced(br_stub_inode_ctx_t *ctx)  { -        ctx->need_writeback &= ~I_DIRTY; +    ctx->need_writeback &= ~I_DIRTY;  }  static inline int -__br_stub_is_inode_dirty (br_stub_inode_ctx_t *ctx) +__br_stub_is_inode_dirty(br_stub_inode_ctx_t *ctx)  { -        return (ctx->need_writeback & I_DIRTY); +    return (ctx->need_writeback & I_DIRTY);  }  /* inode mofification markers */  static inline void -__br_stub_set_inode_modified (br_stub_inode_ctx_t *ctx) +__br_stub_set_inode_modified(br_stub_inode_ctx_t *ctx)  { -        ctx->need_writeback |= I_MODIFIED; +    ctx->need_writeback |= I_MODIFIED;  }  static inline void -__br_stub_unset_inode_modified (br_stub_inode_ctx_t *ctx) +__br_stub_unset_inode_modified(br_stub_inode_ctx_t *ctx)  { -        ctx->need_writeback &= ~I_MODIFIED; +    ctx->need_writeback &= ~I_MODIFIED;  }  static inline int -__br_stub_is_inode_modified (br_stub_inode_ctx_t *ctx) +__br_stub_is_inode_modified(br_stub_inode_ctx_t *ctx)  { -        return (ctx->need_writeback & I_MODIFIED); +    return (ctx->need_writeback & I_MODIFIED);  } -  static inline int -br_stub_require_release_call (xlator_t *this, fd_t *fd, br_stub_fd_t **fd_ctx) +br_stub_require_release_call(xlator_t *this, fd_t *fd, br_stub_fd_t **fd_ctx)  { -        int32_t ret = 0; -        br_stub_fd_t *br_stub_fd = NULL; +    int32_t ret = 0; +    br_stub_fd_t *br_stub_fd = NULL; -        br_stub_fd = br_stub_fd_new (); -        if (!br_stub_fd) -                return -1; +    br_stub_fd = br_stub_fd_new(); +    if (!br_stub_fd) +        return -1; -        br_stub_fd->fd = fd; -        INIT_LIST_HEAD (&br_stub_fd->list); +    br_stub_fd->fd = fd; +    INIT_LIST_HEAD(&br_stub_fd->list); -        ret = br_stub_fd_ctx_set (this, fd, br_stub_fd); -        if (ret) -                gf_msg (this->name, GF_LOG_WARNING, 0, -                        BRS_MSG_SET_CONTEXT_FAILED, -                        "could not set fd context (for release callback"); -        else -                *fd_ctx = br_stub_fd; +    ret = br_stub_fd_ctx_set(this, fd, br_stub_fd); +    if (ret) +        gf_msg(this->name, GF_LOG_WARNING, 0, BRS_MSG_SET_CONTEXT_FAILED, +               "could not set fd context (for release callback"); +    else +        *fd_ctx = br_stub_fd; -        return ret; +    return ret;  }  /* get/set inode context helpers */  static inline int -__br_stub_get_inode_ctx (xlator_t *this, -                         inode_t *inode, uint64_t *ctx) +__br_stub_get_inode_ctx(xlator_t *this, inode_t *inode, uint64_t *ctx)  { -        return __inode_ctx_get (inode, this, ctx); +    return __inode_ctx_get(inode, this, ctx);  }  static inline int -br_stub_get_inode_ctx (xlator_t *this, -                       inode_t *inode, uint64_t *ctx) +br_stub_get_inode_ctx(xlator_t *this, inode_t *inode, uint64_t *ctx)  { -        int ret = -1; +    int ret = -1; -        LOCK (&inode->lock); -        { -                ret = __br_stub_get_inode_ctx (this, inode, ctx); -        } -        UNLOCK (&inode->lock); +    LOCK(&inode->lock); +    { +        ret = __br_stub_get_inode_ctx(this, inode, ctx); +    } +    UNLOCK(&inode->lock); -        return ret; +    return ret;  }  static inline int -br_stub_set_inode_ctx (xlator_t *this, -                       inode_t *inode, br_stub_inode_ctx_t *ctx) +br_stub_set_inode_ctx(xlator_t *this, inode_t *inode, br_stub_inode_ctx_t *ctx)  { -        uint64_t ctx_addr = (uint64_t) ctx; -        return inode_ctx_set (inode, this, &ctx_addr); +    uint64_t ctx_addr = (uint64_t)ctx; +    return inode_ctx_set(inode, this, &ctx_addr);  }  /* version get/set helpers */  static inline unsigned long -__br_stub_writeback_version (br_stub_inode_ctx_t *ctx) +__br_stub_writeback_version(br_stub_inode_ctx_t *ctx)  { -        return (ctx->currentversion + 1); +    return (ctx->currentversion + 1);  }  static inline void -__br_stub_set_ongoing_version (br_stub_inode_ctx_t *ctx, unsigned long version) +__br_stub_set_ongoing_version(br_stub_inode_ctx_t *ctx, unsigned long version)  { -        if (ctx->currentversion < version) -                ctx->currentversion = version; -        else -                gf_msg ("bit-rot-stub", GF_LOG_WARNING, 0, -                        BRS_MSG_CHANGE_VERSION_FAILED, "current version: %lu" -                        "new version: %lu", ctx->currentversion, version); +    if (ctx->currentversion < version) +        ctx->currentversion = version; +    else +        gf_msg("bit-rot-stub", GF_LOG_WARNING, 0, BRS_MSG_CHANGE_VERSION_FAILED, +               "current version: %lu" +               "new version: %lu", +               ctx->currentversion, version);  }  static inline int -__br_stub_can_trigger_release (inode_t *inode, -                               br_stub_inode_ctx_t *ctx, unsigned long *version) +__br_stub_can_trigger_release(inode_t *inode, br_stub_inode_ctx_t *ctx, +                              unsigned long *version)  { -        /** -         * If the inode is modified, then it has to be dirty. An inode is -         * marked dirty once version is increased. Its marked as modified -         * when the modification call (write/truncate) which triggered -         * the versioning is successful. -         */ -        if (__br_stub_is_inode_modified (ctx) -            && list_empty (&ctx->fd_list) -            && (ctx->info_sign != BR_SIGN_REOPEN_WAIT)) { - -                GF_ASSERT (__br_stub_is_inode_dirty (ctx) == 0); - -                if (version) -                        *version = htonl (ctx->currentversion); -                return 1; -        } - -        return 0; +    /** +     * If the inode is modified, then it has to be dirty. An inode is +     * marked dirty once version is increased. Its marked as modified +     * when the modification call (write/truncate) which triggered +     * the versioning is successful. +     */ +    if (__br_stub_is_inode_modified(ctx) && list_empty(&ctx->fd_list) && +        (ctx->info_sign != BR_SIGN_REOPEN_WAIT)) { +        GF_ASSERT(__br_stub_is_inode_dirty(ctx) == 0); + +        if (version) +            *version = htonl(ctx->currentversion); +        return 1; +    } + +    return 0;  }  static inline int32_t -br_stub_get_ongoing_version (xlator_t *this, -                             inode_t *inode, unsigned long *version) +br_stub_get_ongoing_version(xlator_t *this, inode_t *inode, +                            unsigned long *version)  { -        int32_t ret = 0; -        uint64_t ctx_addr = 0; -        br_stub_inode_ctx_t *ctx = NULL; - -        LOCK (&inode->lock); -        { -                ret = __inode_ctx_get (inode, this, &ctx_addr); -                if (ret < 0) -                        goto unblock; -                ctx = (br_stub_inode_ctx_t *) (long) ctx_addr; -                *version = ctx->currentversion; -        } - unblock: -        UNLOCK (&inode->lock); - -        return ret; +    int32_t ret = 0; +    uint64_t ctx_addr = 0; +    br_stub_inode_ctx_t *ctx = NULL; + +    LOCK(&inode->lock); +    { +        ret = __inode_ctx_get(inode, this, &ctx_addr); +        if (ret < 0) +            goto unblock; +        ctx = (br_stub_inode_ctx_t *)(long)ctx_addr; +        *version = ctx->currentversion; +    } +unblock: +    UNLOCK(&inode->lock); + +    return ret;  }  /** @@ -332,45 +329,44 @@ br_stub_get_ongoing_version (xlator_t *this,   * *needs* to be valid in the caller.   */  static inline br_stub_inode_ctx_t * -__br_stub_get_ongoing_version_ctx (xlator_t *this, -                                   inode_t *inode, unsigned long *version) +__br_stub_get_ongoing_version_ctx(xlator_t *this, inode_t *inode, +                                  unsigned long *version)  { -        int32_t ret = 0; -        uint64_t ctx_addr = 0; -        br_stub_inode_ctx_t *ctx = NULL; - -        ret = __inode_ctx_get (inode, this, &ctx_addr); -        if (ret < 0) -                return NULL; -        ctx = (br_stub_inode_ctx_t *) (long) ctx_addr; -        if (version) -                *version = ctx->currentversion; - -        return ctx; +    int32_t ret = 0; +    uint64_t ctx_addr = 0; +    br_stub_inode_ctx_t *ctx = NULL; + +    ret = __inode_ctx_get(inode, this, &ctx_addr); +    if (ret < 0) +        return NULL; +    ctx = (br_stub_inode_ctx_t *)(long)ctx_addr; +    if (version) +        *version = ctx->currentversion; + +    return ctx;  }  /* filter for xattr fetch */  static inline int -br_stub_is_internal_xattr (const char *name) +br_stub_is_internal_xattr(const char *name)  { -        if (name -            && ((strncmp (name, BITROT_CURRENT_VERSION_KEY, -                          SLEN (BITROT_CURRENT_VERSION_KEY)) == 0) -                || (strncmp (name, BITROT_SIGNING_VERSION_KEY, -                             SLEN (BITROT_SIGNING_VERSION_KEY)) == 0))) -                return 1; -        return 0; +    if (name && ((strncmp(name, BITROT_CURRENT_VERSION_KEY, +                          SLEN(BITROT_CURRENT_VERSION_KEY)) == 0) || +                 (strncmp(name, BITROT_SIGNING_VERSION_KEY, +                          SLEN(BITROT_SIGNING_VERSION_KEY)) == 0))) +        return 1; +    return 0;  }  static inline void -br_stub_remove_vxattrs (dict_t *xattr) +br_stub_remove_vxattrs(dict_t *xattr)  { -        if (xattr) { -                dict_del (xattr, BITROT_OBJECT_BAD_KEY); -                dict_del (xattr, BITROT_CURRENT_VERSION_KEY); -                dict_del (xattr, BITROT_SIGNING_VERSION_KEY); -                dict_del (xattr, BITROT_SIGNING_XATTR_SIZE_KEY); -        } +    if (xattr) { +        dict_del(xattr, BITROT_OBJECT_BAD_KEY); +        dict_del(xattr, BITROT_CURRENT_VERSION_KEY); +        dict_del(xattr, BITROT_SIGNING_VERSION_KEY); +        dict_del(xattr, BITROT_SIGNING_XATTR_SIZE_KEY); +    }  }  /** @@ -384,64 +380,63 @@ br_stub_remove_vxattrs (dict_t *xattr)   * errors can be made into enums.   */  static inline int -br_stub_is_bad_object (xlator_t *this, inode_t *inode) +br_stub_is_bad_object(xlator_t *this, inode_t *inode)  { -        int                  bad_object = 0; -        gf_boolean_t         tmp        = _gf_false; -        uint64_t             ctx_addr   = 0; -        br_stub_inode_ctx_t *ctx        = NULL; -        int32_t              ret        = -1; - -        ret = br_stub_get_inode_ctx (this, inode, &ctx_addr); -        if (ret) { -                gf_msg (this->name, GF_LOG_ERROR, 0, -                        BRS_MSG_GET_INODE_CONTEXT_FAILED, -                        "failed to get the inode context for the inode %s", -                        uuid_utoa (inode->gfid)); -                bad_object = -1; -                goto out; -        } - -        ctx = (br_stub_inode_ctx_t *)(long)ctx_addr; - -        LOCK (&inode->lock); -        { -                tmp = __br_stub_is_bad_object (ctx); -                if (tmp) -                        bad_object = -2; -        } -        UNLOCK (&inode->lock); +    int bad_object = 0; +    gf_boolean_t tmp = _gf_false; +    uint64_t ctx_addr = 0; +    br_stub_inode_ctx_t *ctx = NULL; +    int32_t ret = -1; + +    ret = br_stub_get_inode_ctx(this, inode, &ctx_addr); +    if (ret) { +        gf_msg(this->name, GF_LOG_ERROR, 0, BRS_MSG_GET_INODE_CONTEXT_FAILED, +               "failed to get the inode context for the inode %s", +               uuid_utoa(inode->gfid)); +        bad_object = -1; +        goto out; +    } + +    ctx = (br_stub_inode_ctx_t *)(long)ctx_addr; + +    LOCK(&inode->lock); +    { +        tmp = __br_stub_is_bad_object(ctx); +        if (tmp) +            bad_object = -2; +    } +    UNLOCK(&inode->lock);  out: -        return bad_object; +    return bad_object;  }  static inline int32_t -br_stub_mark_object_bad (xlator_t *this, inode_t *inode) +br_stub_mark_object_bad(xlator_t *this, inode_t *inode)  { -        int32_t  ret = -1; -        uint64_t ctx_addr = 0; -        br_stub_inode_ctx_t *ctx = NULL; - -        ret = br_stub_get_inode_ctx (this, inode, &ctx_addr); -        if (ret) { -                gf_msg (this->name, GF_LOG_ERROR, 0, -                        BRS_MSG_GET_INODE_CONTEXT_FAILED, "failed to get the " -                        "inode context for the inode %s", -                        uuid_utoa (inode->gfid)); -               goto out; -        } - -        ctx = (br_stub_inode_ctx_t *)(long)ctx_addr; - -        LOCK (&inode->lock); -        { -                __br_stub_mark_object_bad (ctx); -        } -        UNLOCK (&inode->lock); +    int32_t ret = -1; +    uint64_t ctx_addr = 0; +    br_stub_inode_ctx_t *ctx = NULL; + +    ret = br_stub_get_inode_ctx(this, inode, &ctx_addr); +    if (ret) { +        gf_msg(this->name, GF_LOG_ERROR, 0, BRS_MSG_GET_INODE_CONTEXT_FAILED, +               "failed to get the " +               "inode context for the inode %s", +               uuid_utoa(inode->gfid)); +        goto out; +    } + +    ctx = (br_stub_inode_ctx_t *)(long)ctx_addr; + +    LOCK(&inode->lock); +    { +        __br_stub_mark_object_bad(ctx); +    } +    UNLOCK(&inode->lock);  out: -        return ret; +    return ret;  }  /** @@ -449,68 +444,68 @@ out:   * given to the caller and the caller has to decide what to do.   */  static inline int32_t -br_stub_mark_xdata_bad_object (xlator_t *this, inode_t *inode, dict_t *xdata) +br_stub_mark_xdata_bad_object(xlator_t *this, inode_t *inode, dict_t *xdata)  { -        int32_t    ret = 0; +    int32_t ret = 0; -        if (br_stub_is_bad_object (this, inode) == -2) -                ret = dict_set_int32 (xdata, GLUSTERFS_BAD_INODE, 1); +    if (br_stub_is_bad_object(this, inode) == -2) +        ret = dict_set_int32(xdata, GLUSTERFS_BAD_INODE, 1); -        return ret; +    return ret;  }  int32_t -br_stub_add_fd_to_inode (xlator_t *this, fd_t *fd, br_stub_inode_ctx_t *ctx); +br_stub_add_fd_to_inode(xlator_t *this, fd_t *fd, br_stub_inode_ctx_t *ctx);  br_sign_state_t -__br_stub_inode_sign_state (br_stub_inode_ctx_t *ctx, glusterfs_fop_t fop, -                            fd_t *fd); +__br_stub_inode_sign_state(br_stub_inode_ctx_t *ctx, glusterfs_fop_t fop, +                           fd_t *fd);  int -br_stub_dir_create (xlator_t *this, br_stub_private_t *priv); +br_stub_dir_create(xlator_t *this, br_stub_private_t *priv);  int -br_stub_add (xlator_t *this, uuid_t gfid); +br_stub_add(xlator_t *this, uuid_t gfid);  int32_t -br_stub_create_stub_gfid (xlator_t *this, char *stub_gfid_path, uuid_t gfid); +br_stub_create_stub_gfid(xlator_t *this, char *stub_gfid_path, uuid_t gfid);  int -br_stub_dir_create (xlator_t *this, br_stub_private_t *priv); +br_stub_dir_create(xlator_t *this, br_stub_private_t *priv);  call_stub_t * -__br_stub_dequeue (struct list_head *callstubs); +__br_stub_dequeue(struct list_head *callstubs);  void -__br_stub_enqueue (struct list_head *callstubs, call_stub_t *stub); +__br_stub_enqueue(struct list_head *callstubs, call_stub_t *stub);  void -br_stub_worker_enqueue (xlator_t *this, call_stub_t *stub); +br_stub_worker_enqueue(xlator_t *this, call_stub_t *stub);  void * -br_stub_worker (void *data); +br_stub_worker(void *data);  int32_t -br_stub_lookup_wrapper (call_frame_t *frame, xlator_t *this, -                        loc_t *loc, dict_t *xattr_req); +br_stub_lookup_wrapper(call_frame_t *frame, xlator_t *this, loc_t *loc, +                       dict_t *xattr_req);  int32_t -br_stub_readdir_wrapper (call_frame_t *frame, xlator_t *this, -                         fd_t *fd, size_t size, off_t off, dict_t *xdata); +br_stub_readdir_wrapper(call_frame_t *frame, xlator_t *this, fd_t *fd, +                        size_t size, off_t off, dict_t *xdata);  int -br_stub_del (xlator_t *this, uuid_t gfid); +br_stub_del(xlator_t *this, uuid_t gfid);  int -br_stub_bad_objects_path (xlator_t *this, fd_t *fd, gf_dirent_t *entries, -                          dict_t **dict); +br_stub_bad_objects_path(xlator_t *this, fd_t *fd, gf_dirent_t *entries, +                         dict_t **dict);  void -br_stub_entry_xattr_fill (xlator_t *this, char *hpath, gf_dirent_t *entry, -                          dict_t *dict); +br_stub_entry_xattr_fill(xlator_t *this, char *hpath, gf_dirent_t *entry, +                         dict_t *dict);  int -br_stub_get_path_of_gfid (xlator_t *this, inode_t *parent, inode_t *inode, -                          uuid_t gfid, char **path); +br_stub_get_path_of_gfid(xlator_t *this, inode_t *parent, inode_t *inode, +                         uuid_t gfid, char **path);  #endif /* __BIT_ROT_STUB_H__ */  | 
