lkml.org 
[lkml]   [2021]   [Sep]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.14 013/432] btrfs: zoned: fix block group alloc_offset calculation
    Date
    From: Naohiro Aota <naohiro.aota@wdc.com>

    commit 0ae79c6fe70d5c5c645733b7ed39d5e6021d8c9a upstream.

    alloc_offset is offset from the start of a block group and @offset is
    actually an address in logical space. Thus, we need to consider
    block_group->start when calculating them.

    Fixes: 011b41bffa3d ("btrfs: zoned: advance allocation pointer after tree log node")
    CC: stable@vger.kernel.org # 5.12+
    Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    fs/btrfs/free-space-cache.c | 7 +++++--
    1 file changed, 5 insertions(+), 2 deletions(-)

    --- a/fs/btrfs/free-space-cache.c
    +++ b/fs/btrfs/free-space-cache.c
    @@ -2652,8 +2652,11 @@ int btrfs_remove_free_space(struct btrfs
    * btrfs_pin_extent_for_log_replay() when replaying the log.
    * Advance the pointer not to overwrite the tree-log nodes.
    */
    - if (block_group->alloc_offset < offset + bytes)
    - block_group->alloc_offset = offset + bytes;
    + if (block_group->start + block_group->alloc_offset <
    + offset + bytes) {
    + block_group->alloc_offset =
    + offset + bytes - block_group->start;
    + }
    return 0;
    }


    \
     
     \ /
      Last update: 2021-09-16 19:12    [W:4.360 / U:0.152 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site