[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[Cluster-devel] cluster/gfs-kernel/src/gfs ops_inode.c



CVSROOT:	/cvs/cluster
Module name:	cluster
Branch: 	RHEL4
Changes by:	wcheng sourceware org	2007-01-18 20:40:12

Modified files:
	gfs-kernel/src/gfs: ops_inode.c 

Log message:
	bugzilla 190475 (rename 3-2):
	
	This patch fixes:
	Current rename doesn't lock the (to be deleted) source file during
	rename operation unless the source is a directory. This issue would
	not show up in a single node case since VFS layer has done its i_sem/
	i_mutex locks for both directories and involved files.
	
	This patch excludes a previous proposed change (in the draft patch sent
	out for review in cluster-devel list) that adds gfs rename global lock
	to prevent a rare case of cluster deadlock. Since cluster rename global
	lock is very expensive, we prefer to find other means to fix that issue.

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs-kernel/src/gfs/ops_inode.c.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.6.2.4&r2=1.6.2.5

--- cluster/gfs-kernel/src/gfs/ops_inode.c	2006/10/10 18:35:27	1.6.2.4
+++ cluster/gfs-kernel/src/gfs/ops_inode.c	2007/01/18 20:40:12	1.6.2.5
@@ -968,15 +968,19 @@
 			goto fail;
 	}
 
-	gfs_holder_init(odip->i_gl, LM_ST_EXCLUSIVE, 0, &ghs[0]);
-	gfs_holder_init(ndip->i_gl, LM_ST_EXCLUSIVE, 0, &ghs[1]);
-	num_gh = 2;
-
-	if (nip)
-		gfs_holder_init(nip->i_gl, LM_ST_EXCLUSIVE, 0, &ghs[num_gh++]);
+	num_gh = 1;
+	gfs_holder_init(odip->i_gl, LM_ST_EXCLUSIVE, 0, ghs);
+	if (odip != ndip) {
+		gfs_holder_init(ndip->i_gl, LM_ST_EXCLUSIVE, 0, ghs+num_gh);
+		num_gh++;
+	}
+	gfs_holder_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, ghs+num_gh);
+	num_gh++;
 
-	if (dir_rename)
-		gfs_holder_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, &ghs[num_gh++]);
+	if (nip) {
+		gfs_holder_init(nip->i_gl, LM_ST_EXCLUSIVE, 0, ghs + num_gh);
+		num_gh++;
+	}
 
 	error = gfs_glock_nq_m(num_gh, ghs);
 	if (error)


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]