Lines Matching refs:conf
85 static int check_mode(struct faulty_conf *conf, int mode)
87 if (conf->period[mode] == 0 &&
88 atomic_read(&conf->counters[mode]) <= 0)
92 if (atomic_dec_and_test(&conf->counters[mode])) {
93 if (conf->period[mode])
94 atomic_set(&conf->counters[mode], conf->period[mode]);
100 static int check_sector(struct faulty_conf *conf, sector_t start, sector_t end, int dir)
104 for (i=0; i<conf->nfaults; i++)
105 if (conf->faults[i] >= start &&
106 conf->faults[i] < end) {
108 switch (conf->modes[i] * 2 + dir) {
113 conf->modes[i] = NoPersist;
124 static void add_sector(struct faulty_conf *conf, sector_t start, int mode)
127 int n = conf->nfaults;
128 for (i=0; i<conf->nfaults; i++)
129 if (conf->faults[i] == start) {
131 case NoPersist: conf->modes[i] = mode; return;
133 if (conf->modes[i] == ReadPersistent ||
134 conf->modes[i] == ReadFixable)
135 conf->modes[i] = AllPersist;
137 conf->modes[i] = WritePersistent;
140 if (conf->modes[i] == WritePersistent)
141 conf->modes[i] = AllPersist;
143 conf->modes[i] = ReadPersistent;
146 if (conf->modes[i] == WritePersistent ||
147 conf->modes[i] == ReadPersistent)
148 conf->modes[i] = AllPersist;
150 conf->modes[i] = ReadFixable;
153 } else if (conf->modes[i] == NoPersist)
158 conf->faults[n] = start;
159 conf->modes[n] = mode;
160 if (conf->nfaults == n)
161 conf->nfaults = n+1;
166 struct faulty_conf *conf = mddev->private;
171 if (atomic_read(&conf->counters[WriteAll])) {
179 if (check_sector(conf, bio->bi_iter.bi_sector,
182 if (check_mode(conf, WritePersistent)) {
183 add_sector(conf, bio->bi_iter.bi_sector,
187 if (check_mode(conf, WriteTransient))
191 if (check_sector(conf, bio->bi_iter.bi_sector,
194 if (check_mode(conf, ReadTransient))
196 if (check_mode(conf, ReadPersistent)) {
197 add_sector(conf, bio->bi_iter.bi_sector,
201 if (check_mode(conf, ReadFixable)) {
202 add_sector(conf, bio->bi_iter.bi_sector,
210 struct bio *b = bio_alloc_clone(conf->rdev->bdev, bio, GFP_NOIO,
217 bio_set_dev(bio, conf->rdev->bdev);
225 struct faulty_conf *conf = mddev->private;
228 if ((n=atomic_read(&conf->counters[WriteTransient])) != 0)
230 n, conf->period[WriteTransient]);
232 if ((n=atomic_read(&conf->counters[ReadTransient])) != 0)
234 n, conf->period[ReadTransient]);
236 if ((n=atomic_read(&conf->counters[WritePersistent])) != 0)
238 n, conf->period[WritePersistent]);
240 if ((n=atomic_read(&conf->counters[ReadPersistent])) != 0)
242 n, conf->period[ReadPersistent]);
245 if ((n=atomic_read(&conf->counters[ReadFixable])) != 0)
247 n, conf->period[ReadFixable]);
249 if ((n=atomic_read(&conf->counters[WriteAll])) != 0)
252 seq_printf(seq, " nfaults=%d", conf->nfaults);
260 struct faulty_conf *conf = mddev->private;
267 conf->nfaults = 0;
271 conf->period[i] = 0;
272 atomic_set(&conf->counters[i], 0);
275 conf->period[mode] = count;
277 atomic_set(&conf->counters[mode], count);
300 struct faulty_conf *conf;
305 conf = kmalloc(sizeof(*conf), GFP_KERNEL);
306 if (!conf)
310 atomic_set(&conf->counters[i], 0);
311 conf->period[i] = 0;
313 conf->nfaults = 0;
316 conf->rdev = rdev;
322 mddev->private = conf;
331 struct faulty_conf *conf = priv;
333 kfree(conf);