]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/blobdiff - libdisk/md.c
Merge whitespace changes over
[thirdparty/xfsprogs-dev.git] / libdisk / md.c
index 7e7a2981fbe7e8a656e8a4d44413e5104f4d1050..64009bf90902b9f4c44b7f6c19257874daaaa09c 100644 (file)
@@ -1,41 +1,48 @@
 /*
- * Copyright (c) 2000 Silicon Graphics, Inc.  All Rights Reserved.
- * 
+ * Copyright (c) 2000-2001 Silicon Graphics, Inc.  All Rights Reserved.
+ *
  * This program is free software; you can redistribute it and/or modify it
  * under the terms of version 2 of the GNU General Public License as
  * published by the Free Software Foundation.
- * 
+ *
  * This program is distributed in the hope that it would be useful, but
  * WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * 
+ *
  * Further, this software is distributed without any warranty that it is
  * free of the rightful claim of any third person regarding infringement
  * or the like.  Any license provided herein, whether implied or
  * otherwise, applies only to this software file.  Patent licenses, if
  * any, provided herein do not apply to combinations of this program with
  * other software, or any other product whatsoever.
- * 
+ *
  * You should have received a copy of the GNU General Public License along
  * with this program; if not, write the Free Software Foundation, Inc., 59
  * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- * 
+ *
  * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
  * Mountain View, CA  94043, or:
- * 
- * http://www.sgi.com 
- * 
- * For further information regarding this notice, see: 
- * 
+ *
+ * http://www.sgi.com
+ *
+ * For further information regarding this notice, see:
+ *
  * http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/
  */
 
-#include <stdio.h>
-#include <fcntl.h>
-#include <volume.h>
-#include <sys/stat.h>
+#include "drivers.h"
 #include "md.h"
 
+int
+mnt_is_md_subvol(dev_t dev)
+{
+       if (major(dev) == MD_MAJOR)
+               return 1;
+       if (major(dev) == get_driver_block_major("md"))
+               return 1;
+       return 0;
+}
+
 int
 md_get_subvol_stripe(
        char            *dfile,
@@ -44,9 +51,9 @@ md_get_subvol_stripe(
        int             *swidth,
        struct stat64   *sb)
 {
-       if (sb->st_rdev >> 8 == MD_MAJOR) {
-               struct md_array_info_s  md;
-               int  fd;
+       if (mnt_is_md_subvol(sb->st_rdev)) {
+               struct md_array_info    md;
+               int                     fd;
 
                /* Open device */
                fd = open(dfile, O_RDONLY);
@@ -55,14 +62,22 @@ md_get_subvol_stripe(
 
                /* Is this thing on... */
                if (ioctl(fd, GET_ARRAY_INFO, &md)) {
-                       fprintf(stderr, "Error getting MD array info from %s\n",
+                       fprintf(stderr,
+                               _("Error getting MD array info from %s\n"),
                                dfile);
                        exit(1);
                }
+               close(fd);
 
                /* Check state */
-               if (md.state) {
-                       fprintf(stderr, "MD array %s not in clean state\n",
+               if (!(md.state & (1 << MD_SB_CLEAN))) {
+                       fprintf(stderr,
+                               _("warning - MD array %s not in clean state\n"),
+                               dfile);
+               }
+               if (md.state & (1 << MD_SB_ERRORS)) {
+                       fprintf(stderr,
+                               _("warning - MD array %s in error state\n"),
                                dfile);
                        exit(1);
                }