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

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



Hi,

On Mon, 2009-04-20 at 14:27 +0200, Kadlecsik Jozsef wrote:
> 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.

thanks a lot for you effort but we will need to find another solution.

it's been a long time since gfs1 required extra exported symbols from
the kernel and asking distributions to do that again is not really an
option (not sure if there any other option either).

I'll let the gfs guys look at it.

Thanks again!
Fabio


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