Whamcloud - gitweb
LU-7394 obd: remove HAVE_SELINUX_IS_ENABLED
[fs/lustre-release.git] / lustre / obdclass / obd_mount_server.c
index 148cbf3..4452f05 100644 (file)
@@ -27,7 +27,7 @@
  * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
  * Use is subject to license terms.
  *
- * Copyright (c) 2013, 2014, Intel Corporation.
+ * Copyright (c) 2013, 2015, Intel Corporation.
  */
 /*
  * This file is part of Lustre, http://www.lustre.org/
@@ -46,6 +46,8 @@
 #define PRINT_CMD CDEBUG
 #define PRINT_MASK (D_SUPER | D_CONFIG)
 
+#include <linux/types.h>
+#include <linux/selinux.h>
 #include <linux/statfs.h>
 #include <obd.h>
 #include <obd_class.h>
@@ -58,9 +60,6 @@
 #ifdef HAVE_KERNEL_LOCKED
 #include <linux/smp_lock.h>
 #endif
-#ifdef HAVE_SELINUX_IS_ENABLED
-#include <linux/selinux.h>
-#endif
 
 /*********** mount lookup *********/
 
@@ -241,8 +240,8 @@ static int server_start_mgs(struct super_block *sb)
 
        if (!rc) {
                rc = lustre_start_simple(LUSTRE_MGS_OBDNAME, LUSTRE_MGS_NAME,
-                                        LUSTRE_MGS_OBDNAME, 0, 0,
-                                        lsi->lsi_osd_obdname, 0);
+                                        LUSTRE_MGS_OBDNAME, NULL, NULL,
+                                        lsi->lsi_osd_obdname, NULL);
                /* server_deregister_mount() is not called previously, for lsi
                 * and other stuff can't be freed cleanly when mgs calls
                 * server_put_mount() in error handling case (see b=17758),
@@ -264,8 +263,14 @@ static int server_stop_mgs(struct super_block *sb)
 {
        struct obd_device *obd;
        int rc;
+       struct lustre_mount_info *lmi;
        ENTRY;
 
+       /* Do not stop MGS if this device is not the running MGT */
+       lmi = server_find_mount(LUSTRE_MGS_OBDNAME);
+       if (lmi != NULL && lmi->lmi_sb != sb)
+               RETURN(0);
+
        CDEBUG(D_MOUNT, "Stop MGS service %s\n", LUSTRE_MGS_OBDNAME);
 
        /* There better be only one MGS */
@@ -486,7 +491,7 @@ err_lmi:
 }
 EXPORT_SYMBOL(lustre_find_lwp_by_index);
 
-static void lustre_notify_lwp_list(struct obd_export *exp)
+void lustre_notify_lwp_list(struct obd_export *exp)
 {
        struct lwp_register_item *lri, *tmp;
        LASSERT(exp != NULL);
@@ -503,6 +508,7 @@ static void lustre_notify_lwp_list(struct obd_export *exp)
        }
        mutex_unlock(&lwp_register_list_lock);
 }
+EXPORT_SYMBOL(lustre_notify_lwp_list);
 
 static int lustre_lwp_connect(struct obd_device *lwp)
 {
@@ -533,7 +539,8 @@ static int lustre_lwp_connect(struct obd_device *lwp)
        data->ocd_connect_flags |= OBD_CONNECT_MDS_MDS | OBD_CONNECT_FID |
                OBD_CONNECT_AT | OBD_CONNECT_LRU_RESIZE |
                OBD_CONNECT_FULL20 | OBD_CONNECT_LVB_TYPE |
-               OBD_CONNECT_LIGHTWEIGHT | OBD_CONNECT_LFSCK;
+               OBD_CONNECT_LIGHTWEIGHT | OBD_CONNECT_LFSCK |
+               OBD_CONNECT_BULK_MBITS;
        OBD_ALLOC_PTR(uuid);
        if (uuid == NULL)
                GOTO(out, rc = -ENOMEM);
@@ -553,7 +560,6 @@ static int lustre_lwp_connect(struct obd_device *lwp)
                if (unlikely(lwp->obd_lwp_export != NULL))
                        class_export_put(lwp->obd_lwp_export);
                lwp->obd_lwp_export = class_export_get(exp);
-               lustre_notify_lwp_list(exp);
        }
 
        GOTO(out, rc);
