aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/gfs2/rgrp.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/fs/gfs2/rgrp.c b/fs/gfs2/rgrp.c
index 5bd216901e89..960aaf43d665 100644
--- a/fs/gfs2/rgrp.c
+++ b/fs/gfs2/rgrp.c
@@ -722,6 +722,7 @@ void gfs2_clear_rgrpd(struct gfs2_sbd *sdp)
722 722
723 gfs2_free_clones(rgd); 723 gfs2_free_clones(rgd);
724 kfree(rgd->rd_bits); 724 kfree(rgd->rd_bits);
725 rgd->rd_bits = NULL;
725 return_all_reservations(rgd); 726 return_all_reservations(rgd);
726 kmem_cache_free(gfs2_rgrpd_cachep, rgd); 727 kmem_cache_free(gfs2_rgrpd_cachep, rgd);
727 } 728 }
@@ -916,9 +917,6 @@ static int read_rindex_entry(struct gfs2_inode *ip)
916 if (error) 917 if (error)
917 goto fail; 918 goto fail;
918 919
919 rgd->rd_gl->gl_object = rgd;
920 rgd->rd_gl->gl_vm.start = (rgd->rd_addr * bsize) & PAGE_MASK;
921 rgd->rd_gl->gl_vm.end = PAGE_ALIGN((rgd->rd_addr + rgd->rd_length) * bsize) - 1;
922 rgd->rd_rgl = (struct gfs2_rgrp_lvb *)rgd->rd_gl->gl_lksb.sb_lvbptr; 920 rgd->rd_rgl = (struct gfs2_rgrp_lvb *)rgd->rd_gl->gl_lksb.sb_lvbptr;
923 rgd->rd_flags &= ~(GFS2_RDF_UPTODATE | GFS2_RDF_PREFERRED); 921 rgd->rd_flags &= ~(GFS2_RDF_UPTODATE | GFS2_RDF_PREFERRED);
924 if (rgd->rd_data > sdp->sd_max_rg_data) 922 if (rgd->rd_data > sdp->sd_max_rg_data)
@@ -926,14 +924,20 @@ static int read_rindex_entry(struct gfs2_inode *ip)
926 spin_lock(&sdp->sd_rindex_spin); 924 spin_lock(&sdp->sd_rindex_spin);
927 error = rgd_insert(rgd); 925 error = rgd_insert(rgd);
928 spin_unlock(&sdp->sd_rindex_spin); 926 spin_unlock(&sdp->sd_rindex_spin);
929 if (!error) 927 if (!error) {
928 rgd->rd_gl->gl_object = rgd;
929 rgd->rd_gl->gl_vm.start = (rgd->rd_addr * bsize) & PAGE_MASK;
930 rgd->rd_gl->gl_vm.end = PAGE_ALIGN((rgd->rd_addr +
931 rgd->rd_length) * bsize) - 1;
930 return 0; 932 return 0;
933 }
931 934
932 error = 0; /* someone else read in the rgrp; free it and ignore it */ 935 error = 0; /* someone else read in the rgrp; free it and ignore it */
933 gfs2_glock_put(rgd->rd_gl); 936 gfs2_glock_put(rgd->rd_gl);
934 937
935fail: 938fail:
936 kfree(rgd->rd_bits); 939 kfree(rgd->rd_bits);
940 rgd->rd_bits = NULL;
937 kmem_cache_free(gfs2_rgrpd_cachep, rgd); 941 kmem_cache_free(gfs2_rgrpd_cachep, rgd);
938 return error; 942 return error;
939} 943}