[PATCH] do not use global lock in lmLogSync (2 of 2)
[email protected] Wed, 24 Mar 2004 14:22:43 -0600
| Newsgroups | gmane.comp.file-systems.jfs.patches |
|---|---|
| Message-ID | <[email protected]> |
# This is a BitKeeper generated diff -Nru style patch. # # ChangeSet # 2004/03/24 14:17:44-06:00 [email protected] # JFS: don't use global lock in lmLogSync when local lock is sufficient # # I stupidly used the global jfs_log_sem to protect log->sb_list when # implementing the shared journal stuff. Since we already hold # LOG_LOCK, it makes more sense to use that to protect log->sb_list. # This caused horrible serialization when running on lots of jfs # volumes. # diff -Nru a/fs/jfs/jfs_logmgr.c b/fs/jfs/jfs_logmgr.c --- a/fs/jfs/jfs_logmgr.c Wed Mar 24 14:19:50 2004 +++ b/fs/jfs/jfs_logmgr.c Wed Mar 24 14:19:50 2004 @@ -979,7 +979,6 @@ * We need to make sure all of the "written" metapages * actually make it to disk */ - down(&jfs_log_sem); list_for_each_entry(sbi, &log->sb_list, log_list) { filemap_fdatawrite(sbi->ipbmap->i_mapping); filemap_fdatawrite(sbi->ipimap->i_mapping); @@ -990,7 +989,6 @@ filemap_fdatawait(sbi->ipimap->i_mapping); filemap_fdatawait(sbi->sb->s_bdev->bd_inode->i_mapping); } - up(&jfs_log_sem); lrd.logtid = 0; lrd.backchain = 0; @@ -1151,8 +1149,10 @@ goto shutdown; journal_found: + LOG_LOCK(log); list_add(&sbi->log_list, &log->sb_list); sbi->log = log; + LOG_UNLOCK(log); up(&jfs_log_sem); return 0; @@ -1237,8 +1237,10 @@ } } + LOG_LOCK(dummy_log); list_add(&JFS_SBI(sb)->log_list, &dummy_log->sb_list); JFS_SBI(sb)->log = dummy_log; + LOG_UNLOCK(dummy_log); up(&jfs_log_sem); return 0; @@ -1469,7 +1471,9 @@ jfs_info("lmLogClose: log:0x%p", log); down(&jfs_log_sem); + LOG_LOCK(log); list_del(&sbi->log_list); + LOG_UNLOCK(log); sbi->log = NULL; /*