From e6ebfa0a2f0af01073907dde4e936960ed9280e5 Mon Sep 17 00:00:00 2001 From: nathan Date: Mon, 13 Jul 2009 16:53:47 +0000 Subject: [PATCH] b=18144 i=ericm i=wangybin hold lock while assigning OST indicies --- lustre/mgs/mgs_llog.c | 31 ++++++++++++------------------- 1 file changed, 12 insertions(+), 19 deletions(-) diff --git a/lustre/mgs/mgs_llog.c b/lustre/mgs/mgs_llog.c index dc52ab0..62832a5 100644 --- a/lustre/mgs/mgs_llog.c +++ b/lustre/mgs/mgs_llog.c @@ -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 */ -- 1.8.3.1