diff options
| -rw-r--r-- | fs/gfs2/file.c | 5 | ||||
| -rw-r--r-- | fs/gfs2/inode.c | 14 | ||||
| -rw-r--r-- | fs/gfs2/ops_fstype.c | 5 | ||||
| -rw-r--r-- | fs/gfs2/rgrp.c | 13 |
4 files changed, 17 insertions, 20 deletions
diff --git a/fs/gfs2/file.c b/fs/gfs2/file.c index 7f906c8b02ac..c5fb3597f696 100644 --- a/fs/gfs2/file.c +++ b/fs/gfs2/file.c | |||
| @@ -772,11 +772,6 @@ static long gfs2_fallocate(struct file *file, int mode, loff_t offset, | |||
| 772 | if (bytes == 0) | 772 | if (bytes == 0) |
| 773 | bytes = sdp->sd_sb.sb_bsize; | 773 | bytes = sdp->sd_sb.sb_bsize; |
| 774 | 774 | ||
| 775 | error = gfs2_rindex_update(sdp); | ||
| 776 | if (error) { | ||
| 777 | fs_warn(sdp, "rindex update returns %d\n", error); | ||
| 778 | return error; | ||
| 779 | } | ||
| 780 | gfs2_holder_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, &ip->i_gh); | 775 | gfs2_holder_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, &ip->i_gh); |
| 781 | error = gfs2_glock_nq(&ip->i_gh); | 776 | error = gfs2_glock_nq(&ip->i_gh); |
| 782 | if (unlikely(error)) | 777 | if (unlikely(error)) |
diff --git a/fs/gfs2/inode.c b/fs/gfs2/inode.c index c87faf48f0a1..56987460cdae 100644 --- a/fs/gfs2/inode.c +++ b/fs/gfs2/inode.c | |||
| @@ -391,10 +391,6 @@ static int alloc_dinode(struct gfs2_inode *dip, u64 *no_addr, u64 *generation) | |||
| 391 | int error; | 391 | int error; |
| 392 | int dblocks = 1; | 392 | int dblocks = 1; |
| 393 | 393 | ||
| 394 | error = gfs2_rindex_update(sdp); | ||
| 395 | if (error) | ||
| 396 | fs_warn(sdp, "rindex update returns %d\n", error); | ||
| 397 | |||
| 398 | error = gfs2_inplace_reserve(dip, RES_DINODE); | 394 | error = gfs2_inplace_reserve(dip, RES_DINODE); |
| 399 | if (error) | 395 | if (error) |
| 400 | goto out; | 396 | goto out; |
| @@ -1035,19 +1031,15 @@ static int gfs2_unlink(struct inode *dir, struct dentry *dentry) | |||
| 1035 | struct buffer_head *bh; | 1031 | struct buffer_head *bh; |
| 1036 | struct gfs2_holder ghs[3]; | 1032 | struct gfs2_holder ghs[3]; |
| 1037 | struct gfs2_rgrpd *rgd; | 1033 | struct gfs2_rgrpd *rgd; |
| 1038 | int error; | 1034 | int error = -EROFS; |
| 1039 | 1035 | ||
| 1040 | error = gfs2_rindex_update(sdp); | ||
| 1041 | if (error) | ||
| 1042 | return error; | ||
| 1043 | gfs2_holder_init(dip->i_gl, LM_ST_EXCLUSIVE, 0, ghs); | 1036 | gfs2_holder_init(dip->i_gl, LM_ST_EXCLUSIVE, 0, ghs); |
| 1044 | gfs2_holder_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, ghs + 1); | 1037 | gfs2_holder_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, ghs + 1); |
| 1045 | 1038 | ||
| 1046 | rgd = gfs2_blk2rgrpd(sdp, ip->i_no_addr); | 1039 | rgd = gfs2_blk2rgrpd(sdp, ip->i_no_addr); |
| 1047 | if (!rgd) { | 1040 | if (!rgd) |
| 1048 | error = -EROFS; | ||
| 1049 | goto out_inodes; | 1041 | goto out_inodes; |
| 1050 | } | 1042 | |
| 1051 | gfs2_holder_init(rgd->rd_gl, LM_ST_EXCLUSIVE, 0, ghs + 2); | 1043 | gfs2_holder_init(rgd->rd_gl, LM_ST_EXCLUSIVE, 0, ghs + 2); |
| 1052 | 1044 | ||
| 1053 | 1045 | ||
diff --git a/fs/gfs2/ops_fstype.c b/fs/gfs2/ops_fstype.c index 6aacf3f230a2..24f609c9ef91 100644 --- a/fs/gfs2/ops_fstype.c +++ b/fs/gfs2/ops_fstype.c | |||
| @@ -800,6 +800,11 @@ static int init_inodes(struct gfs2_sbd *sdp, int undo) | |||
| 800 | fs_err(sdp, "can't get quota file inode: %d\n", error); | 800 | fs_err(sdp, "can't get quota file inode: %d\n", error); |
| 801 | goto fail_rindex; | 801 | goto fail_rindex; |
| 802 | } | 802 | } |
| 803 | |||
| 804 | error = gfs2_rindex_update(sdp); | ||
| 805 | if (error) | ||
| 806 | goto fail_qinode; | ||
| 807 | |||
| 803 | return 0; | 808 | return 0; |
| 804 | 809 | ||
| 805 | fail_qinode: | 810 | fail_qinode: |
diff --git a/fs/gfs2/rgrp.c b/fs/gfs2/rgrp.c index 981bfa32121a..49ada95209d0 100644 --- a/fs/gfs2/rgrp.c +++ b/fs/gfs2/rgrp.c | |||
| @@ -683,16 +683,21 @@ int gfs2_rindex_update(struct gfs2_sbd *sdp) | |||
| 683 | struct gfs2_glock *gl = ip->i_gl; | 683 | struct gfs2_glock *gl = ip->i_gl; |
| 684 | struct gfs2_holder ri_gh; | 684 | struct gfs2_holder ri_gh; |
| 685 | int error = 0; | 685 | int error = 0; |
| 686 | int unlock_required = 0; | ||
| 686 | 687 | ||
| 687 | /* Read new copy from disk if we don't have the latest */ | 688 | /* Read new copy from disk if we don't have the latest */ |
| 688 | if (!sdp->sd_rindex_uptodate) { | 689 | if (!sdp->sd_rindex_uptodate) { |
| 689 | mutex_lock(&sdp->sd_rindex_mutex); | 690 | mutex_lock(&sdp->sd_rindex_mutex); |
| 690 | error = gfs2_glock_nq_init(gl, LM_ST_SHARED, 0, &ri_gh); | 691 | if (!gfs2_glock_is_locked_by_me(gl)) { |
| 691 | if (error) | 692 | error = gfs2_glock_nq_init(gl, LM_ST_SHARED, 0, &ri_gh); |
| 692 | return error; | 693 | if (error) |
| 694 | return error; | ||
| 695 | unlock_required = 1; | ||
| 696 | } | ||
| 693 | if (!sdp->sd_rindex_uptodate) | 697 | if (!sdp->sd_rindex_uptodate) |
| 694 | error = gfs2_ri_update(ip); | 698 | error = gfs2_ri_update(ip); |
| 695 | gfs2_glock_dq_uninit(&ri_gh); | 699 | if (unlock_required) |
| 700 | gfs2_glock_dq_uninit(&ri_gh); | ||
| 696 | mutex_unlock(&sdp->sd_rindex_mutex); | 701 | mutex_unlock(&sdp->sd_rindex_mutex); |
| 697 | } | 702 | } |
| 698 | 703 | ||
