cluster: RHEL6 - gfs2-utils: mkfs can't fsync device with 32MB RGs
Bob Peterson
rpeterso at fedoraproject.org
Fri Aug 13 14:29:53 UTC 2010
Gitweb: http://git.fedorahosted.org/git/cluster.git?p=cluster.git;a=commitdiff;h=85eb67286e00b4fd6e58d2c5f86ff67c5d58c0c5
Commit: 85eb67286e00b4fd6e58d2c5f86ff67c5d58c0c5
Parent: 4528ab5583ae25910b82795884520033651fc405
Author: Bob Peterson <rpeterso at redhat.com>
AuthorDate: Wed Aug 11 13:31:14 2010 -0500
Committer: Bob Peterson <rpeterso at redhat.com>
CommitterDate: Fri Aug 13 09:30:44 2010 -0500
gfs2-utils: mkfs can't fsync device with 32MB RGs
This patch periodically syncs rgrp data written to a GFS2
file system during mkfs.gfs2 to circumvent the problem
described in bug #605322.
rhbz#622844
---
gfs2/libgfs2/rgrp.c | 14 +++++++++++++-
1 files changed, 13 insertions(+), 1 deletions(-)
diff --git a/gfs2/libgfs2/rgrp.c b/gfs2/libgfs2/rgrp.c
index 8d2d405..d442633 100644
--- a/gfs2/libgfs2/rgrp.c
+++ b/gfs2/libgfs2/rgrp.c
@@ -5,6 +5,8 @@
#include "libgfs2.h"
+#define RG_SYNC_TOLERANCE 1000
+
/**
* gfs2_compute_bitstructs - Compute the bitmap sizes
* @rgd: The resource group descriptor
@@ -158,11 +160,21 @@ void gfs2_rgrp_relse(struct rgrp_list *rgd)
void gfs2_rgrp_free(osi_list_t *rglist)
{
struct rgrp_list *rgd;
+ int rgs_since_sync = 0;
+ struct gfs2_sbd *sdp = NULL;
while(!osi_list_empty(rglist->next)){
rgd = osi_list_entry(rglist->next, struct rgrp_list, list);
- if (rgd->bh && rgd->bh[0]) /* if a buffer exists */
+ if (rgd->bh && rgd->bh[0]) { /* if a buffer exists */
+ rgs_since_sync++;
+ if (rgs_since_sync >= RG_SYNC_TOLERANCE) {
+ if (!sdp)
+ sdp = rgd->bh[0]->sdp;
+ fsync(sdp->device_fd);
+ rgs_since_sync = 0;
+ }
gfs2_rgrp_relse(rgd); /* free them all. */
+ }
if(rgd->bits)
free(rgd->bits);
if(rgd->bh) {
More information about the cluster-commits
mailing list