old-www/HOWTO/Root-RAID-HOWTO-12.html

65 lines
2.0 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
<META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
<TITLE>Root RAID HOWTO cookbook: Appendix E. - Gadi's raid stop patch for the linux kernel </TITLE>
<LINK HREF="Root-RAID-HOWTO-13.html" REL=next>
<LINK HREF="Root-RAID-HOWTO-11.html" REL=previous>
<LINK HREF="Root-RAID-HOWTO.html#toc12" REL=contents>
</HEAD>
<BODY>
<A HREF="Root-RAID-HOWTO-13.html">Next</A>
<A HREF="Root-RAID-HOWTO-11.html">Previous</A>
<A HREF="Root-RAID-HOWTO.html#toc12">Contents</A>
<HR>
<H2><A NAME="Appendix-E"></A> <A NAME="s12">12. Appendix E. - Gadi's raid stop patch for the linux kernel </A></H2>
<P>
<PRE>
--- 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 &amp;&amp; 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;
};
</PRE>
<HR>
<A HREF="Root-RAID-HOWTO-13.html">Next</A>
<A HREF="Root-RAID-HOWTO-11.html">Previous</A>
<A HREF="Root-RAID-HOWTO.html#toc12">Contents</A>
</BODY>
</HTML>