|
@@ -52,7 +52,7 @@ static int multipath_map (struct mpconf *conf)
|
|
}
|
|
}
|
|
rcu_read_unlock();
|
|
rcu_read_unlock();
|
|
|
|
|
|
- printk(KERN_ERR "multipath_map(): no more operational IO paths?\n");
|
|
|
|
|
|
+ pr_crit_ratelimited("multipath_map(): no more operational IO paths?\n");
|
|
return (-1);
|
|
return (-1);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -97,9 +97,9 @@ static void multipath_end_request(struct bio *bio)
|
|
*/
|
|
*/
|
|
char b[BDEVNAME_SIZE];
|
|
char b[BDEVNAME_SIZE];
|
|
md_error (mp_bh->mddev, rdev);
|
|
md_error (mp_bh->mddev, rdev);
|
|
- printk(KERN_ERR "multipath: %s: rescheduling sector %llu\n",
|
|
|
|
- bdevname(rdev->bdev,b),
|
|
|
|
- (unsigned long long)bio->bi_iter.bi_sector);
|
|
|
|
|
|
+ pr_info("multipath: %s: rescheduling sector %llu\n",
|
|
|
|
+ bdevname(rdev->bdev,b),
|
|
|
|
+ (unsigned long long)bio->bi_iter.bi_sector);
|
|
multipath_reschedule_retry(mp_bh);
|
|
multipath_reschedule_retry(mp_bh);
|
|
} else
|
|
} else
|
|
multipath_end_bh_io(mp_bh, bio->bi_error);
|
|
multipath_end_bh_io(mp_bh, bio->bi_error);
|
|
@@ -194,8 +194,7 @@ static void multipath_error (struct mddev *mddev, struct md_rdev *rdev)
|
|
* first check if this is a queued request for a device
|
|
* first check if this is a queued request for a device
|
|
* which has just failed.
|
|
* which has just failed.
|
|
*/
|
|
*/
|
|
- printk(KERN_ALERT
|
|
|
|
- "multipath: only one IO path left and IO error.\n");
|
|
|
|
|
|
+ pr_warn("multipath: only one IO path left and IO error.\n");
|
|
/* leave it active... it's all we have */
|
|
/* leave it active... it's all we have */
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
@@ -210,10 +209,8 @@ static void multipath_error (struct mddev *mddev, struct md_rdev *rdev)
|
|
}
|
|
}
|
|
set_bit(Faulty, &rdev->flags);
|
|
set_bit(Faulty, &rdev->flags);
|
|
set_bit(MD_CHANGE_DEVS, &mddev->flags);
|
|
set_bit(MD_CHANGE_DEVS, &mddev->flags);
|
|
- printk(KERN_ALERT "multipath: IO failure on %s,"
|
|
|
|
- " disabling IO path.\n"
|
|
|
|
- "multipath: Operation continuing"
|
|
|
|
- " on %d IO paths.\n",
|
|
|
|
|
|
+ pr_err("multipath: IO failure on %s, disabling IO path.\n"
|
|
|
|
+ "multipath: Operation continuing on %d IO paths.\n",
|
|
bdevname(rdev->bdev, b),
|
|
bdevname(rdev->bdev, b),
|
|
conf->raid_disks - mddev->degraded);
|
|
conf->raid_disks - mddev->degraded);
|
|
}
|
|
}
|
|
@@ -223,21 +220,21 @@ static void print_multipath_conf (struct mpconf *conf)
|
|
int i;
|
|
int i;
|
|
struct multipath_info *tmp;
|
|
struct multipath_info *tmp;
|
|
|
|
|
|
- printk("MULTIPATH conf printout:\n");
|
|
|
|
|
|
+ pr_debug("MULTIPATH conf printout:\n");
|
|
if (!conf) {
|
|
if (!conf) {
|
|
- printk("(conf==NULL)\n");
|
|
|
|
|
|
+ pr_debug("(conf==NULL)\n");
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
- printk(" --- wd:%d rd:%d\n", conf->raid_disks - conf->mddev->degraded,
|
|
|
|
- conf->raid_disks);
|
|
|
|
|
|
+ pr_debug(" --- wd:%d rd:%d\n", conf->raid_disks - conf->mddev->degraded,
|
|
|
|
+ conf->raid_disks);
|
|
|
|
|
|
for (i = 0; i < conf->raid_disks; i++) {
|
|
for (i = 0; i < conf->raid_disks; i++) {
|
|
char b[BDEVNAME_SIZE];
|
|
char b[BDEVNAME_SIZE];
|
|
tmp = conf->multipaths + i;
|
|
tmp = conf->multipaths + i;
|
|
if (tmp->rdev)
|
|
if (tmp->rdev)
|
|
- printk(" disk%d, o:%d, dev:%s\n",
|
|
|
|
- i,!test_bit(Faulty, &tmp->rdev->flags),
|
|
|
|
- bdevname(tmp->rdev->bdev,b));
|
|
|
|
|
|
+ pr_debug(" disk%d, o:%d, dev:%s\n",
|
|
|
|
+ i,!test_bit(Faulty, &tmp->rdev->flags),
|
|
|
|
+ bdevname(tmp->rdev->bdev,b));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -292,8 +289,7 @@ static int multipath_remove_disk(struct mddev *mddev, struct md_rdev *rdev)
|
|
if (rdev == p->rdev) {
|
|
if (rdev == p->rdev) {
|
|
if (test_bit(In_sync, &rdev->flags) ||
|
|
if (test_bit(In_sync, &rdev->flags) ||
|
|
atomic_read(&rdev->nr_pending)) {
|
|
atomic_read(&rdev->nr_pending)) {
|
|
- printk(KERN_ERR "hot-remove-disk, slot %d is identified"
|
|
|
|
- " but is still operational!\n", number);
|
|
|
|
|
|
+ pr_warn("hot-remove-disk, slot %d is identified but is still operational!\n", number);
|
|
err = -EBUSY;
|
|
err = -EBUSY;
|
|
goto abort;
|
|
goto abort;
|
|
}
|
|
}
|
|
@@ -346,16 +342,14 @@ static void multipathd(struct md_thread *thread)
|
|
bio->bi_iter.bi_sector = mp_bh->master_bio->bi_iter.bi_sector;
|
|
bio->bi_iter.bi_sector = mp_bh->master_bio->bi_iter.bi_sector;
|
|
|
|
|
|
if ((mp_bh->path = multipath_map (conf))<0) {
|
|
if ((mp_bh->path = multipath_map (conf))<0) {
|
|
- printk(KERN_ALERT "multipath: %s: unrecoverable IO read"
|
|
|
|
- " error for block %llu\n",
|
|
|
|
- bdevname(bio->bi_bdev,b),
|
|
|
|
- (unsigned long long)bio->bi_iter.bi_sector);
|
|
|
|
|
|
+ pr_err("multipath: %s: unrecoverable IO read error for block %llu\n",
|
|
|
|
+ bdevname(bio->bi_bdev,b),
|
|
|
|
+ (unsigned long long)bio->bi_iter.bi_sector);
|
|
multipath_end_bh_io(mp_bh, -EIO);
|
|
multipath_end_bh_io(mp_bh, -EIO);
|
|
} else {
|
|
} else {
|
|
- printk(KERN_ERR "multipath: %s: redirecting sector %llu"
|
|
|
|
- " to another IO path\n",
|
|
|
|
- bdevname(bio->bi_bdev,b),
|
|
|
|
- (unsigned long long)bio->bi_iter.bi_sector);
|
|
|
|
|
|
+ pr_err("multipath: %s: redirecting sector %llu to another IO path\n",
|
|
|
|
+ bdevname(bio->bi_bdev,b),
|
|
|
|
+ (unsigned long long)bio->bi_iter.bi_sector);
|
|
*bio = *(mp_bh->master_bio);
|
|
*bio = *(mp_bh->master_bio);
|
|
bio->bi_iter.bi_sector +=
|
|
bio->bi_iter.bi_sector +=
|
|
conf->multipaths[mp_bh->path].rdev->data_offset;
|
|
conf->multipaths[mp_bh->path].rdev->data_offset;
|
|
@@ -389,8 +383,8 @@ static int multipath_run (struct mddev *mddev)
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
|
|
|
|
if (mddev->level != LEVEL_MULTIPATH) {
|
|
if (mddev->level != LEVEL_MULTIPATH) {
|
|
- printk("multipath: %s: raid level not set to multipath IO (%d)\n",
|
|
|
|
- mdname(mddev), mddev->level);
|
|
|
|
|
|
+ pr_warn("multipath: %s: raid level not set to multipath IO (%d)\n",
|
|
|
|
+ mdname(mddev), mddev->level);
|
|
goto out;
|
|
goto out;
|
|
}
|
|
}
|
|
/*
|
|
/*
|
|
@@ -401,21 +395,13 @@ static int multipath_run (struct mddev *mddev)
|
|
|
|
|
|
conf = kzalloc(sizeof(struct mpconf), GFP_KERNEL);
|
|
conf = kzalloc(sizeof(struct mpconf), GFP_KERNEL);
|
|
mddev->private = conf;
|
|
mddev->private = conf;
|
|
- if (!conf) {
|
|
|
|
- printk(KERN_ERR
|
|
|
|
- "multipath: couldn't allocate memory for %s\n",
|
|
|
|
- mdname(mddev));
|
|
|
|
|
|
+ if (!conf)
|
|
goto out;
|
|
goto out;
|
|
- }
|
|
|
|
|
|
|
|
conf->multipaths = kzalloc(sizeof(struct multipath_info)*mddev->raid_disks,
|
|
conf->multipaths = kzalloc(sizeof(struct multipath_info)*mddev->raid_disks,
|
|
GFP_KERNEL);
|
|
GFP_KERNEL);
|
|
- if (!conf->multipaths) {
|
|
|
|
- printk(KERN_ERR
|
|
|
|
- "multipath: couldn't allocate memory for %s\n",
|
|
|
|
- mdname(mddev));
|
|
|
|
|
|
+ if (!conf->multipaths)
|
|
goto out_free_conf;
|
|
goto out_free_conf;
|
|
- }
|
|
|
|
|
|
|
|
working_disks = 0;
|
|
working_disks = 0;
|
|
rdev_for_each(rdev, mddev) {
|
|
rdev_for_each(rdev, mddev) {
|
|
@@ -439,7 +425,7 @@ static int multipath_run (struct mddev *mddev)
|
|
INIT_LIST_HEAD(&conf->retry_list);
|
|
INIT_LIST_HEAD(&conf->retry_list);
|
|
|
|
|
|
if (!working_disks) {
|
|
if (!working_disks) {
|
|
- printk(KERN_ERR "multipath: no operational IO paths for %s\n",
|
|
|
|
|
|
+ pr_warn("multipath: no operational IO paths for %s\n",
|
|
mdname(mddev));
|
|
mdname(mddev));
|
|
goto out_free_conf;
|
|
goto out_free_conf;
|
|
}
|
|
}
|
|
@@ -447,27 +433,17 @@ static int multipath_run (struct mddev *mddev)
|
|
|
|
|
|
conf->pool = mempool_create_kmalloc_pool(NR_RESERVED_BUFS,
|
|
conf->pool = mempool_create_kmalloc_pool(NR_RESERVED_BUFS,
|
|
sizeof(struct multipath_bh));
|
|
sizeof(struct multipath_bh));
|
|
- if (conf->pool == NULL) {
|
|
|
|
- printk(KERN_ERR
|
|
|
|
- "multipath: couldn't allocate memory for %s\n",
|
|
|
|
- mdname(mddev));
|
|
|
|
|
|
+ if (conf->pool == NULL)
|
|
goto out_free_conf;
|
|
goto out_free_conf;
|
|
- }
|
|
|
|
|
|
|
|
- {
|
|
|
|
- mddev->thread = md_register_thread(multipathd, mddev,
|
|
|
|
- "multipath");
|
|
|
|
- if (!mddev->thread) {
|
|
|
|
- printk(KERN_ERR "multipath: couldn't allocate thread"
|
|
|
|
- " for %s\n", mdname(mddev));
|
|
|
|
- goto out_free_conf;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
+ mddev->thread = md_register_thread(multipathd, mddev,
|
|
|
|
+ "multipath");
|
|
|
|
+ if (!mddev->thread)
|
|
|
|
+ goto out_free_conf;
|
|
|
|
|
|
- printk(KERN_INFO
|
|
|
|
- "multipath: array %s active with %d out of %d IO paths\n",
|
|
|
|
|
|
+ pr_info("multipath: array %s active with %d out of %d IO paths\n",
|
|
mdname(mddev), conf->raid_disks - mddev->degraded,
|
|
mdname(mddev), conf->raid_disks - mddev->degraded,
|
|
- mddev->raid_disks);
|
|
|
|
|
|
+ mddev->raid_disks);
|
|
/*
|
|
/*
|
|
* Ok, everything is just fine now
|
|
* Ok, everything is just fine now
|
|
*/
|
|
*/
|