diff options
Diffstat (limited to 'target/linux/brcm47xx/patches-2.6.33/302-kmod-fuse-dcache-bug-fuse.patch')
| -rw-r--r-- | target/linux/brcm47xx/patches-2.6.33/302-kmod-fuse-dcache-bug-fuse.patch | 82 | 
1 files changed, 0 insertions, 82 deletions
diff --git a/target/linux/brcm47xx/patches-2.6.33/302-kmod-fuse-dcache-bug-fuse.patch b/target/linux/brcm47xx/patches-2.6.33/302-kmod-fuse-dcache-bug-fuse.patch deleted file mode 100644 index d6c0b3ab5..000000000 --- a/target/linux/brcm47xx/patches-2.6.33/302-kmod-fuse-dcache-bug-fuse.patch +++ /dev/null @@ -1,82 +0,0 @@ ---- a/fs/fuse/dev.c -+++ b/fs/fuse/dev.c -@@ -533,6 +533,11 @@ static void fuse_copy_finish(struct fuse - 	} - } -  -+#ifdef DCACHE_BUG -+extern void (*fuse_flush_cache_all)(void); -+extern void (*fuse_flush_cache_page)(struct vm_area_struct *vma, unsigned long page, unsigned long pfn); -+#endif -+ - /* -  * Get another pagefull of userspace buffer, and map it to kernel -  * address space, and lock request -@@ -541,6 +546,9 @@ static int fuse_copy_fill(struct fuse_co - { - 	unsigned long offset; - 	int err; -+#ifdef DCACHE_BUG -+	struct vm_area_struct *vma; -+#endif -  - 	unlock_request(cs->fc, cs->req); - 	fuse_copy_finish(cs); -@@ -552,14 +560,22 @@ static int fuse_copy_fill(struct fuse_co - 		cs->nr_segs--; - 	} - 	down_read(¤t->mm->mmap_sem); -+#ifndef DCACHE_BUG - 	err = get_user_pages(current, current->mm, cs->addr, 1, cs->write, 0, - 			     &cs->pg, NULL); -+#else -+	err = get_user_pages(current, current->mm, cs->addr, 1, cs->write, 0, -+			     &cs->pg, &vma); -+#endif - 	up_read(¤t->mm->mmap_sem); - 	if (err < 0) - 		return err; - 	BUG_ON(err != 1); - 	offset = cs->addr % PAGE_SIZE; - 	cs->mapaddr = kmap_atomic(cs->pg, KM_USER0); -+#ifdef DCACHE_BUG -+	fuse_flush_cache_page(vma, cs->addr, page_to_pfn(cs->pg)); -+#endif - 	cs->buf = cs->mapaddr + offset; - 	cs->len = min(PAGE_SIZE - offset, cs->seglen); - 	cs->seglen -= cs->len; -@@ -573,6 +589,11 @@ static int fuse_copy_do(struct fuse_copy - { - 	unsigned ncpy = min(*size, cs->len); - 	if (val) { -+#ifdef DCACHE_BUG -+		// patch from mailing list, it is very important, otherwise, -+		// can't mount, or ls mount point will hang -+		fuse_flush_cache_all(); -+#endif - 		if (cs->write) - 			memcpy(cs->buf, *val, ncpy); - 		else ---- a/fs/fuse/fuse_i.h -+++ b/fs/fuse/fuse_i.h -@@ -8,6 +8,7 @@ -  - #ifndef _FS_FUSE_I_H - #define _FS_FUSE_I_H -+#define DCACHE_BUG -  - #include <linux/fuse.h> - #include <linux/fs.h> ---- a/fs/fuse/inode.c -+++ b/fs/fuse/inode.c -@@ -1201,6 +1201,10 @@ static int __init fuse_init(void) - 	printk(KERN_INFO "fuse init (API version %i.%i)\n", - 	       FUSE_KERNEL_VERSION, FUSE_KERNEL_MINOR_VERSION); -  -+#ifdef DCACHE_BUG -+printk("fuse init: DCACHE_BUG enabled\n"); -+#endif -+ - 	INIT_LIST_HEAD(&fuse_conn_list); - 	res = fuse_fs_init(); - 	if (res)  | 
