<!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: Appendice E. - La patch di Gadi per il raid stop per il kernel linux </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">Avanti</A> <A HREF="Root-RAID-HOWTO-11.html">Indietro</A> <A HREF="Root-RAID-HOWTO.html#toc12">Indice</A> <HR> <H2><A NAME="Appendix-E"></A> <A NAME="s12">12. Appendice E. - La patch di Gadi per il raid stop per il kernel linux </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", kdevname(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; }; </PRE> <HR> <A HREF="Root-RAID-HOWTO-13.html">Avanti</A> <A HREF="Root-RAID-HOWTO-11.html">Indietro</A> <A HREF="Root-RAID-HOWTO.html#toc12">Indice</A> </BODY> </HTML>