cluster: RHEL55 - Revert "gfs-kernel: assertion "!get_transaction" fails on mmaps between gfs filesystems"

Benjamin Marzinski bmarzins at fedoraproject.org
Wed Jul 28 21:21:16 UTC 2010


Gitweb:        http://git.fedorahosted.org/git/cluster.git?p=cluster.git;a=commitdiff;h=9e4ac14c0c65116a05e8b6a7dfd5f7f8ce8f0742
Commit:        9e4ac14c0c65116a05e8b6a7dfd5f7f8ce8f0742
Parent:        48194711384ab9a6af2701fd7313e05c8c0ce1d7
Author:        Benjamin Marzinski <bmarzins at redhat.com>
AuthorDate:    Wed Jul 28 16:18:21 2010 -0500
Committer:     Benjamin Marzinski <bmarzins at redhat.com>
CommitterDate: Wed Jul 28 16:18:21 2010 -0500

Revert "gfs-kernel: assertion "!get_transaction" fails on mmaps between gfs filesystems"

This reverts commit 48194711384ab9a6af2701fd7313e05c8c0ce1d7.
---
 gfs-kernel/src/gfs/ops_file.c |   70 ++++++++++++++++++-----------------------
 1 files changed, 31 insertions(+), 39 deletions(-)

diff --git a/gfs-kernel/src/gfs/ops_file.c b/gfs-kernel/src/gfs/ops_file.c
index 44a73e5..150f328 100644
--- a/gfs-kernel/src/gfs/ops_file.c
+++ b/gfs-kernel/src/gfs/ops_file.c
@@ -192,37 +192,6 @@ walk_vm_hard(struct file *file, char *buf, size_t size, loff_t *offset,
 }
 
 /**
- * grope_mapping - feel up a mapping that needs to be written
- * @buf: the start of the memory to be written
- * @size: the size of the memory to be written
- *
- * We do this after acquiring the locks on the mapping,
- * but before starting the write transaction.  We need to make
- * sure that we don't cause recursive transactions if blocks
- * need to be allocated to the file backing the mapping.
- *
- * Returns: errno
- */
-
-static int
-grope_mapping(char *buf, size_t size)
-{
-	unsigned long start = (unsigned long)buf;
-	unsigned long stop = start + size;
-	char c;
-
-	while (start < stop) {
-		if (copy_from_user(&c, (char *)start, 1))
-			return -EFAULT;
-
-		start += PAGE_CACHE_SIZE;
-		start &= PAGE_CACHE_MASK;
-	}
-
-	return 0;
-}
-
-/**
  * walk_vm - Walk the vmas associated with a buffer for read or write.
  *    If any of them are gfs, pass the gfs inode down to the read/write
  *    worker function so that locks can be acquired in the correct order.
@@ -242,11 +211,8 @@ walk_vm(struct file *file, char *buf, size_t size, loff_t *offset,
 	struct kiocb *iocb,	
 	do_rw_t operation)
 {
-	int needs_groping = 0;
-
 	if (current->mm) {
 		struct super_block *sb = file->f_dentry->d_inode->i_sb;
-		struct file_system_type *type = file->f_dentry->d_inode->i_sb->s_type;
 		struct mm_struct *mm = current->mm;
 		struct vm_area_struct *vma;
 		unsigned long start = (unsigned long)buf;
@@ -262,9 +228,6 @@ walk_vm(struct file *file, char *buf, size_t size, loff_t *offset,
 			if (vma->vm_file &&
 			    vma->vm_file->f_dentry->d_inode->i_sb == sb)
 				goto do_locks;
-			else if (vma->vm_file &&
-				 vma->vm_file->f_dentry->d_inode->i_sb->s_type == type)
-				needs_groping = 1;
 		}
 
 		if (!dumping)
@@ -273,8 +236,6 @@ walk_vm(struct file *file, char *buf, size_t size, loff_t *offset,
 
 	{
 		struct gfs_holder gh;
-		if (needs_groping)
-			grope_mapping(buf, size);
 		return operation(file, buf, size, offset, iocb, 0, &gh);
 	}
 
@@ -323,6 +284,37 @@ do_read_readi(struct file *file, char *buf, size_t size, loff_t *offset,
 }
 
 /**
+ * grope_mapping - feel up a mapping that needs to be written
+ * @buf: the start of the memory to be written
+ * @size: the size of the memory to be written
+ *
+ * We do this after acquiring the locks on the mapping,
+ * but before starting the write transaction.  We need to make
+ * sure that we don't cause recursive transactions if blocks
+ * need to be allocated to the file backing the mapping.
+ *
+ * Returns: errno
+ */
+
+static int
+grope_mapping(char *buf, size_t size)
+{
+	unsigned long start = (unsigned long)buf;
+	unsigned long stop = start + size;
+	char c;
+
+	while (start < stop) {
+		if (copy_from_user(&c, (char *)start, 1))
+			return -EFAULT;
+
+		start += PAGE_CACHE_SIZE;
+		start &= PAGE_CACHE_MASK;
+	}
+
+	return 0;
+}
+
+/**
  * do_read_direct - Read bytes from a file
  * @file: The file to read from
  * @buf: The buffer to copy into


More information about the cluster-commits mailing list