]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
Merge branch 'master' into scratch-3.0
authorNeilBrown <neilb@suse.de>
Wed, 7 Jan 2009 22:31:28 +0000 (09:31 +1100)
committerNeilBrown <neilb@suse.de>
Wed, 7 Jan 2009 22:31:28 +0000 (09:31 +1100)
Conflicts:

Assemble.c
config.c

1  2 
Monitor.c
config.c
mapfile.c
mdadm.c
mdadm.h

diff --cc Monitor.c
Simple merge
diff --cc config.c
index 6ab5a34619292c65c953e18a03d8edb1a01ee959,78bbb9d2d7cf8128eb4b669dee568bf6fd401ccc..7e09b5ca8c58604e0af91591b8b9feb042ad4250
+++ b/config.c
@@@ -598,12 -558,10 +598,12 @@@ void mailfromline(char *line
                if (alert_mail_from == NULL)
                        alert_mail_from = strdup(w);
                else {
 -                      char *t= NULL;
 -                      xasprintf(&t, "%s %s", alert_mail_from, w);
 -                      free(alert_mail_from);
 -                      alert_mail_from = t;
 +                      char *t = NULL;
 +
-                       if (asprintf(&t, "%s %s", alert_mail_from, w) > 0) {
++                      if (xasprintf(&t, "%s %s", alert_mail_from, w) > 0) {
 +                              free(alert_mail_from);
 +                              alert_mail_from = t;
 +                      }
                }
        }
  }
diff --cc mapfile.c
index 75095ec2ab444014b47b19f1b29d5274e8f1c44d,59cc6c6d355ae9369df8582b966479c84228c836..ca7072ecf7219c2a5f6f531d36b68a272f479ea8
+++ b/mapfile.c
@@@ -328,13 -244,8 +328,14 @@@ void RebuildMap(void
                        st->ss->free_super(st);
                        break;
                }
 +              sysfs_free(sra);
        }
 -      free_mdstat(mdstat);
        map_write(map);
        map_free(map);
 +      for (md = mdstat ; md ; md = md->next) {
 +              struct mdinfo *sra = sysfs_read(-1, md->devnum, GET_VERSION);
 +              sysfs_uevent(sra, "change");
 +              sysfs_free(sra);
 +      }
++      free_mdstat(mdstat);
  }
diff --cc mdadm.c
index a0d6097e7fbb8b3d5e08a84a9d2e47ca802f0aaf,6609bf22452f7802d280bc56ffcec5a8858d9045..1f9b707cae9abea3fab60bbc57b63af15504ec37
+++ b/mdadm.c
@@@ -1233,14 -1213,11 +1233,15 @@@ int main(int argc, char *argv[]
                                                                e->dev);
                                                        continue;
                                                }
 -                                              rv |= Detail(name, verbose>1?0:verbose+1,
 -                                                           export, test, homehost);
 +                                              if (devmode == 'D')
 +                                                      rv |= Detail(name, v,
 +                                                                   export, test,
 +                                                                   homehost);
 +                                              else
 +                                                      rv |= WaitClean(name, v);
                                                put_md_name(name);
                                        }
+                                       free_mdstat(ms);
                                } else  if (devmode == 'S' && scan) {
                                        /* apply --stop to all devices in /proc/mdstat */
                                        /* Due to possible stacking of devices, repeat until
diff --cc mdadm.h
index e75648bae10f6f2a2db466656ac287f77bbc3382,b0a8c5e776b5c4a920461b38195c3b474f24008d..82205355131ca3c6f1fcc5aa2d6491fa29cf4cef
+++ b/mdadm.h
@@@ -822,64 -524,21 +822,75 @@@ extern char *get_md_name(int dev)
  
  extern char DefaultConfFile[];
  
 -extern int open_mddev(char *dev, int autof);
 -extern int open_mddev_devnum(char *devname, int devnum, char *name,
 -                           char *chosen_name, int parts);
 +extern int create_mddev(char *dev, char *name, int autof, int trustworthy,
 +                      char *chosen);
 +/* values for 'trustworthy' */
 +#define       LOCAL   1
 +#define       FOREIGN 2
 +#define       METADATA 3
 +extern int open_mddev(char *dev, int report_errors);
 +extern int open_container(int fd);
 +
 +extern int mdmon_running(int devnum);
 +extern int signal_mdmon(int devnum);
 +extern int check_env(char *name);
 +extern int start_mdmon(int devnum);
 +
 +extern char *devnum2devname(int num);
 +extern int devname2devnum(char *name);
 +extern int stat2devnum(struct stat *st);
 +extern int fd2devnum(int fd);
 +
 +static inline int dev2major(int d)
 +{
 +      if (d >= 0)
 +              return MD_MAJOR;
 +      else
 +              return get_mdp_major();
 +}
 +
 +static inline int dev2minor(int d)
 +{
 +      if (d >= 0)
 +              return d;
 +      return (-1-d) << MdpMinorShift;
 +}
 +
 +static inline int ROUND_UP(int a, int base)
 +{
 +      return ((a+base-1)/base)*base;
 +}
  
 +static inline int is_subarray(char *vers)
 +{
 +      /* The version string for a 'subarray' (an array in a container)
 +       * is 
 +       *    /containername/componentname    for normal read-write arrays
 +       *    -containername/componentname    for read-only arrays.
 +       * containername is e.g. md0, md_d1
 +       * componentname is dependant on the metadata. e.g. '1' 'S1' ...
 +       */
 +      return (*vers == '/' || *vers == '-');
 +}
 +
 +#ifdef DEBUG
 +#define dprintf(fmt, arg...) \
 +      fprintf(stderr, fmt, ##arg)
 +#else
 +#define dprintf(fmt, arg...) \
 +        ({ if (0) fprintf(stderr, fmt, ##arg); 0; })
 +#endif
+ #include <assert.h>
+ #include <stdarg.h>
+ static inline int xasprintf(char **strp, const char *fmt, ...) {
+       va_list ap;
+       int ret;
+       va_start(ap, fmt);
+       ret = asprintf(strp, fmt, ap);
+       va_end(ap);
+       assert(ret >= 0);
+       return ret;
+ }
  
  #define       LEVEL_MULTIPATH         (-4)
  #define       LEVEL_LINEAR            (-1)