[Cluster-devel] cluster/gfs2/libgfs2 fs_ops.c

rpeterso at sourceware.org rpeterso at sourceware.org
Mon Mar 26 19:32:25 UTC 2007


CVSROOT:	/cvs/cluster
Module name:	cluster
Branch: 	RHEL5
Changes by:	rpeterso at sourceware.org	2007-03-26 20:32:25

Modified files:
	gfs2/libgfs2   : fs_ops.c 

Log message:
	Resolves: Bugzilla Bug 232124: gfs2_fsck will create multiple
	lost+found directories.

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs2/libgfs2/fs_ops.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4.2.1&r2=1.4.2.2

--- cluster/gfs2/libgfs2/fs_ops.c	2007/02/12 19:01:41	1.4.2.1
+++ cluster/gfs2/libgfs2/fs_ops.c	2007/03/26 19:32:25	1.4.2.2
@@ -1177,19 +1177,24 @@
 	uint64_t bn;
 	struct gfs2_inum inum;
 	struct gfs2_buffer_head *bh;
+	struct gfs2_inode *ip;
 
-	bn = dinode_alloc(sdp);
+	gfs2_lookupi(dip, filename, strlen(filename), &ip);
+	if (!ip) {
+		bn = dinode_alloc(sdp);
 
-	inum.no_formal_ino = sdp->md.next_inum++;
-	inum.no_addr = bn;
+		inum.no_formal_ino = sdp->md.next_inum++;
+		inum.no_addr = bn;
 
-	dir_add(dip, filename, strlen(filename), &inum, IF2DT(mode));
+		dir_add(dip, filename, strlen(filename), &inum, IF2DT(mode));
 
-	if(S_ISDIR(mode))
-		dip->i_di.di_nlink++;
+		if(S_ISDIR(mode))
+			dip->i_di.di_nlink++;
 
-	bh = init_dinode(sdp, &inum, mode, flags, &dip->i_di.di_num);
-	return inode_get(sdp, bh);
+		bh = init_dinode(sdp, &inum, mode, flags, &dip->i_di.di_num);
+		ip = inode_get(sdp, bh);
+	}
+	return ip;
 }
 
 /**




More information about the Cluster-devel mailing list