Hi, I reported on the linux-cluster mailing list (see thread https://www.redhat.com/archives/linux-cluster/2009-March/msg00176.html) 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 (https://www.redhat.com/archives/linux-cluster/2009-April/msg00060.html). 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); + } generic_drop_inode(inode); } Additionally, the line EXPORT_SYMBOL(inode_lock); must be added to fs/inode.c in order to the inode_lock symbol get exported. Best regards, Jozsef -- E-mail : [email protected], [email protected] 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
