Merge tag 'for-5.14-rc3-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux
Pull btrfs fixes from David Sterba: - fix -Warray-bounds warning, to help external patchset to make it default treewide - fix writeable device accounting (syzbot report) - fix fsync and log replay after a rename and inode eviction - fix potentially lost error code when submitting multiple bios for compressed range * tag 'for-5.14-rc3-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux: btrfs: calculate number of eb pages properly in csum_tree_block btrfs: fix rw device counting in __btrfs_free_extra_devids btrfs: fix lost inode on log replay after mix of fsync, rename and inode eviction btrfs: mark compressed range uptodate only if all bio succeed
This commit is contained in:
@@ -352,7 +352,7 @@ static void end_compressed_bio_write(struct bio *bio)
|
|||||||
btrfs_record_physical_zoned(inode, cb->start, bio);
|
btrfs_record_physical_zoned(inode, cb->start, bio);
|
||||||
btrfs_writepage_endio_finish_ordered(BTRFS_I(inode), NULL,
|
btrfs_writepage_endio_finish_ordered(BTRFS_I(inode), NULL,
|
||||||
cb->start, cb->start + cb->len - 1,
|
cb->start, cb->start + cb->len - 1,
|
||||||
bio->bi_status == BLK_STS_OK);
|
!cb->errors);
|
||||||
|
|
||||||
end_compressed_writeback(inode, cb);
|
end_compressed_writeback(inode, cb);
|
||||||
/* note, our inode could be gone now */
|
/* note, our inode could be gone now */
|
||||||
|
|||||||
@@ -209,7 +209,7 @@ void btrfs_set_buffer_lockdep_class(u64 objectid, struct extent_buffer *eb,
|
|||||||
static void csum_tree_block(struct extent_buffer *buf, u8 *result)
|
static void csum_tree_block(struct extent_buffer *buf, u8 *result)
|
||||||
{
|
{
|
||||||
struct btrfs_fs_info *fs_info = buf->fs_info;
|
struct btrfs_fs_info *fs_info = buf->fs_info;
|
||||||
const int num_pages = fs_info->nodesize >> PAGE_SHIFT;
|
const int num_pages = num_extent_pages(buf);
|
||||||
const int first_page_part = min_t(u32, PAGE_SIZE, fs_info->nodesize);
|
const int first_page_part = min_t(u32, PAGE_SIZE, fs_info->nodesize);
|
||||||
SHASH_DESC_ON_STACK(shash, fs_info->csum_shash);
|
SHASH_DESC_ON_STACK(shash, fs_info->csum_shash);
|
||||||
char *kaddr;
|
char *kaddr;
|
||||||
|
|||||||
@@ -6503,8 +6503,8 @@ void btrfs_log_new_name(struct btrfs_trans_handle *trans,
|
|||||||
* if this inode hasn't been logged and directory we're renaming it
|
* if this inode hasn't been logged and directory we're renaming it
|
||||||
* from hasn't been logged, we don't need to log it
|
* from hasn't been logged, we don't need to log it
|
||||||
*/
|
*/
|
||||||
if (inode->logged_trans < trans->transid &&
|
if (!inode_logged(trans, inode) &&
|
||||||
(!old_dir || old_dir->logged_trans < trans->transid))
|
(!old_dir || !inode_logged(trans, old_dir)))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -1078,6 +1078,7 @@ static void __btrfs_free_extra_devids(struct btrfs_fs_devices *fs_devices,
|
|||||||
if (test_bit(BTRFS_DEV_STATE_WRITEABLE, &device->dev_state)) {
|
if (test_bit(BTRFS_DEV_STATE_WRITEABLE, &device->dev_state)) {
|
||||||
list_del_init(&device->dev_alloc_list);
|
list_del_init(&device->dev_alloc_list);
|
||||||
clear_bit(BTRFS_DEV_STATE_WRITEABLE, &device->dev_state);
|
clear_bit(BTRFS_DEV_STATE_WRITEABLE, &device->dev_state);
|
||||||
|
fs_devices->rw_devices--;
|
||||||
}
|
}
|
||||||
list_del_init(&device->dev_list);
|
list_del_init(&device->dev_list);
|
||||||
fs_devices->num_devices--;
|
fs_devices->num_devices--;
|
||||||
|
|||||||
Reference in New Issue
Block a user