Package: unionfs-source Version: 1.4+debian-4 Severity: important Tags: patch
I attach a diff file with unionfs patch to compile in 2.6.20 kernel -- System Information: Debian Release: 4.0 APT prefers testing APT policy: (990, 'testing'), (90, 'unstable') Architecture: i386 (i686) Shell: /bin/sh linked to /bin/bash Kernel: Linux 2.6.18-4-686 Locale: LANG=es_ES.UTF-8, LC_CTYPE=es_ES.UTF-8 (charmap=UTF-8) Versions of packages unionfs-source depends on: ii bzip2 1.0.3-6 high-quality block-sorting file co ii debhelper 5.0.42 helper programs for debian/rules ii make 3.81-2 The GNU version of the "make" util ii module-assistant 0.10.8 tool to make module package creati Versions of packages unionfs-source recommends: ii unionfs-tools 1.4+debian-4 Tools to manage unionfs filesystem -- no debconf information
diff -ur -x Module.symvers -x control.backup -x fistdev.mk -x Makefile -x control unionfs.orig/build/lookup.c unionfs/build/lookup.c --- unionfs.orig/build/lookup.c 2007-04-17 11:09:00.000000000 +0200 +++ unionfs/build/lookup.c 2007-01-29 00:55:07.000000000 +0100 @@ -382,7 +382,7 @@ } /* The dentry cache is just so we have properly sized dentries. */ -static struct kmem_cache *unionfs_dentry_cachep; +static kmem_cache_t *unionfs_dentry_cachep; int init_dentry_cache(void) { unionfs_dentry_cachep = @@ -399,10 +399,9 @@ { if (!unionfs_dentry_cachep) return; - kmem_cache_destroy(unionfs_dentry_cachep); - /*if (kmem_cache_destroy(unionfs_dentry_cachep)) + if (kmem_cache_destroy(unionfs_dentry_cachep)) printk(KERN_ERR - "unionfs_dentry_cache: not all structures were freed\n");*/ + "unionfs_dentry_cache: not all structures were freed\n"); return; } @@ -421,7 +420,7 @@ spin_lock(&dentry->d_lock); if (!dtopd_nocheck(dentry)) { dtopd_lhs(dentry) = (struct unionfs_dentry_info *) - kmem_cache_alloc(unionfs_dentry_cachep, GFP_ATOMIC); + kmem_cache_alloc(unionfs_dentry_cachep, SLAB_ATOMIC); if (!dtopd_nocheck(dentry)) goto out; init_MUTEX_LOCKED(&dtopd_nocheck(dentry)->udi_sem); diff -ur -x Module.symvers -x control.backup -x fistdev.mk -x Makefile -x control unionfs.orig/build/rdstate.c unionfs/build/rdstate.c --- unionfs.orig/build/rdstate.c 2007-04-17 10:42:50.000000000 +0200 +++ unionfs/build/rdstate.c 2007-01-29 00:55:07.000000000 +0100 @@ -26,11 +26,11 @@ /* There are two structures here, rdstate which is a hash table * of the second structure which is a filldir_node. */ -/* This is a kmem_cache for filldir nodes, because we allocate a lot of them +/* This is a kmem_cache_t for filldir nodes, because we allocate a lot of them * and they shouldn't waste memory. If the node has a small name (as defined * by the dentry structure), then we use an inline name to preserve kmalloc * space. */ -static struct kmem_cache *unionfs_filldir_cachep; +static kmem_cache_t *unionfs_filldir_cachep; int init_filldir_cache(void) { unionfs_filldir_cachep = @@ -47,11 +47,10 @@ { if (!unionfs_filldir_cachep) return; - kmem_cache_destroy(unionfs_filldir_cachep); - /*if (kmem_cache_destroy(unionfs_filldir_cachep)) { + if (kmem_cache_destroy(unionfs_filldir_cachep)) { printk(KERN_ERR "unionfs_filldir_cache: not all structures were freed\n"); - }*/ + } return; } @@ -254,7 +253,7 @@ newnode = (struct filldir_node *)kmem_cache_alloc(unionfs_filldir_cachep, - GFP_KERNEL); + SLAB_KERNEL); if (!newnode) goto out; diff -ur -x Module.symvers -x control.backup -x fistdev.mk -x Makefile -x control unionfs.orig/build/sioq.c unionfs/build/sioq.c --- unionfs.orig/build/sioq.c 2007-04-17 11:10:04.000000000 +0200 +++ unionfs/build/sioq.c 2007-01-29 00:55:07.000000000 +0100 @@ -41,68 +41,67 @@ destroy_workqueue(sioq); } -void run_sioq(work_func_t func, struct sioq_args *args) +void run_sioq(void (*func)(void *arg), struct sioq_args *args) { - /*DECLARE_WORK(wk, func, &args->comp);*/ - INIT_WORK(&args->tqueue, func); + DECLARE_WORK(wk, func, &args->comp); init_completion(&args->comp); - while (!queue_work(sioq, &args->tqueue)) { + while (!queue_work(sioq, &wk)) { // TODO: do accounting if needed schedule(); } wait_for_completion(&args->comp); } -void __unionfs_create(struct work_struct *work) +void __unionfs_create(void *data) { - struct sioq_args *args = container_of(work, struct sioq_args, tqueue); + struct sioq_args *args = data; struct create_args *c = &args->create; args->err = vfs_create(c->parent, c->dentry, c->mode, c->nd); complete(&args->comp); } -void __unionfs_mkdir(struct work_struct *work) +void __unionfs_mkdir(void *data) { - struct sioq_args *args = container_of(work, struct sioq_args, tqueue); + struct sioq_args *args = data; struct mkdir_args *m = &args->mkdir; args->err = vfs_mkdir(m->parent, m->dentry, m->mode); complete(&args->comp); } -void __unionfs_mknod(struct work_struct *work) +void __unionfs_mknod(void *data) { - struct sioq_args *args = container_of(work, struct sioq_args, tqueue); + struct sioq_args *args = data; struct mknod_args *m = &args->mknod; args->err = vfs_mknod(m->parent, m->dentry, m->mode, m->dev); complete(&args->comp); } -void __unionfs_symlink(struct work_struct *work) +void __unionfs_symlink(void *data) { - struct sioq_args *args = container_of(work, struct sioq_args, tqueue); + struct sioq_args *args = data; struct symlink_args *s = &args->symlink; args->err = vfs_symlink(s->parent, s->dentry, s->symbuf, s->mode); complete(&args->comp); } -void __unionfs_unlink(struct work_struct *work) +void __unionfs_unlink(void *data) { - struct sioq_args *args = container_of(work, struct sioq_args, tqueue); + struct sioq_args *args = data; struct unlink_args *u = &args->unlink; args->err = vfs_unlink(u->parent, u->dentry); complete(&args->comp); } -void __delete_whiteouts(struct work_struct *work) { - struct sioq_args *args = container_of(work, struct sioq_args, tqueue); +void __delete_whiteouts(void *data) { + struct sioq_args *args = data; struct deletewh_args *d = &args->deletewh; args->err = delete_whiteouts(d->dentry, d->bindex, d->namelist); complete(&args->comp); } -void __is_opaque_dir(struct work_struct *work) +void __is_opaque_dir(void *data) { - struct sioq_args *args = container_of(work, struct sioq_args, tqueue); + struct sioq_args *args = data; args->ret = lookup_one_len(UNIONFS_DIR_OPAQUE, args->isopaque.dentry, sizeof(UNIONFS_DIR_OPAQUE) - 1); diff -ur -x Module.symvers -x control.backup -x fistdev.mk -x Makefile -x control unionfs.orig/build/sioq.h unionfs/build/sioq.h --- unionfs.orig/build/sioq.h 2007-04-17 11:07:54.000000000 +0200 +++ unionfs/build/sioq.h 2007-01-29 00:55:07.000000000 +0100 @@ -50,8 +50,6 @@ int err; void *ret; - struct work_struct tqueue; - union { struct deletewh_args deletewh; struct isopaque_args isopaque; @@ -66,16 +64,16 @@ extern struct workqueue_struct *sioq; int __init init_sioq(void); extern void fin_sioq(void); -extern void run_sioq(work_func_t func, struct sioq_args *args); +extern void run_sioq(void (*func)(void *arg), struct sioq_args *args); /* Extern definitions for our privledge escalation helpers */ -extern void __unionfs_create(struct work_struct *work); -extern void __unionfs_mkdir(struct work_struct *work); -extern void __unionfs_mknod(struct work_struct *work); -extern void __unionfs_symlink(struct work_struct *work); -extern void __unionfs_unlink(struct work_struct *work); -extern void __delete_whiteouts(struct work_struct *work); -extern void __is_opaque_dir(struct work_struct *work); +extern void __unionfs_create(void *data); +extern void __unionfs_mkdir(void *data); +extern void __unionfs_mknod(void *data); +extern void __unionfs_symlink(void *data); +extern void __unionfs_unlink(void *data); +extern void __delete_whiteouts(void *data); +extern void __is_opaque_dir(void *data); #endif /* _SIOQ_H */ diff -ur -x Module.symvers -x control.backup -x fistdev.mk -x Makefile -x control unionfs.orig/build/stale_inode.c unionfs/build/stale_inode.c --- unionfs.orig/build/stale_inode.c 2007-04-17 10:28:04.000000000 +0200 +++ unionfs/build/stale_inode.c 2007-01-29 00:55:07.000000000 +0100 @@ -10,7 +10,7 @@ * $Id: stale_inode.c,v 1.13 2006/03/21 09:22:11 jsipek Exp $ */ -/*#include <linux/config.h>*/ +#include <linux/config.h> #include <linux/version.h> #include <linux/fs.h> diff -ur -x Module.symvers -x control.backup -x fistdev.mk -x Makefile -x control unionfs.orig/build/super.c unionfs/build/super.c --- unionfs.orig/build/super.c 2007-04-17 10:41:48.000000000 +0200 +++ unionfs/build/super.c 2007-01-29 00:55:07.000000000 +0100 @@ -24,7 +24,7 @@ /* The inode cache is used with alloc_inode for both our inode info and the * vfs inode. */ -static struct kmem_cache *unionfs_inode_cachep; +static kmem_cache_t *unionfs_inode_cachep; static void unionfs_read_inode(struct inode *inode) { @@ -326,7 +326,7 @@ print_entry_location(); c = (struct unionfs_inode_container *) - kmem_cache_alloc(unionfs_inode_cachep, GFP_KERNEL); + kmem_cache_alloc(unionfs_inode_cachep, SLAB_KERNEL); if (!c) { print_exit_pointer(NULL); return NULL; @@ -346,7 +346,7 @@ print_exit_location(); } -static void init_once(void *v, struct kmem_cache * cachep, unsigned long flags) +static void init_once(void *v, kmem_cache_t * cachep, unsigned long flags) { struct unionfs_inode_container *c = (struct unionfs_inode_container *)v; @@ -380,10 +380,9 @@ print_entry_location(); if (!unionfs_inode_cachep) goto out; - kmem_cache_destroy(unionfs_inode_cachep); - /*if (kmem_cache_destroy(unionfs_inode_cachep)) + if (kmem_cache_destroy(unionfs_inode_cachep)) printk(KERN_ERR - "unionfs_inode_cache: not all structures were freed\n");*/ + "unionfs_inode_cache: not all structures were freed\n"); out: print_exit_location(); return; diff -ur -x Module.symvers -x control.backup -x fistdev.mk -x Makefile -x control unionfs.orig/build/unionfs.h unionfs/build/unionfs.h --- unionfs.orig/build/unionfs.h 2007-04-17 10:27:57.000000000 +0200 +++ unionfs/build/unionfs.h 2007-01-29 00:55:07.000000000 +0100 @@ -3,7 +3,7 @@ #ifdef __KERNEL__ -/*#include <linux/config.h>*/ +#include <linux/config.h> #include <linux/version.h> #include <linux/sched.h> #include <linux/kernel.h> @@ -517,7 +517,7 @@ dest->i_atime = src->i_atime; dest->i_mtime = src->i_mtime; dest->i_ctime = src->i_ctime; - /*dest->i_blksize = src->i_blksize;*/ + dest->i_blksize = src->i_blksize; dest->i_blkbits = src->i_blkbits; dest->i_size = src->i_size; dest->i_blocks = src->i_blocks;