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#ifndef _OBD_LOV_H__
38#define _OBD_LOV_H__
39
40#define LOV_DEFAULT_STRIPE_SIZE (1 << LNET_MTU_BITS)
41
42static inline int lov_stripe_md_size(__u16 stripes)
43{
44 return sizeof(struct lov_stripe_md) + stripes*sizeof(struct lov_oinfo*);
45}
46
47static inline __u32 lov_mds_md_size(__u16 stripes, __u32 lmm_magic)
48{
49 if (lmm_magic == LOV_MAGIC_V3)
50 return sizeof(struct lov_mds_md_v3) +
51 stripes * sizeof(struct lov_ost_data_v1);
52 else
53 return sizeof(struct lov_mds_md_v1) +
54 stripes * sizeof(struct lov_ost_data_v1);
55}
56
57struct lov_version_size {
58 __u32 lvs_magic;
59 size_t lvs_lmm_size;
60 size_t lvs_lod_size;
61};
62
63static inline __u32 lov_mds_md_stripecnt(int ea_size, __u32 lmm_magic)
64{
65 static const struct lov_version_size lmm_ver_size[] = {
66 { .lvs_magic = LOV_MAGIC_V3,
67 .lvs_lmm_size = sizeof(struct lov_mds_md_v3),
68 .lvs_lod_size = sizeof(struct lov_ost_data_v1) },
69 { .lvs_magic = LOV_MAGIC_V1,
70 .lvs_lmm_size = sizeof(struct lov_mds_md_v1),
71 .lvs_lod_size = sizeof(struct lov_ost_data_v1)} };
72 int i;
73
74 for (i = 0; i < ARRAY_SIZE(lmm_ver_size); i++) {
75 if (lmm_magic == lmm_ver_size[i].lvs_magic) {
76 if (ea_size <= lmm_ver_size[i].lvs_lmm_size)
77 return 0;
78 return (ea_size - lmm_ver_size[i].lvs_lmm_size) /
79 lmm_ver_size[i].lvs_lod_size;
80 }
81 }
82
83
84 return 0;
85}
86
87
88
89
90
91#if BITS_PER_LONG > 32
92# define lov_do_div64(n,base) ({ \
93 uint64_t __base = (base); \
94 uint64_t __rem; \
95 __rem = ((uint64_t)(n)) % __base; \
96 (n) = ((uint64_t)(n)) / __base; \
97 __rem; \
98 })
99#else
100# define lov_do_div64(n,base) ({ \
101 uint64_t __rem; \
102 if ((sizeof(base) > 4) && (((base) & 0xffffffff00000000ULL) != 0)) { \
103 int __remainder; \
104 LASSERTF(!((base) & (LOV_MIN_STRIPE_SIZE - 1)), "64 bit lov " \
105 "division %llu / %llu\n", (n), (uint64_t)(base)); \
106 __remainder = (n) & (LOV_MIN_STRIPE_SIZE - 1); \
107 (n) >>= LOV_MIN_STRIPE_BITS; \
108 __rem = do_div(n, (base) >> LOV_MIN_STRIPE_BITS); \
109 __rem <<= LOV_MIN_STRIPE_BITS; \
110 __rem += __remainder; \
111 } else { \
112 __rem = do_div(n, base); \
113 } \
114 __rem; \
115 })
116#endif
117
118#define IOC_LOV_TYPE 'g'
119#define IOC_LOV_MIN_NR 50
120#define IOC_LOV_SET_OSC_ACTIVE _IOWR('g', 50, long)
121#define IOC_LOV_MAX_NR 50
122
123#define QOS_DEFAULT_THRESHOLD 10
124#define QOS_DEFAULT_MAXAGE 5
125
126#endif
127