md updates for 3.17
Most interesting is that md devices (major == 9) with minor numbers of 512 or more will no longer be created simply by opening a block device file. They can only be created by writing to /sys/module/md_mod/parameters/new_array The 'auto-create-on-open' semantic is cumbersome and we need to start moving away from it. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.22 (GNU/Linux) iQIVAwUAU+hOmDnsnt1WYoG5AQJxZxAAjCJAOHiqIBeFg2auJdZF5u5dgqshJQk3 gMpl96Arazf5YXJNTMRoNsfgPg/XjG/9MDS9UoyzgAsQTRi90UYjq+gcSODdHGcF pVFxdrPf3Ja+cnlniW3aCuosv143c9N06IUDOm5TuY7nioQQA7gVS6HEpctmLbgi R5Q2jQ5GeSVhWKsowYBdzbso3y/QAH0zS5AS4tW3c+l7YMie3gfBqNHTHiQby9I1 NwEUaWrU13jUHT6M4CWIp+wqgORXVqFNHx1dxYefTEgIdB1Bfo15MgDorG1sReF7 I+H1zvc/QpvEQ/WWJ6Cg5gItVZqof6SPljnQHkt0kqtu6fDJD3wYBDYKE8VgP9k1 9zJUibyOOqDFAxrEkVy6XnQ50bYV2uNPFSKpw3jFLXpapRzL602NRWvgHGLkPEbS TofriiykOzYGxKkIhIWtiqzOaOhPMo+Z771WGRjoF4ZOAALYRnItvC/FFoRKCHeZ xTOp2xnKwAX6vHsrIHpJP+0/no2R8kzkwnSFSCgoRdraFGxfqY2N32svZaXFUt0c FlaAktWPtM+gaVzzJzEnm4kfruvVRvPV9zyVa1ro990E+00X5eGHi7g7mPmTQ33q gxQK/d/jL22RoOXppfaqj2lApQsQJ6F1rMyuvUwLK+gyFacMQyGtRfHqJo5JZKRT rBFNoOcGh3A= =v8Er -----END PGP SIGNATURE----- Merge tag 'md/3.17' of git://neil.brown.name/md Pull md updates from Neil Brown: "Most interesting is that md devices (major == 9) with minor numbers of 512 or more will no longer be created simply by opening a block device file. They can only be created by writing to /sys/module/md_mod/parameters/new_array The 'auto-create-on-open' semantic is cumbersome and we need to start moving away from it" * tag 'md/3.17' of git://neil.brown.name/md: md: don't allow bitmap file to be added to raid0/linear. md/raid0: check for bitmap compatability when changing raid levels. md: Recovery speed is wrong md: disable probing for md devices 512 and over. md/raid1,raid10: always abort recover on write error.
This commit is contained in:
commit
2213d7c29a
4 changed files with 22 additions and 16 deletions
|
@ -5961,7 +5961,7 @@ static int set_bitmap_file(struct mddev *mddev, int fd)
|
|||
int err = 0;
|
||||
|
||||
if (mddev->pers) {
|
||||
if (!mddev->pers->quiesce)
|
||||
if (!mddev->pers->quiesce || !mddev->thread)
|
||||
return -EBUSY;
|
||||
if (mddev->recovery || mddev->sync_thread)
|
||||
return -EBUSY;
|
||||
|
@ -6263,7 +6263,7 @@ static int update_array_info(struct mddev *mddev, mdu_array_info_t *info)
|
|||
rv = update_raid_disks(mddev, info->raid_disks);
|
||||
|
||||
if ((state ^ info->state) & (1<<MD_SB_BITMAP_PRESENT)) {
|
||||
if (mddev->pers->quiesce == NULL)
|
||||
if (mddev->pers->quiesce == NULL || mddev->thread == NULL)
|
||||
return -EINVAL;
|
||||
if (mddev->recovery || mddev->sync_thread)
|
||||
return -EBUSY;
|
||||
|
@ -7376,7 +7376,7 @@ void md_do_sync(struct md_thread *thread)
|
|||
struct mddev *mddev2;
|
||||
unsigned int currspeed = 0,
|
||||
window;
|
||||
sector_t max_sectors,j, io_sectors;
|
||||
sector_t max_sectors,j, io_sectors, recovery_done;
|
||||
unsigned long mark[SYNC_MARKS];
|
||||
unsigned long update_time;
|
||||
sector_t mark_cnt[SYNC_MARKS];
|
||||
|
@ -7652,7 +7652,8 @@ void md_do_sync(struct md_thread *thread)
|
|||
*/
|
||||
cond_resched();
|
||||
|
||||
currspeed = ((unsigned long)(io_sectors-mddev->resync_mark_cnt))/2
|
||||
recovery_done = io_sectors - atomic_read(&mddev->recovery_active);
|
||||
currspeed = ((unsigned long)(recovery_done - mddev->resync_mark_cnt))/2
|
||||
/((jiffies-mddev->resync_mark)/HZ +1) +1;
|
||||
|
||||
if (currspeed > speed_min(mddev)) {
|
||||
|
@ -8592,7 +8593,7 @@ static int __init md_init(void)
|
|||
goto err_mdp;
|
||||
mdp_major = ret;
|
||||
|
||||
blk_register_region(MKDEV(MD_MAJOR, 0), 1UL<<MINORBITS, THIS_MODULE,
|
||||
blk_register_region(MKDEV(MD_MAJOR, 0), 512, THIS_MODULE,
|
||||
md_probe, NULL, NULL);
|
||||
blk_register_region(MKDEV(mdp_major, 0), 1UL<<MINORBITS, THIS_MODULE,
|
||||
md_probe, NULL, NULL);
|
||||
|
@ -8687,7 +8688,7 @@ static __exit void md_exit(void)
|
|||
struct list_head *tmp;
|
||||
int delay = 1;
|
||||
|
||||
blk_unregister_region(MKDEV(MD_MAJOR,0), 1U << MINORBITS);
|
||||
blk_unregister_region(MKDEV(MD_MAJOR,0), 512);
|
||||
blk_unregister_region(MKDEV(mdp_major,0), 1U << MINORBITS);
|
||||
|
||||
unregister_blkdev(MD_MAJOR,"md");
|
||||
|
|
|
@ -685,6 +685,12 @@ static void *raid0_takeover(struct mddev *mddev)
|
|||
* raid10 - assuming we have all necessary active disks
|
||||
* raid1 - with (N -1) mirror drives faulty
|
||||
*/
|
||||
|
||||
if (mddev->bitmap) {
|
||||
printk(KERN_ERR "md/raid0: %s: cannot takeover array with bitmap\n",
|
||||
mdname(mddev));
|
||||
return ERR_PTR(-EBUSY);
|
||||
}
|
||||
if (mddev->level == 4)
|
||||
return raid0_takeover_raid45(mddev);
|
||||
|
||||
|
|
|
@ -1501,12 +1501,12 @@ static void error(struct mddev *mddev, struct md_rdev *rdev)
|
|||
mddev->degraded++;
|
||||
set_bit(Faulty, &rdev->flags);
|
||||
spin_unlock_irqrestore(&conf->device_lock, flags);
|
||||
/*
|
||||
* if recovery is running, make sure it aborts.
|
||||
*/
|
||||
set_bit(MD_RECOVERY_INTR, &mddev->recovery);
|
||||
} else
|
||||
set_bit(Faulty, &rdev->flags);
|
||||
/*
|
||||
* if recovery is running, make sure it aborts.
|
||||
*/
|
||||
set_bit(MD_RECOVERY_INTR, &mddev->recovery);
|
||||
set_bit(MD_CHANGE_DEVS, &mddev->flags);
|
||||
printk(KERN_ALERT
|
||||
"md/raid1:%s: Disk failure on %s, disabling device.\n"
|
||||
|
|
|
@ -1684,13 +1684,12 @@ static void error(struct mddev *mddev, struct md_rdev *rdev)
|
|||
spin_unlock_irqrestore(&conf->device_lock, flags);
|
||||
return;
|
||||
}
|
||||
if (test_and_clear_bit(In_sync, &rdev->flags)) {
|
||||
if (test_and_clear_bit(In_sync, &rdev->flags))
|
||||
mddev->degraded++;
|
||||
/*
|
||||
* if recovery is running, make sure it aborts.
|
||||
*/
|
||||
set_bit(MD_RECOVERY_INTR, &mddev->recovery);
|
||||
}
|
||||
/*
|
||||
* If recovery is running, make sure it aborts.
|
||||
*/
|
||||
set_bit(MD_RECOVERY_INTR, &mddev->recovery);
|
||||
set_bit(Blocked, &rdev->flags);
|
||||
set_bit(Faulty, &rdev->flags);
|
||||
set_bit(MD_CHANGE_DEVS, &mddev->flags);
|
||||
|
|
Loading…
Reference in a new issue