Skip to contentSkip to conversation

GFS2: Don't withdraw on partial rindex entries

PATCH New Benjamin Marzinski 2 participants 2 messages Jan 25, 2010 – Jan 26, 2010 GFS2 file system

lore
Share & tools
lore
#0 lore raw

PATCH v2 1/1 GFS2: Don't withdraw on partial rindex entries

ince gfs2 writes the rindex file a block at a time, and releases the exclusive lock after each block, it is possible that another process will grab the lock in the middle of the write. Since rindex entries are not an even divisor of blocks, that other process may see partial entries. On grows, this is fine. The process can simply ignore the the partial entires. Previously, the code withdrew when it saw partial entries. Now it simply ignores them.

---
 fs/gfs2/rgrp.c |    5 -----
 1 file changed, 5 deletions(-)
fs/gfs2/rgrp.c +0 -5
Index: gfs2-2.6-nmw/fs/gfs2/rgrp.c
===================================================================
@@ -591,11 +591,6 @@ static int gfs2_ri_update(struct gfs2_in
 	u64 rgrp_count = ip->i_disksize;
 	int error;
 
-	if (do_div(rgrp_count, sizeof(struct gfs2_rindex))) {
-		gfs2_consist_inode(ip);
-		return -EIO;
-	}
-
 	clear_rgrpdi(sdp);
 
 	file_ra_state_init(&ra_state, inode->i_mapping);
#1 lore raw

PATCH v2 1/1 GFS2: Don't withdraw on partial rindex entries

Hi,

Now in the -nmw git tree. Thanks,

Steve.

Quoted 30 lines · Benjamin Marzinski

ince gfs2 writes the rindex file a block at a time, and releases the exclusive lock after each block, it is possible that another process will grab the lock in the middle of the write. Since rindex entries are not an even divisor of blocks, that other process may see partial entries. On grows, this is fine. The process can simply ignore the the partial entires. Previously, the code withdrew when it saw partial entries. Now it simply ignores them.

---
 fs/gfs2/rgrp.c |    5 -----
 1 file changed, 5 deletions(-)

Index: gfs2-2.6-nmw/fs/gfs2/rgrp.c
===================================================================

fs/gfs2/rgrp.c +0 -5
@@ -591,11 +591,6 @@ static int gfs2_ri_update(struct gfs2_in
 	u64 rgrp_count = ip->i_disksize;
 	int error;
 
-	if (do_div(rgrp_count, sizeof(struct gfs2_rindex))) {
-		gfs2_consist_inode(ip);
-		return -EIO;
-	}
-
 	clear_rgrpdi(sdp);
 
 	file_ra_state_init(&ra_state, inode->i_mapping);