patch-2.4.5 linux/drivers/md/md.c
Next file: linux/drivers/md/raid1.c
Previous file: linux/drivers/macintosh/via-cuda.c
Back to the patch index
Back to the overall index
- Lines: 149
- Date:
Fri May 25 09:48:49 2001
- Orig file:
v2.4.4/linux/drivers/md/md.c
- Orig date:
Fri Apr 6 10:42:55 2001
diff -u --recursive --new-file v2.4.4/linux/drivers/md/md.c linux/drivers/md/md.c
@@ -1097,7 +1097,7 @@
}
memset(rdev, 0, sizeof(*rdev));
- if (get_super(newdev)) {
+ if (is_mounted(newdev)) {
printk("md: can not import %s, has active inodes!\n",
partition_name(newdev));
err = -EBUSY;
@@ -1735,7 +1735,7 @@
}
/* this shouldn't be needed as above would have fired */
- if (!ro && get_super(dev)) {
+ if (!ro && is_mounted(dev)) {
printk (STILL_MOUNTED, mdidx(mddev));
OUT(-EBUSY);
}
@@ -2464,7 +2464,7 @@
int ret;
fsync_dev(mddev_to_kdev(mddev));
- ret = md_error(mddev_to_kdev(mddev), dev);
+ ret = md_error(mddev, dev);
return ret;
}
@@ -2938,13 +2938,11 @@
}
-int md_error (kdev_t dev, kdev_t rdev)
+int md_error (mddev_t *mddev, kdev_t rdev)
{
- mddev_t *mddev;
mdk_rdev_t * rrdev;
int rc;
- mddev = kdev_to_mddev(dev);
/* printk("md_error dev:(%d:%d), rdev:(%d:%d), (caller: %p,%p,%p,%p).\n",MAJOR(dev),MINOR(dev),MAJOR(rdev),MINOR(rdev), __builtin_return_address(0),__builtin_return_address(1),__builtin_return_address(2),__builtin_return_address(3));
*/
if (!mddev) {
@@ -2999,7 +2997,7 @@
int sz = 0;
unsigned long max_blocks, resync, res, dt, db, rt;
- resync = mddev->curr_resync - atomic_read(&mddev->recovery_active);
+ resync = (mddev->curr_resync - atomic_read(&mddev->recovery_active))/2;
max_blocks = mddev->sb->size;
/*
@@ -3044,7 +3042,7 @@
*/
dt = ((jiffies - mddev->resync_mark) / HZ);
if (!dt) dt++;
- db = resync - mddev->resync_mark_cnt;
+ db = resync - (mddev->resync_mark_cnt/2);
rt = (dt * ((max_blocks-resync) / (db/100+1)))/100;
sz += sprintf(page + sz, " finish=%lu.%lumin", rt / 60, (rt % 60)/6);
@@ -3219,7 +3217,7 @@
void md_done_sync(mddev_t *mddev, int blocks, int ok)
{
- /* another "blocks" (1K) blocks have been synced */
+ /* another "blocks" (512byte) blocks have been synced */
atomic_sub(blocks, &mddev->recovery_active);
wake_up(&mddev->recovery_wait);
if (!ok) {
@@ -3232,7 +3230,7 @@
int md_do_sync(mddev_t *mddev, mdp_disk_t *spare)
{
mddev_t *mddev2;
- unsigned int max_blocks, currspeed,
+ unsigned int max_sectors, currspeed,
j, window, err, serialize;
kdev_t read_disk = mddev_to_kdev(mddev);
unsigned long mark[SYNC_MARKS];
@@ -3269,7 +3267,7 @@
mddev->curr_resync = 1;
- max_blocks = mddev->sb->size;
+ max_sectors = mddev->sb->size<<1;
printk(KERN_INFO "md: syncing RAID array md%d\n", mdidx(mddev));
printk(KERN_INFO "md: minimum _guaranteed_ reconstruction speed: %d KB/sec/disc.\n",
@@ -3293,23 +3291,23 @@
/*
* Tune reconstruction:
*/
- window = MAX_READAHEAD*(PAGE_SIZE/1024);
- printk(KERN_INFO "md: using %dk window, over a total of %d blocks.\n",window,max_blocks);
+ window = MAX_READAHEAD*(PAGE_SIZE/512);
+ printk(KERN_INFO "md: using %dk window, over a total of %d blocks.\n",window/2,max_sectors/2);
atomic_set(&mddev->recovery_active, 0);
init_waitqueue_head(&mddev->recovery_wait);
last_check = 0;
- for (j = 0; j < max_blocks;) {
- int blocks;
+ for (j = 0; j < max_sectors;) {
+ int sectors;
- blocks = mddev->pers->sync_request(mddev, j);
+ sectors = mddev->pers->sync_request(mddev, j);
- if (blocks < 0) {
- err = blocks;
+ if (sectors < 0) {
+ err = sectors;
goto out;
}
- atomic_add(blocks, &mddev->recovery_active);
- j += blocks;
+ atomic_add(sectors, &mddev->recovery_active);
+ j += sectors;
mddev->curr_resync = j;
if (last_check + window > j)
@@ -3327,7 +3325,7 @@
mark_cnt[next] = j - atomic_read(&mddev->recovery_active);
last_mark = next;
}
-
+
if (md_signal_pending(current)) {
/*
@@ -3352,7 +3350,7 @@
if (md_need_resched(current))
schedule();
- currspeed = (j-mddev->resync_mark_cnt)/((jiffies-mddev->resync_mark)/HZ +1) +1;
+ currspeed = (j-mddev->resync_mark_cnt)/2/((jiffies-mddev->resync_mark)/HZ +1) +1;
if (currspeed > sysctl_speed_limit_min) {
current->nice = 19;
@@ -3756,6 +3754,10 @@
continue;
}
mddev = alloc_mddev(MKDEV(MD_MAJOR,minor));
+ if (mddev == NULL) {
+ printk("md: kmalloc failed - cannot start array %d\n", minor);
+ continue;
+ }
if (md_setup_args.pers[minor]) {
/* non-persistent */
mdu_array_info_t ainfo;
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)