diff options
Diffstat (limited to 'package/fuse/patches/300-2.6.24_fixes.patch')
-rw-r--r-- | package/fuse/patches/300-2.6.24_fixes.patch | 246 |
1 files changed, 0 insertions, 246 deletions
diff --git a/package/fuse/patches/300-2.6.24_fixes.patch b/package/fuse/patches/300-2.6.24_fixes.patch deleted file mode 100644 index e8f761e37..000000000 --- a/package/fuse/patches/300-2.6.24_fixes.patch +++ /dev/null @@ -1,246 +0,0 @@ -# HG changeset patch -# User mszeredi -# Date 1197485983 0 -# Node ID 5b8914cfe0fb7ccfb6e7f61512374d8541f2a193 -# Parent 81a85541800582144b7381e0b022c10245facc61 -Fix kernel module compile for 2.6.24 - ---- a/kernel/dir.c Wed Dec 12 14:33:17 2007 +0000 -+++ b/kernel/dir.c Wed Dec 12 18:59:43 2007 +0000 -@@ -191,7 +191,7 @@ static int invalid_nodeid(u64 nodeid) - return !nodeid || nodeid == FUSE_ROOT_ID; - } - --static struct dentry_operations fuse_dentry_operations = { -+struct dentry_operations fuse_dentry_operations = { - .d_revalidate = fuse_dentry_revalidate, - }; - -@@ -378,6 +378,7 @@ static int fuse_create_open(struct inode - } - fuse_put_request(fc, forget_req); - d_instantiate(entry, inode); -+ fuse_invalidate_attr(dir); - fuse_change_timeout(entry, &outentry); - file = lookup_instantiate_filp(nd, entry, generic_file_open); - if (IS_ERR(file)) { -@@ -619,6 +620,9 @@ static int fuse_rename(struct inode *old - err = req->out.h.error; - fuse_put_request(fc, req); - if (!err) { -+ /* ctime changes */ -+ fuse_invalidate_attr(oldent->d_inode); -+ - fuse_invalidate_attr(olddir); - if (olddir != newdir) - fuse_invalidate_attr(newdir); ---- a/kernel/fuse_i.h Wed Dec 12 14:33:17 2007 +0000 -+++ b/kernel/fuse_i.h Wed Dec 12 18:59:43 2007 +0000 -@@ -47,6 +47,9 @@ - #endif - #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,23) - # define KERNEL_2_6_23_PLUS -+#endif -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24) -+# define KERNEL_2_6_24_PLUS - #endif - - #if defined(__arm__) && LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20) -@@ -647,3 +650,5 @@ int fuse_valid_type(int m); - * Is task allowed to perform filesystem operation? - */ - int fuse_allow_task(struct fuse_conn *fc, struct task_struct *task); -+ -+extern struct dentry_operations fuse_dentry_operations; ---- a/kernel/inode.c Wed Dec 12 14:33:17 2007 +0000 -+++ b/kernel/inode.c Wed Dec 12 18:59:43 2007 +0000 -@@ -520,21 +520,26 @@ static struct inode *get_root_inode(stru - #ifdef HAVE_EXPORTFS_H - #include <linux/exportfs.h> - #endif --static struct dentry *fuse_get_dentry(struct super_block *sb, void *vobjp) -+ -+struct fuse_inode_handle - { -- __u32 *objp = vobjp; -- unsigned long nodeid = objp[0]; -- __u32 generation = objp[1]; -+ u64 nodeid; -+ u32 generation; -+}; -+ -+static struct dentry *fuse_get_dentry(struct super_block *sb, -+ struct fuse_inode_handle *handle) -+{ - struct inode *inode; - struct dentry *entry; - -- if (nodeid == 0) -+ if (handle->nodeid == 0) - return ERR_PTR(-ESTALE); - -- inode = ilookup5(sb, nodeid, fuse_inode_eq, &nodeid); -+ inode = ilookup5(sb, handle->nodeid, fuse_inode_eq, &handle->nodeid); - if (!inode) - return ERR_PTR(-ESTALE); -- if (inode->i_generation != generation) { -+ if (inode->i_generation != handle->generation) { - iput(inode); - return ERR_PTR(-ESTALE); - } -@@ -544,42 +549,130 @@ static struct dentry *fuse_get_dentry(st - iput(inode); - return ERR_PTR(-ENOMEM); - } -+ entry->d_op = &fuse_dentry_operations; - - return entry; - } - --static int fuse_encode_fh(struct dentry *dentry, __u32 *fh, int *max_len, -- int connectable) -+static int fuse_encode_fh(struct dentry *dentry, u32 *fh, int *max_len, -+ int connectable) - { - struct inode *inode = dentry->d_inode; - int len = *max_len; - int type = 1; -+ u64 nodeid; -+ u32 generation; - -- if (len < 2 || (connectable && len < 4)) -- return 255; -+ if (len < 3 || (connectable && len < 6)) -+ return 255; - -- len = 2; -- fh[0] = get_fuse_inode(inode)->nodeid; -- fh[1] = inode->i_generation; -+ nodeid = get_fuse_inode(inode)->nodeid; -+ generation = inode->i_generation; -+ -+ len = 3; -+ fh[0] = (u32)(nodeid >> 32); -+ fh[1] = (u32)(nodeid & 0xffffffff); -+ fh[2] = generation; -+ - if (connectable && !S_ISDIR(inode->i_mode)) { - struct inode *parent; - - spin_lock(&dentry->d_lock); - parent = dentry->d_parent->d_inode; -- fh[2] = get_fuse_inode(parent)->nodeid; -- fh[3] = parent->i_generation; -+ nodeid = get_fuse_inode(parent)->nodeid; -+ generation = parent->i_generation; -+ -+ fh[3] = (u32)(nodeid >> 32); -+ fh[4] = (u32)(nodeid & 0xffffffff); -+ fh[5] = generation; - spin_unlock(&dentry->d_lock); -- len = 4; -+ -+ len = 6; - type = 2; - } -+ - *max_len = len; - return type; - } - -+#ifdef KERNEL_2_6_24_PLUS -+static struct dentry *fuse_fh_to_dentry(struct super_block *sb, -+ struct fid *fid, int fh_len, int fh_type) -+{ -+ struct fuse_inode_handle handle; -+ -+ if (fh_len < 3 || fh_type > 2) -+ return NULL; -+ -+ handle.nodeid = (u64) fid->raw[0] << 32; -+ handle.nodeid |= (u64) fid->raw[1]; -+ handle.generation = fid->raw[2]; -+ return fuse_get_dentry(sb, &handle); -+} -+ -+static struct dentry *fuse_fh_to_parent(struct super_block *sb, -+ struct fid *fid, int fh_len, int fh_type) -+{ -+ struct fuse_inode_handle parent; -+ -+ if (fh_type != 2 || fh_len < 6) -+ return NULL; -+ -+ parent.nodeid = (u64) fid->raw[3] << 32; -+ parent.nodeid |= (u64) fid->raw[4]; -+ parent.generation = fid->raw[5]; -+ return fuse_get_dentry(sb, &parent); -+} -+ -+ -+static const struct export_operations fuse_export_operations = { -+ .fh_to_dentry = fuse_fh_to_dentry, -+ .fh_to_parent = fuse_fh_to_parent, -+ .encode_fh = fuse_encode_fh, -+}; -+#else -+static struct dentry *fuse_get_dentry_old(struct super_block *sb, void *objp) -+{ -+ return fuse_get_dentry(sb, objp); -+} -+ -+static struct dentry *fuse_decode_fh(struct super_block *sb, u32 *fh, -+ int fh_len, int fileid_type, -+ int (*acceptable)(void *context, struct dentry *de), -+ void *context) -+{ -+ struct fuse_inode_handle handle; -+ struct fuse_inode_handle parent; -+ -+ if (fh_len < 3 || fileid_type > 2) -+ return NULL; -+ -+ if (fileid_type == 2) { -+ if (fh_len < 6) -+ return NULL; -+ -+ parent.nodeid = (u64) fh[3] << 32; -+ parent.nodeid |= (u64) fh[4]; -+ parent.generation = fh[5]; -+ } else { -+ parent.nodeid = 0; -+ parent.generation = 0; -+ } -+ -+ handle.nodeid = (u64) fh[0] << 32; -+ handle.nodeid |= (u64) fh[1]; -+ handle.generation = fh[2]; -+ -+ return ret = fuse_export_operations. -+ find_exported_dentry(sb, &handle, &parent, acceptable, context); -+} -+ - static struct export_operations fuse_export_operations = { -- .get_dentry = fuse_get_dentry, -+ .get_dentry = fuse_get_dentry_old, - .encode_fh = fuse_encode_fh, -+ .decode_fh = fuse_decode_fh, - }; -+#endif - #endif - - static struct super_operations fuse_super_operations = { -@@ -845,8 +938,12 @@ static decl_subsys(fuse, NULL, NULL); - static decl_subsys(fuse, NULL, NULL); - static decl_subsys(connections, NULL, NULL); - -+#ifdef KERNEL_2_6_24_PLUS -+static void fuse_inode_init_once(struct kmem_cache *cachep, void *foo) -+#else - static void fuse_inode_init_once(void *foo, struct kmem_cache *cachep, - unsigned long flags) -+#endif - { - struct inode * inode = foo; - - |