mirror of https://github.com/torvalds/linux.git
for-6.18-rc4-tag
-----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEE8rQSAMVO+zA4DBdWxWXV+ddtWDsFAmkJgRkACgkQxWXV+ddt WDslFg/8C0uoyWYhC7sA/xYS9rKnAbNWekrsDB0BCAEyDBv+DAlbHAxn5rODY4If EMnzDkkq8t1lU21K2BSXB3rco0oO1yV6b8ldJy/q/GzES08cEURfZ02ZX6ZQngNa arrz1AqXglyqFuoR5unB486aLxDJPisYklQU0ND6PiFZVSnvpZddyWFmvu0e6i6c YJBCKzKEDlMF3mAHU3w9f1mzkbkUJcZR4jMEYkuNGpRva7tuF+nB1diJpTpm0mvk O0UWHtexAf3fFVOoWX0f6COGliJdhXw657A+TXSCFw292EdraGLieXEOzxCzBhKX FByafgDFkrgdVgglsTaSx65Zey+Wn7jDJJGgXDb45/vp8YJEaMboNkmV2/+S3XVo wl8XowAPNB1dJVmTAa3NtQ6GQfam4vM9DkOvCkzRumvjRMIGwtBQASYj1tMwDgGf YbZrHXrO/dGN+9sDrPMLLceu7qcFkCngQSDRxiRAKxeHy20fSd/hgpLkBCeHtI0E uz4wr5onTgMjjDTxijxO9zgYz5SPEJ9suq5GHvm7nCqMJ4TtW4SXMSpcWbfLbHY0 Yk6Dy6/h9nWt4OlU8U6BDFDY0Gk8OQjUeOXyJPtybrSUjxie07iGR1wH2+dddTnA xZjS4fudYUYEQxpAg16Jq1BKb8alkS96WcqDLb12Gtp0Ckah66c= =/xXr -----END PGP SIGNATURE----- Merge tag 'for-6.18-rc4-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux Pull btrfs fixes from David Sterba: - fix memory leak in qgroup relation ioctl when qgroup levels are invalid - don't write back dirty metadata on filesystem with errors - properly log renamed links - properly mark prealloc extent range beyond inode size as dirty (when no-noles is not enabled) * tag 'for-6.18-rc4-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux: btrfs: mark dirty extent range for out of bound prealloc extents btrfs: set inode flag BTRFS_INODE_COPY_EVERYTHING when logging new name btrfs: fix memory leak of qgroup_list in btrfs_add_qgroup_relation btrfs: ensure no dirty metadata is written back for an fs with errors
This commit is contained in:
commit
c9cfc122f0
|
|
@ -2228,6 +2228,14 @@ static noinline_for_stack void write_one_eb(struct extent_buffer *eb,
|
||||||
wbc_account_cgroup_owner(wbc, folio, range_len);
|
wbc_account_cgroup_owner(wbc, folio, range_len);
|
||||||
folio_unlock(folio);
|
folio_unlock(folio);
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
* If the fs is already in error status, do not submit any writeback
|
||||||
|
* but immediately finish it.
|
||||||
|
*/
|
||||||
|
if (unlikely(BTRFS_FS_ERROR(fs_info))) {
|
||||||
|
btrfs_bio_end_io(bbio, errno_to_blk_status(BTRFS_FS_ERROR(fs_info)));
|
||||||
|
return;
|
||||||
|
}
|
||||||
btrfs_submit_bbio(bbio, 0);
|
btrfs_submit_bbio(bbio, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2854,12 +2854,22 @@ static int btrfs_fallocate_update_isize(struct inode *inode,
|
||||||
{
|
{
|
||||||
struct btrfs_trans_handle *trans;
|
struct btrfs_trans_handle *trans;
|
||||||
struct btrfs_root *root = BTRFS_I(inode)->root;
|
struct btrfs_root *root = BTRFS_I(inode)->root;
|
||||||
|
u64 range_start;
|
||||||
|
u64 range_end;
|
||||||
int ret;
|
int ret;
|
||||||
int ret2;
|
int ret2;
|
||||||
|
|
||||||
if (mode & FALLOC_FL_KEEP_SIZE || end <= i_size_read(inode))
|
if (mode & FALLOC_FL_KEEP_SIZE || end <= i_size_read(inode))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
range_start = round_down(i_size_read(inode), root->fs_info->sectorsize);
|
||||||
|
range_end = round_up(end, root->fs_info->sectorsize);
|
||||||
|
|
||||||
|
ret = btrfs_inode_set_file_extent_range(BTRFS_I(inode), range_start,
|
||||||
|
range_end - range_start);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
trans = btrfs_start_transaction(root, 1);
|
trans = btrfs_start_transaction(root, 1);
|
||||||
if (IS_ERR(trans))
|
if (IS_ERR(trans))
|
||||||
return PTR_ERR(trans);
|
return PTR_ERR(trans);
|
||||||
|
|
|
||||||
|
|
@ -6873,7 +6873,6 @@ static int btrfs_link(struct dentry *old_dentry, struct inode *dir,
|
||||||
BTRFS_I(inode)->dir_index = 0ULL;
|
BTRFS_I(inode)->dir_index = 0ULL;
|
||||||
inode_inc_iversion(inode);
|
inode_inc_iversion(inode);
|
||||||
inode_set_ctime_current(inode);
|
inode_set_ctime_current(inode);
|
||||||
set_bit(BTRFS_INODE_COPY_EVERYTHING, &BTRFS_I(inode)->runtime_flags);
|
|
||||||
|
|
||||||
ret = btrfs_add_link(trans, BTRFS_I(dir), BTRFS_I(inode),
|
ret = btrfs_add_link(trans, BTRFS_I(dir), BTRFS_I(inode),
|
||||||
&fname.disk_name, 1, index);
|
&fname.disk_name, 1, index);
|
||||||
|
|
|
||||||
|
|
@ -1539,8 +1539,10 @@ int btrfs_add_qgroup_relation(struct btrfs_trans_handle *trans, u64 src, u64 dst
|
||||||
ASSERT(prealloc);
|
ASSERT(prealloc);
|
||||||
|
|
||||||
/* Check the level of src and dst first */
|
/* Check the level of src and dst first */
|
||||||
if (btrfs_qgroup_level(src) >= btrfs_qgroup_level(dst))
|
if (btrfs_qgroup_level(src) >= btrfs_qgroup_level(dst)) {
|
||||||
|
kfree(prealloc);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
mutex_lock(&fs_info->qgroup_ioctl_lock);
|
mutex_lock(&fs_info->qgroup_ioctl_lock);
|
||||||
if (!fs_info->quota_root) {
|
if (!fs_info->quota_root) {
|
||||||
|
|
|
||||||
|
|
@ -7910,6 +7910,9 @@ void btrfs_log_new_name(struct btrfs_trans_handle *trans,
|
||||||
bool log_pinned = false;
|
bool log_pinned = false;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
/* The inode has a new name (ref/extref), so make sure we log it. */
|
||||||
|
set_bit(BTRFS_INODE_COPY_EVERYTHING, &inode->runtime_flags);
|
||||||
|
|
||||||
btrfs_init_log_ctx(&ctx, inode);
|
btrfs_init_log_ctx(&ctx, inode);
|
||||||
ctx.logging_new_name = true;
|
ctx.logging_new_name = true;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue