This file is indexed.

/usr/include/glusterfs/rot-buffs.h is in glusterfs-common 3.7.6-1ubuntu1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
/*
  Copyright (c) 2008-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 __ROT_BUFFS_H
#define __ROT_BUFFS_H

#include "list.h"
#include "locking.h"
#include "common-utils.h"

typedef struct rbuf_iovec {
        struct iovec iov;

        struct list_head list;
} rbuf_iovec_t;

#define RBUF_IOVEC_SIZE  (sizeof (rbuf_iovec_t))

typedef struct rbuf_list {
        gf_lock_t c_lock;

        pthread_mutex_t b_lock;          /* protects this structure */
        pthread_cond_t b_cond;           /* signal for writer completion */

        gf_boolean_t awaiting;

        unsigned long long pending;      /* pending writers */
        unsigned long long completed;    /* completed writers */

        rbuf_iovec_t *rvec;              /* currently used IO vector */

        struct list_head veclist;        /* list of attached rbuf_iov */

        unsigned long long used;         /* consumable entries
                                             attached in ->veclist */
        unsigned long long total;        /* total entries in ->veclist (used
                                            during deallocation) */

        unsigned long seq[2];            /* if interested, this whould store
                                            the start sequence number and the
                                            range */

        struct list_head list;           /* attachment to rbuf_t */
} rbuf_list_t;

struct rlist_iter {
        struct list_head veclist;

        unsigned long long iter;
};

#define RLIST_ENTRY_COUNT(rlist)  rlist->used

#define rlist_iter_init(riter, rlist)              \
        do {                                       \
                (riter)->iter = rlist->used;       \
                (riter)->veclist = rlist->veclist; \
        } while (0)

#define rvec_for_each_entry(pos, riter)                                 \
        for (pos = list_entry                                           \
                     ((riter)->veclist.next, typeof(*pos), list);       \
             (riter)->iter > 0;                                         \
             pos = list_entry                                           \
                     (pos->list.next, typeof(*pos), list),              \
                     --((riter)->iter))

/**
 * Sequence number assigment routine is called during buffer
 * switch under rbuff ->lock.
 */
typedef void (sequence_fn) (rbuf_list_t *, void *);

#define RLIST_STORE_SEQ(rlist, start, range)    \
        do {                                    \
                rlist->seq[0] = start;          \
                rlist->seq[1] = range;          \
        } while (0)

#define RLIST_GET_SEQ(rlist, start, range)      \
        do {                                    \
                start = rlist->seq[0];          \
                range = rlist->seq[1];          \
        } while (0)

typedef struct rbuf {
        gf_lock_t lock;        /* protects "current" rlist */

        rbuf_list_t *current;  /* cached pointer to first free rlist */

        struct list_head freelist;
} rbuf_t;

typedef enum {
        RBUF_CONSUMABLE = 1,
        RBUF_BUSY,
        RBUF_EMPTY,
        RBUF_WOULD_STARVE,
} rlist_retval_t;

/* Initialization/Destruction */
rbuf_t *rbuf_init (int);
void rbuf_dtor (rbuf_t *);

/* Producer API */
char *rbuf_reserve_write_area (rbuf_t *, size_t, void **);
int rbuf_write_complete (void *);

/* Consumer API */
int rbuf_get_buffer (rbuf_t *, void **, sequence_fn *, void *);
int rbuf_wait_for_completion (rbuf_t *, void *,
                              void (*)(rbuf_list_t *, void *), void *);

#endif