| From 117aceb030307dcd431fdcff87ce988d3016c34a Mon Sep 17 00:00:00 2001 |
| From: Somasundaram Krishnasamy <somasundaram.krishnasamy@oracle.com> |
| Date: Fri, 7 Apr 2017 12:14:55 -0700 |
| Subject: [PATCH] dm era: save spacemap metadata root after the pre-commit |
| |
| commit 117aceb030307dcd431fdcff87ce988d3016c34a upstream. |
| |
| When committing era metadata to disk, it doesn't always save the latest |
| spacemap metadata root in superblock. Due to this, metadata is getting |
| corrupted sometimes when reopening the device. The correct order of update |
| should be, pre-commit (shadows spacemap root), save the spacemap root |
| (newly shadowed block) to in-core superblock and then the final commit. |
| |
| Cc: stable@vger.kernel.org |
| Signed-off-by: Somasundaram Krishnasamy <somasundaram.krishnasamy@oracle.com> |
| Signed-off-by: Mike Snitzer <snitzer@redhat.com> |
| |
| diff --git a/drivers/md/dm-era-target.c b/drivers/md/dm-era-target.c |
| index 9fab33b113c4..68d4084377ad 100644 |
| --- a/drivers/md/dm-era-target.c |
| +++ b/drivers/md/dm-era-target.c |
| @@ -961,15 +961,15 @@ static int metadata_commit(struct era_metadata *md) |
| } |
| } |
| |
| - r = save_sm_root(md); |
| + r = dm_tm_pre_commit(md->tm); |
| if (r) { |
| - DMERR("%s: save_sm_root failed", __func__); |
| + DMERR("%s: pre commit failed", __func__); |
| return r; |
| } |
| |
| - r = dm_tm_pre_commit(md->tm); |
| + r = save_sm_root(md); |
| if (r) { |
| - DMERR("%s: pre commit failed", __func__); |
| + DMERR("%s: save_sm_root failed", __func__); |
| return r; |
| } |
| |
| -- |
| 2.12.0 |
| |