Whamcloud - gitweb
b=18144
authornathan <nathan>
Mon, 13 Jul 2009 16:53:47 +0000 (16:53 +0000)
committernathan <nathan>
Mon, 13 Jul 2009 16:53:47 +0000 (16:53 +0000)
i=ericm
i=wangybin
hold lock while assigning OST indicies

lustre/mgs/mgs_llog.c

index dc52ab0..62832a5 100644 (file)
@@ -507,19 +507,12 @@ static __inline__ int next_index(void *index_map, int map_len)
         0  newly marked as in use
         <0 err
         +EALREADY for update of an old index */
-int mgs_set_index(struct obd_device *obd, struct mgs_target_info *mti)
+static int mgs_set_index(struct fs_db *fsdb, struct mgs_target_info *mti)
 {
-        struct fs_db *fsdb;
         void *imap;
         int rc = 0;
         ENTRY;
 
-        rc = mgs_find_or_make_fsdb(obd, mti->mti_fsname, &fsdb);
-        if (rc) {
-                CERROR("Can't get db for %s\n", mti->mti_fsname);
-                RETURN(rc);
-        }
-
         if (mti->mti_flags & LDD_F_SV_TYPE_OST)
                 imap = fsdb->fsdb_ost_index_map;
         else if (mti->mti_flags & LDD_F_SV_TYPE_MDT)
@@ -2554,15 +2547,23 @@ int mgs_write_log_target(struct obd_device *obd,
                          struct mgs_target_info *mti)
 {
         struct fs_db *fsdb;
-        int rc = -EINVAL;
         char *buf, *params;
+        int rc;
         ENTRY;
 
+        rc = mgs_find_or_make_fsdb(obd, mti->mti_fsname, &fsdb);
+        if (rc) {
+                CERROR("Can't get db for %s\n", mti->mti_fsname);
+                RETURN(rc);
+        }
+
+        down(&fsdb->fsdb_sem);
+
         /* set/check the new target index */
-        rc = mgs_set_index(obd, mti);
+        rc = mgs_set_index(fsdb, mti);
         if (rc < 0) {
                 CERROR("Can't get index (%d)\n", rc);
-                RETURN(rc);
+                GOTO(out_up, rc);
         }
 
         /* COMPAT_146 */
@@ -2598,14 +2599,6 @@ int mgs_write_log_target(struct obd_device *obd,
                 }
         }
 
-        rc = mgs_find_or_make_fsdb(obd, mti->mti_fsname, &fsdb);
-        if (rc) {
-                CERROR("Can't get db for %s\n", mti->mti_fsname);
-                RETURN(rc);
-        }
-
-        down(&fsdb->fsdb_sem);
-
         if (mti->mti_flags &
             (LDD_F_VIRGIN | LDD_F_UPGRADE14 | LDD_F_WRITECONF)) {
                 /* Generate a log from scratch */