This is the mail archive of the cluster-cvs@sourceware.org mailing list for the cluster.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

master - Revert "gfs-kernel: bz298931 - GFS unlinked inode metadataleak"


Gitweb:        http://git.fedorahosted.org/git/cluster.git?p=cluster.git;a=commitdiff;h=ca601c31a6e2d044f435c872abf9fc4f24ddb965
Commit:        ca601c31a6e2d044f435c872abf9fc4f24ddb965
Parent:        932320c01e285d81dd59c421b406229a5e56b75d
Author:        Abhijith Das <adas@redhat.com>
AuthorDate:    Wed Sep 17 11:53:30 2008 -0500
Committer:     Abhijith Das <adas@redhat.com>
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;
 }
 
 /**


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]