]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
GFS2: make sure rgrps are up to date in func gfs2_blk2rgrpd
authorBob Peterson <rpeterso@redhat.com>
Mon, 5 Mar 2012 15:19:35 +0000 (10:19 -0500)
committerSteven Whitehouse <swhiteho@redhat.com>
Mon, 5 Mar 2012 15:10:34 +0000 (15:10 +0000)
This patch adds a call to gfs2_rindex_update from function gfs2_blk2rgrpd
and removes calls to it that are made redundant by it. The problem is
that a gfs2_grow can add rgrps to the rindex, then put those rgrps into
use, thus rendering the rindex we read in at mount time incomplete.

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

index 6ff9f17f9ac21c9462d1e13e797d537bd9a5ddab..19bde40b4864c6d3faccc0ea513e830dc75f288f 100644 (file)
@@ -332,6 +332,9 @@ struct gfs2_rgrpd *gfs2_blk2rgrpd(struct gfs2_sbd *sdp, u64 blk, bool exact)
        struct rb_node *n, *next;
        struct gfs2_rgrpd *cur;
 
+       if (gfs2_rindex_update(sdp))
+               return NULL;
+
        spin_lock(&sdp->sd_rindex_spin);
        n = sdp->sd_rindex_tree.rb_node;
        while (n) {
@@ -917,10 +920,6 @@ int gfs2_fitrim(struct file *filp, void __user *argp)
        if (!blk_queue_discard(q))
                return -EOPNOTSUPP;
 
-       ret = gfs2_rindex_update(sdp);
-       if (ret)
-               return ret;
-
        if (argp == NULL) {
                r.start = 0;
                r.len = ULLONG_MAX;
@@ -1671,13 +1670,8 @@ int gfs2_check_blk_type(struct gfs2_sbd *sdp, u64 no_addr, unsigned int type)
 {
        struct gfs2_rgrpd *rgd;
        struct gfs2_holder rgd_gh;
-       int error;
-
-       error = gfs2_rindex_update(sdp);
-       if (error)
-               return error;
+       int error = -EINVAL;
 
-       error = -EINVAL;
        rgd = gfs2_blk2rgrpd(sdp, no_addr, 1);
        if (!rgd)
                goto fail;