From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 17112 invoked by alias); 17 Sep 2008 16:56:35 -0000 Received: (qmail 17105 invoked by alias); 17 Sep 2008 16:56:35 -0000 X-Spam-Status: No, hits=0.4 required=5.0 tests=AWL,BAYES_20,KAM_MX,SPF_HELO_PASS X-Spam-Check-By: sourceware.org X-Spam-Checker-Version: SpamAssassin 3.2.4 (2008-01-01) on bastion.fedora.phx.redhat.com X-Spam-Level: Subject: master - Revert "gfs-kernel: bz298931 - GFS unlinked inode metadata leak" To: cluster-cvs-relay@redhat.com X-Project: Cluster Project X-Git-Module: cluster.git X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: 932320c01e285d81dd59c421b406229a5e56b75d X-Git-Newrev: ca601c31a6e2d044f435c872abf9fc4f24ddb965 From: Abhijith Das Message-Id: <20080917165527.8CC56C07B7@lists.fedorahosted.org> Date: Wed, 17 Sep 2008 16:57:00 -0000 X-Scanned-By: MIMEDefang 2.58 on 172.16.52.254 Mailing-List: contact cluster-cvs-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: cluster-cvs-owner@sourceware.org X-SW-Source: 2008-q3/txt/msg00457.txt.bz2 Gitweb: http://git.fedorahosted.org/git/cluster.git?p=cluster.git;a=commitdiff;h=ca601c31a6e2d044f435c872abf9fc4f24ddb965 Commit: ca601c31a6e2d044f435c872abf9fc4f24ddb965 Parent: 932320c01e285d81dd59c421b406229a5e56b75d Author: Abhijith Das AuthorDate: Wed Sep 17 11:53:30 2008 -0500 Committer: Abhijith Das CommitterDate: Wed Sep 17 11:53:30 2008 -0500 Revert "gfs-kernel: bz298931 - GFS unlinked inode metadata leak" This reverts commit b32003be3784835ca1e79a490e052210303268ac. --- gfs-kernel/src/gfs/daemon.c | 4 ---- gfs-kernel/src/gfs/incore.h | 4 ---- gfs-kernel/src/gfs/ioctl.c | 10 +++------- gfs-kernel/src/gfs/rgrp.c | 18 +++--------------- gfs-kernel/src/gfs/rgrp.h | 3 +-- gfs-kernel/src/gfs/super.c | 1 - 6 files changed, 7 insertions(+), 33 deletions(-) diff --git a/gfs-kernel/src/gfs/daemon.c b/gfs-kernel/src/gfs/daemon.c index c0c8057..378e0a7 100644 --- a/gfs-kernel/src/gfs/daemon.c +++ b/gfs-kernel/src/gfs/daemon.c @@ -13,7 +13,6 @@ #include "recovery.h" #include "super.h" #include "unlinked.h" -#include "rgrp.h" /** * gfs_scand - Look for cached glocks and inodes to toss from memory @@ -174,10 +173,7 @@ gfs_inoded(void *data) struct gfs_sbd *sdp = (struct gfs_sbd *)data; while (!kthread_should_stop()) { - uint64_t inodes, metadata; gfs_unlinked_dealloc(sdp); - gfs_reclaim_metadata(sdp, &inodes, &metadata, - gfs_tune_get(sdp, gt_max_rgrp_free_mdata)); schedule_timeout_interruptible(gfs_tune_get(sdp, gt_inoded_secs) * HZ); } diff --git a/gfs-kernel/src/gfs/incore.h b/gfs-kernel/src/gfs/incore.h index bad76fc..fedde49 100644 --- a/gfs-kernel/src/gfs/incore.h +++ b/gfs-kernel/src/gfs/incore.h @@ -203,8 +203,6 @@ struct gfs_bitmap { uint32_t bi_len; /* The number of bitmap bytes in this bit block */ }; -#define RD_FL_META2FREE (0x00000001) /* rgrpd has freeable metadata */ - /* * Resource Group (Rgrp) descriptor structure. * There is one of these for each resource (block) group in the FS. @@ -238,7 +236,6 @@ struct gfs_rgrpd { struct list_head rd_depend; /* Dependent inodes (MRU order) */ struct gfs_sbd *rd_sbd; /* FS incore superblock (fs instance) */ - uint32_t rd_flags; /* RD_FL_XXX : flags for this rgrpd */ }; /* @@ -895,7 +892,6 @@ struct gfs_tune { unsigned int gt_greedy_max; unsigned int gt_rgrp_try_threshold; unsigned int gt_statfs_fast; - unsigned int gt_max_rgrp_free_mdata; /* Max # of rgrps to free metadata from */ }; /* diff --git a/gfs-kernel/src/gfs/ioctl.c b/gfs-kernel/src/gfs/ioctl.c index e012119..d5489b5 100644 --- a/gfs-kernel/src/gfs/ioctl.c +++ b/gfs-kernel/src/gfs/ioctl.c @@ -472,7 +472,6 @@ gi_get_tune(struct gfs_inode *ip, gfs_printf("greedy_max %u\n", gt->gt_greedy_max); gfs_printf("rgrp_try_threshold %u\n", gt->gt_rgrp_try_threshold); gfs_printf("statfs_fast %u\n", gt->gt_statfs_fast); - gfs_printf("max_rgrp_free_mdata %u\n", gt->gt_max_rgrp_free_mdata); error = 0; @@ -760,10 +759,8 @@ gi_set_tune(struct gfs_sbd *sdp, struct gfs_ioctl *gi, int from_user) return error; else tune_set(gt_statfs_fast, x); - } else if (strcmp(param, "max_rgrp_free_mdata") == 0) { - if (sscanf(value, "%u", &x) != 1) - return -EINVAL; - tune_set(gt_max_rgrp_free_mdata, x); + + } else return -EINVAL; @@ -798,8 +795,7 @@ gi_do_reclaim(struct gfs_inode *ip, error = gfs_reclaim_metadata(ip->i_sbd, &inodes, - &metadata, - ip->i_sbd->sd_rgcount); + &metadata); if (error) return error; diff --git a/gfs-kernel/src/gfs/rgrp.c b/gfs-kernel/src/gfs/rgrp.c index e3de6b1..e0c670f 100644 --- a/gfs-kernel/src/gfs/rgrp.c +++ b/gfs-kernel/src/gfs/rgrp.c @@ -1522,9 +1522,6 @@ blkfree_internal(struct gfs_sbd *sdp, uint64_t bstart, uint32_t blen, bits->bi_len, buf_blk, new_state); } - if (new_state == GFS_BLKST_FREEMETA) - rgd->rd_flags |= RD_FL_META2FREE; - return rgd; } @@ -2013,8 +2010,7 @@ gfs_rlist_free(struct gfs_rgrp_list *rlist) int gfs_reclaim_metadata(struct gfs_sbd *sdp, uint64_t *inodes, - uint64_t *metadata, - uint32_t rg_max) + uint64_t *metadata) { struct gfs_holder ji_gh, ri_gh, rgd_gh, t_gh; struct gfs_rgrpd *rgd; @@ -2026,13 +2022,12 @@ gfs_reclaim_metadata(struct gfs_sbd *sdp, uint32_t goal; unsigned int x; int error = 0; - uint64_t rg_count = 0; - rg_max = rg_max > sdp->sd_rgcount ? sdp->sd_rgcount : rg_max; *inodes = *metadata = 0; /* Acquire the jindex lock here so we don't deadlock with a process writing the the jindex inode. :-( */ + error = gfs_jindex_hold(sdp, &ji_gh); if (error) goto fail; @@ -2042,11 +2037,8 @@ gfs_reclaim_metadata(struct gfs_sbd *sdp, goto fail_jindex_relse; for (rgd = gfs_rgrpd_get_first(sdp); - rgd && rg_count < rg_max; + rgd; rgd = gfs_rgrpd_get_next(rgd)) { - if (!(rgd->rd_flags & RD_FL_META2FREE)) - continue; - error = gfs_glock_nq_init(rgd->rd_gl, LM_ST_EXCLUSIVE, GL_NOCACHE, &rgd_gh); @@ -2059,7 +2051,6 @@ gfs_reclaim_metadata(struct gfs_sbd *sdp, if (!rg->rg_freedi && !rg->rg_freemeta) { gfs_glock_dq_uninit(&rgd_gh); - rgd->rd_flags &= ~RD_FL_META2FREE; continue; } @@ -2132,9 +2123,6 @@ gfs_reclaim_metadata(struct gfs_sbd *sdp, gfs_glock_dq_uninit(&t_gh); - rgd->rd_flags &= ~RD_FL_META2FREE; - rg_count++; - gfs_glock_dq_uninit(&rgd_gh); } diff --git a/gfs-kernel/src/gfs/rgrp.h b/gfs-kernel/src/gfs/rgrp.h index c10a9e0..0f5c620 100644 --- a/gfs-kernel/src/gfs/rgrp.h +++ b/gfs-kernel/src/gfs/rgrp.h @@ -70,7 +70,6 @@ void gfs_rlist_free(struct gfs_rgrp_list *rlist); int gfs_reclaim_metadata(struct gfs_sbd *sdp, uint64_t *inodes, - uint64_t *metadata, - uint32_t rg_max); + uint64_t *metadata); #endif /* __RGRP_DOT_H__ */ diff --git a/gfs-kernel/src/gfs/super.c b/gfs-kernel/src/gfs/super.c index 86f2cfa..781350e 100644 --- a/gfs-kernel/src/gfs/super.c +++ b/gfs-kernel/src/gfs/super.c @@ -75,7 +75,6 @@ gfs_tune_init(struct gfs_tune *gt) gt->gt_greedy_max = HZ / 4; gt->gt_rgrp_try_threshold = 100; gt->gt_statfs_fast = 0; - gt->gt_max_rgrp_free_mdata = 5; } /**