diff options
Diffstat (limited to 'fs/jfs/jfs_logmgr.c')
-rw-r--r-- | fs/jfs/jfs_logmgr.c | 25 |
1 files changed, 8 insertions, 17 deletions
diff --git a/fs/jfs/jfs_logmgr.c b/fs/jfs/jfs_logmgr.c index c51af2a14516..583636f745e5 100644 --- a/fs/jfs/jfs_logmgr.c +++ b/fs/jfs/jfs_logmgr.c | |||
@@ -1010,15 +1010,13 @@ static int lmLogSync(struct jfs_log * log, int hard_sync) | |||
1010 | * option 2 - shutdown file systems | 1010 | * option 2 - shutdown file systems |
1011 | * associated with log ? | 1011 | * associated with log ? |
1012 | * option 3 - extend log ? | 1012 | * option 3 - extend log ? |
1013 | */ | ||
1014 | /* | ||
1015 | * option 4 - second chance | 1013 | * option 4 - second chance |
1016 | * | 1014 | * |
1017 | * mark log wrapped, and continue. | 1015 | * mark log wrapped, and continue. |
1018 | * when all active transactions are completed, | 1016 | * when all active transactions are completed, |
1019 | * mark log vaild for recovery. | 1017 | * mark log valid for recovery. |
1020 | * if crashed during invalid state, log state | 1018 | * if crashed during invalid state, log state |
1021 | * implies invald log, forcing fsck(). | 1019 | * implies invalid log, forcing fsck(). |
1022 | */ | 1020 | */ |
1023 | /* mark log state log wrap in log superblock */ | 1021 | /* mark log state log wrap in log superblock */ |
1024 | /* log->state = LOGWRAP; */ | 1022 | /* log->state = LOGWRAP; */ |
@@ -1122,16 +1120,13 @@ int lmLogOpen(struct super_block *sb) | |||
1122 | * file systems to log may have n-to-1 relationship; | 1120 | * file systems to log may have n-to-1 relationship; |
1123 | */ | 1121 | */ |
1124 | 1122 | ||
1125 | bdev = open_by_devnum(sbi->logdev, FMODE_READ|FMODE_WRITE); | 1123 | bdev = blkdev_get_by_dev(sbi->logdev, FMODE_READ|FMODE_WRITE|FMODE_EXCL, |
1124 | log); | ||
1126 | if (IS_ERR(bdev)) { | 1125 | if (IS_ERR(bdev)) { |
1127 | rc = -PTR_ERR(bdev); | 1126 | rc = PTR_ERR(bdev); |
1128 | goto free; | 1127 | goto free; |
1129 | } | 1128 | } |
1130 | 1129 | ||
1131 | if ((rc = bd_claim(bdev, log))) { | ||
1132 | goto close; | ||
1133 | } | ||
1134 | |||
1135 | log->bdev = bdev; | 1130 | log->bdev = bdev; |
1136 | memcpy(log->uuid, sbi->loguuid, sizeof(log->uuid)); | 1131 | memcpy(log->uuid, sbi->loguuid, sizeof(log->uuid)); |
1137 | 1132 | ||
@@ -1139,7 +1134,7 @@ int lmLogOpen(struct super_block *sb) | |||
1139 | * initialize log: | 1134 | * initialize log: |
1140 | */ | 1135 | */ |
1141 | if ((rc = lmLogInit(log))) | 1136 | if ((rc = lmLogInit(log))) |
1142 | goto unclaim; | 1137 | goto close; |
1143 | 1138 | ||
1144 | list_add(&log->journal_list, &jfs_external_logs); | 1139 | list_add(&log->journal_list, &jfs_external_logs); |
1145 | 1140 | ||
@@ -1165,11 +1160,8 @@ journal_found: | |||
1165 | list_del(&log->journal_list); | 1160 | list_del(&log->journal_list); |
1166 | lbmLogShutdown(log); | 1161 | lbmLogShutdown(log); |
1167 | 1162 | ||
1168 | unclaim: | ||
1169 | bd_release(bdev); | ||
1170 | |||
1171 | close: /* close external log device */ | 1163 | close: /* close external log device */ |
1172 | blkdev_put(bdev, FMODE_READ|FMODE_WRITE); | 1164 | blkdev_put(bdev, FMODE_READ|FMODE_WRITE|FMODE_EXCL); |
1173 | 1165 | ||
1174 | free: /* free log descriptor */ | 1166 | free: /* free log descriptor */ |
1175 | mutex_unlock(&jfs_log_mutex); | 1167 | mutex_unlock(&jfs_log_mutex); |
@@ -1514,8 +1506,7 @@ int lmLogClose(struct super_block *sb) | |||
1514 | bdev = log->bdev; | 1506 | bdev = log->bdev; |
1515 | rc = lmLogShutdown(log); | 1507 | rc = lmLogShutdown(log); |
1516 | 1508 | ||
1517 | bd_release(bdev); | 1509 | blkdev_put(bdev, FMODE_READ|FMODE_WRITE|FMODE_EXCL); |
1518 | blkdev_put(bdev, FMODE_READ|FMODE_WRITE); | ||
1519 | 1510 | ||
1520 | kfree(log); | 1511 | kfree(log); |
1521 | 1512 | ||