Next Previous Contents
--- linux/drivers/block/md.c.old Fri Nov 21 13:37:11 1997
+++ linux/drivers/block/md.c Sat Dec 6 13:34:28 1997
@@ -622,8 +622,13 @@
return do_md_run (minor, (int) arg);
case STOP_MD:
- return do_md_stop (minor, inode);
-
+ err = do_md_stop(minor, inode);
+ if (err) {
+ printk("md: enabling auto mdstop for %s\n",
devname(inode->i_rdev));
+ md_dev[minor].auto_mdstop = 1;
+ }
+ return err;
+
case BLKGETSIZE: /* Return device size */
if (!arg) return -EINVAL;
err=verify_area (VERIFY_WRITE, (long *) arg, sizeof(long));
@@ -692,6 +697,10 @@
sync_dev (inode->i_rdev);
md_dev[minor].busy--;
+ if (!md_dev[minor].busy && md_dev[minor].auto_mdstop) {
+ do_md_stop(minor, inode);
+ md_dev[minor].auto_mdstop = 0;
+ }
}
static int md_read (struct inode *inode, struct file *file,
--- linux/include/linux/md.h~ Fri Nov 21 13:29:14 1997
+++ linux/include/linux/md.h Fri Nov 21 13:29:14 1997
@@ -260,6 +260,7 @@
int repartition;
int busy;
int nb_dev;
+ int auto_mdstop;
void *private;
};
Next Previous Contents