diff -ur cluster-1.01.00.orig/gfs-kernel/src/gfs/ops_file.c cluster-1.01.00/gfs-kernel/src/gfs/ops_file.c --- cluster-1.01.00.orig/gfs-kernel/src/gfs/ops_file.c 2005-04-26 13:33:11.000000000 -0500 +++ cluster-1.01.00/gfs-kernel/src/gfs/ops_file.c 2006-03-02 01:38:26.000000000 -0600 @@ -931,12 +931,12 @@ if (!access_ok(VERIFY_READ, buf, size)) return -EFAULT; - down(&inode->i_sem); + mutex_lock(&inode->i_mutex); if (file->f_flags & O_DIRECT) count = walk_vm(file, (char *)buf, size, offset, do_write_direct); else count = walk_vm(file, (char *)buf, size, offset, do_write_buf); - up(&inode->i_sem); + mutex_unlock(&inode->i_mutex); return count; } diff -ur cluster-1.01.00.orig/gfs-kernel/src/gfs/ops_fstype.c cluster-1.01.00/gfs-kernel/src/gfs/ops_fstype.c --- cluster-1.01.00.orig/gfs-kernel/src/gfs/ops_fstype.c 2005-04-29 10:42:38.000000000 -0500 +++ cluster-1.01.00/gfs-kernel/src/gfs/ops_fstype.c 2006-03-02 02:44:05.000000000 -0600 @@ -715,9 +715,8 @@ sb->s_flags = flags; strlcpy(sb->s_id, bdevname(real, buf), sizeof(sb->s_id)); - sb->s_old_blocksize = block_size(real); - sb_set_blocksize(sb, sb->s_old_blocksize); - set_blocksize(real, sb->s_old_blocksize); + sb_set_blocksize(sb, block_size(real)); + sync_blockdev(real); error = fill_super(sb, data, (flags & MS_VERBOSE) ? 1 : 0); if (error) { up_write(&sb->s_umount); @@ -748,11 +747,10 @@ { struct block_device *diaper = sb->s_bdev; struct block_device *real = gfs_diaper_2real(diaper); - unsigned long bsize = sb->s_old_blocksize; generic_shutdown_super(sb); - set_blocksize(diaper, bsize); - set_blocksize(real, bsize); + sync_blockdev(diaper); + sync_blockdev(real); gfs_diaper_put(diaper); close_bdev_excl(real); }