mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 22:21:40 +00:00
dm snapshot: fix metadata corruption
Commit55494bf294
("dm snapshot: use dm-bufio") broke snapshots. Before that 3.14-rc1 commit, loading a snapshot's list of exceptions involved reading exception areas one by one into ps->area and inserting those exceptions into the hash table. Commit55494bf294
changed it so that dm-bufio with prefetch is used to load exceptions in batchs. Exceptions are loaded correctly, but ps->area is left uninitialized. When a new exception is allocated, it is stored in this uninitialized ps->area which will be written to the disk. This causes metadata corruption. Fix this corruption by copying the last area that was read via dm-bufio into ps->area. Signed-off-by: Mikulas Patocka <mpatocka@redhat.com> Signed-off-by: Mike Snitzer <snitzer@redhat.com>
This commit is contained in:
parent
c64d240df3
commit
2c945820ca
@ -546,6 +546,9 @@ static int read_exceptions(struct pstore *ps,
|
||||
r = insert_exceptions(ps, area, callback, callback_context,
|
||||
&full);
|
||||
|
||||
if (!full)
|
||||
memcpy(ps->area, area, ps->store->chunk_size << SECTOR_SHIFT);
|
||||
|
||||
dm_bufio_release(bp);
|
||||
|
||||
dm_bufio_forget(client, chunk);
|
||||
|
Loading…
Reference in New Issue
Block a user