This is the mail archive of the
cluster-cvs@sourceware.org
mailing list for the cluster.
RHEL5 - Revert "gfs-kernel: bz298931 - GFS unlinked inode metadataleak"
- From: Abhijith Das <adas at fedoraproject dot org>
- To: cluster-cvs-relay at redhat dot com
- Date: Wed, 17 Sep 2008 16:53:39 +0000 (UTC)
- Subject: RHEL5 - Revert "gfs-kernel: bz298931 - GFS unlinked inode metadataleak"
Gitweb: http://git.fedorahosted.org/git/cluster.git?p=cluster.git;a=commitdiff;h=30e09c3d9c5ed72e39616270b842f6b0cac1940a
Commit: 30e09c3d9c5ed72e39616270b842f6b0cac1940a
Parent: deaedf0297919d3cbb29e1640219462f5850202b
Author: Abhijith Das <adas@redhat.com>
AuthorDate: Wed Sep 17 11:51:37 2008 -0500
Committer: Abhijith Das <adas@redhat.com>
CommitterDate: Wed Sep 17 11:51:37 2008 -0500
Revert "gfs-kernel: bz298931 - GFS unlinked inode metadata leak"
This reverts commit cd2d1726c4d5aa6df0d2f79ebc57cbcb4d47b035.
---
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 d056de1..99bc6db 100644
--- a/gfs-kernel/src/gfs/daemon.c
+++ b/gfs-kernel/src/gfs/daemon.c
@@ -26,7 +26,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
@@ -187,10 +186,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 c1524ed..09c5f50 100644
--- a/gfs-kernel/src/gfs/incore.h
+++ b/gfs-kernel/src/gfs/incore.h
@@ -216,8 +216,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.
@@ -251,7 +249,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 */
};
/*
@@ -908,7 +905,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 de12e21..32db45c 100644
--- a/gfs-kernel/src/gfs/ioctl.c
+++ b/gfs-kernel/src/gfs/ioctl.c
@@ -485,7 +485,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;
@@ -773,10 +772,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;
@@ -811,8 +808,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 538c6a1..90c00d0 100644
--- a/gfs-kernel/src/gfs/rgrp.c
+++ b/gfs-kernel/src/gfs/rgrp.c
@@ -1534,9 +1534,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;
}
@@ -2025,8 +2022,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;
@@ -2038,13 +2034,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;
@@ -2054,11 +2049,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);
@@ -2071,7 +2063,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;
}
@@ -2144,9 +2135,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 c000969..9f1e8f6 100644
--- a/gfs-kernel/src/gfs/rgrp.h
+++ b/gfs-kernel/src/gfs/rgrp.h
@@ -83,7 +83,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 ac287a3..9c7190b 100644
--- a/gfs-kernel/src/gfs/super.c
+++ b/gfs-kernel/src/gfs/super.c
@@ -88,7 +88,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;
}
/**