lkml.org 
[lkml]   [2017]   [May]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.4 017/103] dm space map disk: fix some book keeping in the disk space map
    Date
    4.4-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Joe Thornber <ejt@redhat.com>

    commit 0377a07c7a035e0d033cd8b29f0cb15244c0916a upstream.

    When decrementing the reference count for a block, the free count wasn't
    being updated if the reference count went to zero.

    Signed-off-by: Joe Thornber <ejt@redhat.com>
    Signed-off-by: Mike Snitzer <snitzer@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/md/persistent-data/dm-space-map-disk.c | 15 ++++++++++++++-
    1 file changed, 14 insertions(+), 1 deletion(-)

    --- a/drivers/md/persistent-data/dm-space-map-disk.c
    +++ b/drivers/md/persistent-data/dm-space-map-disk.c
    @@ -142,10 +142,23 @@ static int sm_disk_inc_block(struct dm_s

    static int sm_disk_dec_block(struct dm_space_map *sm, dm_block_t b)
    {
    + int r;
    + uint32_t old_count;
    enum allocation_event ev;
    struct sm_disk *smd = container_of(sm, struct sm_disk, sm);

    - return sm_ll_dec(&smd->ll, b, &ev);
    + r = sm_ll_dec(&smd->ll, b, &ev);
    + if (!r && (ev == SM_FREE)) {
    + /*
    + * It's only free if it's also free in the last
    + * transaction.
    + */
    + r = sm_ll_lookup(&smd->old_ll, b, &old_count);
    + if (!r && !old_count)
    + smd->nr_allocated_this_transaction--;
    + }
    +
    + return r;
    }

    static int sm_disk_new_block(struct dm_space_map *sm, dm_block_t *b)

    \
     
     \ /
      Last update: 2017-05-23 22:39    [W:4.025 / U:0.120 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site