diff options
Diffstat (limited to 'fs/gfs2/rgrp.c')
| -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 | } |
