diff options
Diffstat (limited to 'target/linux/brcm47xx/patches-2.6.32/302-kmod-fuse-dcache-bug-fuse.patch')
-rw-r--r-- | target/linux/brcm47xx/patches-2.6.32/302-kmod-fuse-dcache-bug-fuse.patch | 82 |
1 files changed, 0 insertions, 82 deletions
diff --git a/target/linux/brcm47xx/patches-2.6.32/302-kmod-fuse-dcache-bug-fuse.patch b/target/linux/brcm47xx/patches-2.6.32/302-kmod-fuse-dcache-bug-fuse.patch deleted file mode 100644 index d6c0b3ab55..0000000000 --- a/target/linux/brcm47xx/patches-2.6.32/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) |