Whamcloud - gitweb
b=22509 increase default md stripe_cache_size to 16k
[fs/lustre-release.git] / lustre / utils / mount_lustre.c
index bbbe9ef..ceb1436 100644 (file)
@@ -68,7 +68,7 @@ int          nomtab = 0;
 int          fake = 0;
 int          force = 0;
 int          retry = 0;
-int          md_stripe_cache_size = 2048;
+int          md_stripe_cache_size = 16384;
 char         *progname = NULL;
 
 void usage(FILE *out)
@@ -266,6 +266,13 @@ static int parse_one_option(const char *check, int *flagp)
         return 0;
 }
 
+static void append_option(char *options, const char *one)
+{
+        if (*options)
+                strcat(options, ",");
+        strcat(options, one);
+}
+
 /* Replace options with subset of Lustre-specific options, and
    fill in mount flags */
 int parse_options(char *orig_options, int *flagp)
@@ -284,25 +291,26 @@ int parse_options(char *orig_options, int *flagp)
                  * manner */
                 arg = opt;
                 val = strchr(opt, '=');
-                if (val != NULL) {
-                        if (strncmp(arg, "md_stripe_cache_size", 20) == 0) {
-                                md_stripe_cache_size = atoi(val + 1);
-                        } else if (strncmp(arg, "retry", 5) == 0) {
-                                retry = atoi(val + 1);
-                                if (retry > MAX_RETRIES)
-                                        retry = MAX_RETRIES;
-                                else if (retry < 0)
-                                        retry = 0;
-                        }
+                /* please note that some ldiskfs mount options are also in the form
+                 * of param=value. We should pay attention not to remove those
+                 * mount options, see bug 22097. */
+                if (val && strncmp(arg, "md_stripe_cache_size", 20) == 0) {
+                        md_stripe_cache_size = atoi(val + 1);
+                } else if (val && strncmp(arg, "retry", 5) == 0) {
+                        retry = atoi(val + 1);
+                        if (retry > MAX_RETRIES)
+                                retry = MAX_RETRIES;
+                        else if (retry < 0)
+                                retry = 0;
+                } else if (val && strncmp(arg, "mgssec", 6) == 0) {
+                        append_option(options, opt);
                 } else if (strncmp(opt, "force", 5) == 0) {
                         //XXX special check for 'force' option
                         ++force;
                         printf("force: %d\n", force);
                 } else if (parse_one_option(opt, flagp) == 0) {
                         /* pass this on as an option */
-                        if (*options)
-                                strcat(options, ",");
-                        strcat(options, opt);
+                        append_option(options, opt);
                 }
         }
         strcpy(orig_options, options);
@@ -319,7 +327,12 @@ int read_file(char *path, char *buf, int size)
         if (fd == NULL)
                 return errno;
 
-        fgets(buf, size, fd);
+        /* should not ignore fgets(3)'s return value */
+        if (!fgets(buf, size, fd)) {
+                fprintf(stderr, "reading from %s: %s", path, strerror(errno));
+                fclose(fd);
+                return 1;
+        }
         fclose(fd);
         return 0;
 }
@@ -709,8 +722,12 @@ int main(int argc, char *const argv[])
                 /* May as well try to clean up loop devs */
                 if (strncmp(usource, "/dev/loop", 9) == 0) {
                         char cmd[256];
+                        int ret;
                         sprintf(cmd, "/sbin/losetup -d %s", usource);
-                        system(cmd);
+                        if ((ret = system(cmd)) < 0)
+                                rc = errno;
+                        else if (ret > 0)
+                                rc = WEXITSTATUS(ret);
                 }
 
         } else if (!nomtab) {