Next Previous Contents

## 12. Appendix E. - Gadi's raid stop patch for the linux kernel

    --- 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