dm integrity: don't replay journal data past the end of the device
Following commits will make it possible to shrink or extend the device. If the device was shrunk, we don't want to replay journal data pointing past the end of the device. Signed-off-by: Mikulas Patocka <mpatocka@redhat.com> Signed-off-by: Mike Snitzer <snitzer@redhat.com>
This commit is contained in:
parent
7649194a16
commit
f6f72f32c2
|
@ -2194,6 +2194,8 @@ static void do_journal_write(struct dm_integrity_c *ic, unsigned write_start,
|
||||||
sec &= ~(sector_t)(ic->sectors_per_block - 1);
|
sec &= ~(sector_t)(ic->sectors_per_block - 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (unlikely(sec >= ic->provided_data_sectors))
|
||||||
|
continue;
|
||||||
get_area_and_offset(ic, sec, &area, &offset);
|
get_area_and_offset(ic, sec, &area, &offset);
|
||||||
restore_last_bytes(ic, access_journal_data(ic, i, j), je);
|
restore_last_bytes(ic, access_journal_data(ic, i, j), je);
|
||||||
for (k = j + 1; k < ic->journal_section_entries; k++) {
|
for (k = j + 1; k < ic->journal_section_entries; k++) {
|
||||||
|
@ -2203,6 +2205,8 @@ static void do_journal_write(struct dm_integrity_c *ic, unsigned write_start,
|
||||||
break;
|
break;
|
||||||
BUG_ON(unlikely(journal_entry_is_inprogress(je2)) && !from_replay);
|
BUG_ON(unlikely(journal_entry_is_inprogress(je2)) && !from_replay);
|
||||||
sec2 = journal_entry_get_sector(je2);
|
sec2 = journal_entry_get_sector(je2);
|
||||||
|
if (unlikely(sec2 >= ic->provided_data_sectors))
|
||||||
|
break;
|
||||||
get_area_and_offset(ic, sec2, &area2, &offset2);
|
get_area_and_offset(ic, sec2, &area2, &offset2);
|
||||||
if (area2 != area || offset2 != offset + ((k - j) << ic->sb->log2_sectors_per_block))
|
if (area2 != area || offset2 != offset + ((k - j) << ic->sb->log2_sectors_per_block))
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user