• Andrew Price's avatar
    gfs2: Make sure FITRIM minlen is rounded up to fs block size · 27ca8273
    Andrew Price authored
    Per fstrim(8) we must round up the minlen argument to the fs block size.
    The current calculation doesn't take into account devices that have a
    discard granularity and requested minlen less than 1 fs block, so the
    value can get shifted away to zero in the translation to fs blocks.
    
    The zero minlen passed to gfs2_rgrp_send_discards() then allows
    sb_issue_discard() to be called with nr_sects == 0 which returns -EINVAL
    and results in gfs2_rgrp_send_discards() returning -EIO.
    
    Make sure minlen is never < 1 fs block by taking the max of the
    requested minlen and the fs block size before comparing to the device's
    discard granularity and shifting to fs blocks.
    
    Fixes: 076f0faa ("GFS2: Fix FITRIM argument handling")
    Signed-off-by: default avatarAndrew Price <anprice@redhat.com>
    Signed-off-by: default avatarAndreas Gruenbacher <agruenba@redhat.com>
    27ca8273
rgrp.c 73.2 KB