diff options
-rw-r--r-- | fs/gfs2/rgrp.c | 12 |
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 | ||
935 | fail: | 938 | fail: |
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 | } |