Lines Matching defs:mddev
24 static inline struct dev_info *which_dev(struct mddev *mddev, sector_t sector)
30 hi = mddev->raid_disks - 1;
31 conf = mddev->private;
49 static sector_t linear_size(struct mddev *mddev, sector_t sectors, int raid_disks)
54 conf = mddev->private;
62 static struct linear_conf *linear_conf(struct mddev *mddev, int raid_disks)
75 rdev_for_each(rdev, mddev) {
82 mdname(mddev));
87 if (mddev->chunk_sectors) {
89 sector_div(sectors, mddev->chunk_sectors);
90 rdev->sectors = sectors * mddev->chunk_sectors;
93 disk_stack_limits(mddev->gendisk, rdev->bdev,
101 mdname(mddev));
116 * conf->raid_disks is copy of mddev->raid_disks. The reason to
117 * keep a copy of mddev->raid_disks in struct linear_conf is,
118 * mddev->raid_disks may not be consistent with pointers number of
122 * pointers in conf->disks[] array, and mddev->private is updated
135 static int linear_run (struct mddev *mddev)
140 if (md_check_no_bitmap(mddev))
142 conf = linear_conf(mddev, mddev->raid_disks);
146 mddev->private = conf;
147 md_set_array_sectors(mddev, linear_size(mddev, 0, 0));
149 ret = md_integrity_register(mddev);
152 mddev->private = NULL;
157 static int linear_add(struct mddev *mddev, struct md_rdev *rdev)
169 if (rdev->saved_raid_disk != mddev->raid_disks)
175 newconf = linear_conf(mddev,mddev->raid_disks+1);
181 * value of mddev->raid_disks, WARN_ONCE() is just used to make
186 mddev_suspend(mddev);
187 oldconf = rcu_dereference_protected(mddev->private,
188 lockdep_is_held(&mddev->reconfig_mutex));
189 mddev->raid_disks++;
190 WARN_ONCE(mddev->raid_disks != newconf->raid_disks,
191 "copied raid_disks doesn't match mddev->raid_disks");
192 rcu_assign_pointer(mddev->private, newconf);
193 md_set_array_sectors(mddev, linear_size(mddev, 0, 0));
194 set_capacity_and_notify(mddev->gendisk, mddev->array_sectors);
195 mddev_resume(mddev);
200 static void linear_free(struct mddev *mddev, void *priv)
207 static bool linear_make_request(struct mddev *mddev, struct bio *bio)
214 && md_flush_request(mddev, bio))
217 tmp_dev = which_dev(mddev, bio_sector);
227 md_error(mddev, tmp_dev->rdev);
235 GFP_NOIO, &mddev->bio_set);
241 md_account_bio(mddev, &bio);
251 if (mddev->gendisk)
252 trace_block_bio_remap(bio, disk_devt(mddev->gendisk),
254 mddev_check_write_zeroes(mddev, bio);
261 mdname(mddev),
270 static void linear_status (struct seq_file *seq, struct mddev *mddev)
272 seq_printf(seq, " %dk rounding", mddev->chunk_sectors / 2);
275 static void linear_error(struct mddev *mddev, struct md_rdev *rdev)
277 if (!test_and_set_bit(MD_BROKEN, &mddev->flags)) {
278 char *md_name = mdname(mddev);
285 static void linear_quiesce(struct mddev *mddev, int state)