]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
gfs2: Always check the result of gfs2_rbm_from_block
authorAndreas Gruenbacher <agruenba@redhat.com>
Mon, 10 Sep 2018 16:31:47 +0000 (17:31 +0100)
committerBob Peterson <rpeterso@redhat.com>
Fri, 12 Oct 2018 12:18:25 +0000 (07:18 -0500)
When gfs2_rbm_from_block fails, the rbm it returns is undefined, so we
always want to make sure gfs2_rbm_from_block has succeeded before
looking at the rbm.

Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
Signed-off-by: Bob Peterson <rpeterso@redhat.com>
Reviewed-by: Steven Whitehouse <swhiteho@redhat.com>
fs/gfs2/rgrp.c

index b445ae15f87e37a6a46c71a345425fbe8bf21309..7f8b562d1cbe683bc157913d8b9be26d739be3f1 100644 (file)
@@ -2233,7 +2233,8 @@ static struct gfs2_rgrpd *rgblk_free(struct gfs2_sbd *sdp, u64 bstart,
                return NULL;
        }
 
-       gfs2_rbm_from_block(&rbm, bstart);
+       if (WARN_ON_ONCE(gfs2_rbm_from_block(&rbm, bstart)))
+               return NULL;
        while (blen--) {
                bi = rbm_bi(&rbm);
                if (bi != bi_prev) {
@@ -2366,7 +2367,10 @@ static void gfs2_set_alloc_start(struct gfs2_rbm *rbm,
        else
                goal = rbm->rgd->rd_last_alloc + rbm->rgd->rd_data0;
 
-       gfs2_rbm_from_block(rbm, goal);
+       if (WARN_ON_ONCE(gfs2_rbm_from_block(rbm, goal))) {
+               rbm->bii = 0;
+               rbm->offset = 0;
+       }
 }
 
 /**
@@ -2575,7 +2579,8 @@ int gfs2_check_blk_type(struct gfs2_sbd *sdp, u64 no_addr, unsigned int type)
 
        rbm.rgd = rgd;
        error = gfs2_rbm_from_block(&rbm, no_addr);
-       WARN_ON_ONCE(error != 0);
+       if (WARN_ON_ONCE(error))
+               goto fail;
 
        if (gfs2_testbit(&rbm, false) != type)
                error = -ESTALE;