mirror of
https://github.com/torvalds/linux.git
synced 2024-10-23 05:30:55 +00:00
bcachefs: Fix for sb buffer being misaligned
On old kernels, kmalloc() may return an allocation that's not naturally aligned - this resulted in a bug where we allocated a bio with not enough biovecs. Fix this by using buf_pages(). Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
parent
c4e382e234
commit
6fe893eade
|
@ -203,8 +203,14 @@ int bch2_sb_realloc(struct bch_sb_handle *sb, unsigned u64s)
|
|||
if (dynamic_fault("bcachefs:add:super_realloc"))
|
||||
return -BCH_ERR_ENOMEM_sb_realloc_injected;
|
||||
|
||||
new_sb = krealloc(sb->sb, new_buffer_size, GFP_NOFS|__GFP_ZERO);
|
||||
if (!new_sb)
|
||||
return -BCH_ERR_ENOMEM_sb_buf_realloc;
|
||||
|
||||
sb->sb = new_sb;
|
||||
|
||||
if (sb->have_bio) {
|
||||
unsigned nr_bvecs = DIV_ROUND_UP(new_buffer_size, PAGE_SIZE);
|
||||
unsigned nr_bvecs = buf_pages(sb->sb, new_buffer_size);
|
||||
|
||||
bio = bio_kmalloc(nr_bvecs, GFP_KERNEL);
|
||||
if (!bio)
|
||||
|
@ -216,11 +222,6 @@ int bch2_sb_realloc(struct bch_sb_handle *sb, unsigned u64s)
|
|||
sb->bio = bio;
|
||||
}
|
||||
|
||||
new_sb = krealloc(sb->sb, new_buffer_size, GFP_NOFS|__GFP_ZERO);
|
||||
if (!new_sb)
|
||||
return -BCH_ERR_ENOMEM_sb_buf_realloc;
|
||||
|
||||
sb->sb = new_sb;
|
||||
sb->buffer_size = new_buffer_size;
|
||||
|
||||
return 0;
|
||||
|
|
Loading…
Reference in New Issue
Block a user