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

[Cluster-devel] [PATCH] Fix freeze of cluster-2.03.11


I reported on the linux-cluster mailing list (see thread
that version cluster-2.03.11 freezes.

As Wendy Cheng pointed out, the reason for this is that the filesystem API 
of the kernel changed and "put_inode" was replaced by "drop_inode": while 
"put_inode" was called without holding any lock, "drop_inode" is called 
under inode_lock held but the called gfs_sync_page_i may block

The patch below (applied in gfs-kernel/src/gfs/) fixes the bug by 
releasing the lock before calling gfs_sync_page_i and locking it back 
after the function call:

--- gfs-orig/ops_super.c	2009-01-22 13:33:51.000000000 +0100
+++ gfs/ops_super.c	2009-04-06 13:07:06.000000000 +0200
@@ -9,6 +9,7 @@
 #include <linux/statfs.h>
 #include <linux/seq_file.h>
 #include <linux/mount.h>
+#include <linux/writeback.h>
 #include "gfs.h"
 #include "dio.h"
@@ -68,8 +69,11 @@
 	if (ip &&
 	    !inode->i_nlink &&
 	    S_ISREG(inode->i_mode) &&
-	    !sdp->sd_args.ar_localcaching)
+	    !sdp->sd_args.ar_localcaching) {
+	    	spin_unlock(&inode_lock);
 		gfs_sync_page_i(inode, DIO_START | DIO_WAIT);
+		spin_lock(&inode_lock);
+	}

Additionally, the line


must be added to fs/inode.c in order to the inode_lock symbol get 

Best regards,
E-mail : kadlec mail kfki hu, kadlec blackhole kfki hu
PGP key: http://www.kfki.hu/~kadlec/pgp_public_key.txt
Address: KFKI Research Institute for Particle and Nuclear Physics
         H-1525 Budapest 114, POB. 49, Hungary

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