@@ -609,7 +615,7 @@ static int lustre_lwp_setup(struct lustre_cfg *lcfg, struct lustre_sb_info *lsi,
        sprintf(lwpuuid, "%s_UUID", lwpname);
        rc = lustre_start_simple(lwpname, LUSTRE_LWP_NAME,
                                 lwpuuid, lustre_cfg_string(lcfg, 1),
-                                0, 0, 0);
+                                NULL, NULL, NULL);
        if (rc) {
                CERROR("%s: setup up failed: rc %d\n", lwpname, rc);
                GOTO(out, rc);
@@ -877,7 +883,7 @@ static int lustre_disconnect_lwp(struct super_block *sb)
                /* end log first */
                cfg->cfg_instance = sb;
                rc = lustre_end_log(sb, logname, cfg);
-               if (rc != 0)
+               if (rc != 0 && rc != -ENOENT)
                        GOTO(out, rc);
 
                lsi->lsi_lwp_started = 0;
@@ -986,8 +992,8 @@ static int lustre_start_lwp(struct super_block *sb)
        cfg->cfg_callback = client_lwp_config_process;
        cfg->cfg_instance = sb;
        rc = lustre_process_log(sb, logname, cfg);
-       if (rc == 0)
-               lsi->lsi_lwp_started = 1;
+       /* need to remove config llog from mgc */
+       lsi->lsi_lwp_started = 1;
 
        GOTO(out, rc);
 
@@ -1047,7 +1053,6 @@ int server_mti_print(const char *title, struct mgs_target_info *mti)
                  mti->mti_config_ver, mti->mti_flags);
        return 0;
 }
-EXPORT_SYMBOL(server_mti_print);
 
 /* Generate data for registration */
 static int server_lsi2mti(struct lustre_sb_info *lsi,
@@ -1164,8 +1169,8 @@ static int server_register_target(struct lustre_sb_info *lsi)
                                "rc = %d. Is the MGS running?\n",
                                lsi->lsi_svname, rc);
                } else {
-                       CERROR("%s: error registering with the MGS: rc = %d "
-                              "(not fatal)\n", lsi->lsi_svname, rc);
+                       CDEBUG(D_HA, "%s: error registering with the MGS: "
+                              "rc = %d (not fatal)\n", lsi->lsi_svname, rc);
                        /* reset the error code for non-fatal error. */
                        rc = 0;
                }
@@ -1245,7 +1250,7 @@ static int server_start_targets(struct super_block *sb)
                        rc = lustre_start_simple(LUSTRE_MDS_OBDNAME,
                                                 LUSTRE_MDS_NAME,
                                                 LUSTRE_MDS_OBDNAME"_uuid",
-                                                0, 0, 0, 0);
+                                                NULL, NULL, NULL, NULL);
                        if (rc) {
                                mutex_unlock(&server_start_lock);
                                CERROR("failed to start MDS: %d\n", rc);
@@ -1264,7 +1269,7 @@ static int server_start_targets(struct super_block *sb)
                        rc = lustre_start_simple(LUSTRE_OSS_OBDNAME,
                                                 LUSTRE_OSS_NAME,
                                                 LUSTRE_OSS_OBDNAME"_uuid",
-                                                0, 0, 0, 0);
+                                                NULL, NULL, NULL, NULL);
                        if (rc) {
                                mutex_unlock(&server_start_lock);
                                CERROR("failed to start OSS: %d\n", rc);
@@ -1481,9 +1486,13 @@ static void server_put_super(struct super_block *sb)
                   If there are any setup/cleanup errors, save the lov
                   name for safety cleanup later. */
                lprof = class_get_profile(lsi->lsi_svname);
-               if (lprof && lprof->lp_dt) {
-                       OBD_ALLOC(extraname, strlen(lprof->lp_dt) + 1);
-                       strcpy(extraname, lprof->lp_dt);
+               if (lprof != NULL) {
+                       if (lprof->lp_dt != NULL) {
+                               OBD_ALLOC(extraname, strlen(lprof->lp_dt) + 1);
+                               strncpy(extraname, lprof->lp_dt,
+                                       strlen(lprof->lp_dt) + 1);
+                       }
+                       class_put_profile(lprof);
                }
 
                obd = class_name2obd(lsi->lsi_svname);
@@ -1630,7 +1639,7 @@ static const struct inode_operations server_inode_operations = {
 
 static int server_fill_super_common(struct super_block *sb)
 {
-       struct inode *root = 0;
+       struct inode *root = NULL;
        ENTRY;
 
        CDEBUG(D_MOUNT, "Server sb, dev=%d\n", (int)sb->s_dev);
@@ -1705,8 +1714,6 @@ static int osd_start(struct lustre_sb_info *lsi, unsigned long mflags)
        rc = obd_connect(NULL, &lsi->lsi_osd_exp,
                         obd, &obd->obd_uuid, NULL, NULL);
 
-       OBD_FAIL_TIMEOUT(OBD_FAIL_TGT_DELAY_CONNECT, 10);
-
        if (rc) {
                obd->obd_force = 1;
                class_manual_cleanup(obd);
@@ -1739,6 +1746,9 @@ int server_fill_super(struct super_block *sb)
        int rc;
        ENTRY;
 
+       /* to simulate target mount race */
+       OBD_RACE(OBD_FAIL_TGT_MOUNT_RACE);
+
        rc = lsi_prepare(lsi);
        if (rc)
                RETURN(rc);
@@ -1868,4 +1878,3 @@ void server_calc_timeout(struct lustre_sb_info *lsi, struct obd_device *obd)
        obd->obd_recovery_time_hard = hard;
        obd->obd_recovery_ir_factor = factor;
 }
-EXPORT_SYMBOL(server_calc_timeout);