imsm: write anchor last
Ensure that newly written anchors reflect a consistent metadata block. Signed-off-by: Dan Williams <dan.j.williams@intel.com>
This commit is contained in:
parent
551c80c1c1
commit
272f648fb0
|
@ -1795,6 +1795,18 @@ static int store_imsm_mpb(int fd, struct intel_super *super)
|
|||
|
||||
get_dev_size(fd, NULL, &dsize);
|
||||
|
||||
if (mpb_size > 512) {
|
||||
/* -1 to account for anchor */
|
||||
sectors = mpb_sectors(mpb) - 1;
|
||||
|
||||
/* write the extended mpb to the sectors preceeding the anchor */
|
||||
if (lseek64(fd, dsize - (512 * (2 + sectors)), SEEK_SET) < 0)
|
||||
return 1;
|
||||
|
||||
if (write(fd, super->buf + 512, mpb_size - 512) != mpb_size - 512)
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* first block is stored on second to last sector of the disk */
|
||||
if (lseek64(fd, dsize - (512 * 2), SEEK_SET) < 0)
|
||||
return 1;
|
||||
|
@ -1802,19 +1814,6 @@ static int store_imsm_mpb(int fd, struct intel_super *super)
|
|||
if (write(fd, super->buf, 512) != 512)
|
||||
return 1;
|
||||
|
||||
if (mpb_size <= 512)
|
||||
return 0;
|
||||
|
||||
/* -1 because we already wrote a sector */
|
||||
sectors = mpb_sectors(mpb) - 1;
|
||||
|
||||
/* write the extended mpb to the sectors preceeding the anchor */
|
||||
if (lseek64(fd, dsize - (512 * (2 + sectors)), SEEK_SET) < 0)
|
||||
return 1;
|
||||
|
||||
if (write(fd, super->buf + 512, mpb_size - 512) != mpb_size - 512)
|
||||
return 1;
|
||||
|
||||
fsync(fd);
|
||||
|
||||
return 0;
|
||||
|
|
Loading…
Reference in New Issue