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