Arla on Linux 2.6.27
Bo Brantén
bosse at acc.umu.se
Mon Oct 27 18:23:22 CET 2008
Hello,
I have updated my patch with one small change so that it works on more
versions of the kernel, now it supports Linux 2.6.24.7, 2.6.25.19,
2.6.26.7 and 2.6.27.4.
This is a diff to the current CVS version of Arla (not 0.90)
diff -cr arla/nnpfs/linux/nnpfs_blocks.c arla-bo/nnpfs/linux/nnpfs_blocks.c
*** arla/nnpfs/linux/nnpfs_blocks.c 2008-03-08 22:38:16.000000000 +0100
--- arla-bo/nnpfs/linux/nnpfs_blocks.c 2008-10-06 19:13:20.000000000 +0200
***************
*** 403,414 ****
--- 403,423 ----
if (IS_ERR(dentry)) {
ret = PTR_ERR(dentry);
} else {
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25)
ret = vfs_create(nd.dentry->d_inode, dentry, S_IRUSR|S_IWUSR, &nd);
+ #else
+ ret = vfs_create(nd.path.dentry->d_inode, dentry, S_IRUSR|S_IWUSR, &nd);
+ #endif
dput(dentry);
}
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25)
mutex_unlock(&nd.dentry->d_inode->i_mutex);
path_release(&nd);
+ #else
+ mutex_unlock(&nd.path.dentry->d_inode->i_mutex);
+ path_put(&nd.path);
+ #endif
if (ret) {
printk("nnpfs_block_open(%s) create failed: %d\n", cachename, -ret);
***************
*** 422,433 ****
--- 431,450 ----
ret = nnpfs_block_extend(node, offset);
}
} else {
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25)
struct file *f = dentry_open(nd.dentry, nd.mnt, flags);
+ #else
+ struct file *f = dentry_open(nd.path.dentry, nd.path.mnt, flags);
+ #endif
if (IS_ERR(f)) {
ret = PTR_ERR(f);
printk("nnpfs_block_open(%s) open failed: %d\n", cachename, -ret);
nnpfs_debug_oops();
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25)
path_release(&nd);
+ #else
+ path_put(&nd.path);
+ #endif
} else {
*file = f;
}
diff -cr arla/nnpfs/linux/nnpfs_inodeops.c arla-bo/nnpfs/linux/nnpfs_inodeops.c
*** arla/nnpfs/linux/nnpfs_inodeops.c 2008-03-08 22:40:10.000000000 +0100
--- arla-bo/nnpfs/linux/nnpfs_inodeops.c 2008-10-06 21:03:57.000000000 +0200
***************
*** 138,149 ****
--- 138,151 ----
*
*/
+ #if 0
void
nnpfs_print_lock(char *s, struct semaphore *sem)
{
NNPFSDEB(XDEBLOCK, ("lock: %s sem: %p count: %d\n",
s, sem, (int)atomic_read(&sem->count)));
}
+ #endif
/*
*
***************
*** 596,603 ****
--- 598,610 ----
* We don't hold i_mutex.
*/
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27)
static int
nnpfs_permission(struct inode *inode, int mode, struct nameidata *nd)
+ #else
+ static int
+ nnpfs_permission(struct inode *inode, int mode)
+ #endif
{
int error = 0;
nnpfs_pag_t pag = nnpfs_get_pag();
diff -cr arla/nnpfs/linux/nnpfs_message.c arla-bo/nnpfs/linux/nnpfs_message.c
*** arla/nnpfs/linux/nnpfs_message.c 2006-12-11 17:40:24.000000000 +0100
--- arla-bo/nnpfs/linux/nnpfs_message.c 2008-10-06 19:51:49.000000000 +0200
***************
*** 735,743 ****
--- 735,749 ----
"nnpfs_message_version failed path_lookup, "
"errno: %d\n", error);
} else {
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25)
nnpfsp->cacheroot = mntget(nd.mnt);
nnpfsp->cachedir = dget(nd.dentry);
path_release(&nd);
+ #else
+ nnpfsp->cacheroot = mntget(nd.path.mnt);
+ nnpfsp->cachedir = dget(nd.path.dentry);
+ path_put(&nd.path);
+ #endif
nnpfsp->uid = current->fsuid;
nnpfsp->gid = current->fsgid;
diff -cr arla/nnpfs/linux/nnpfs_syscalls.c arla-bo/nnpfs/linux/nnpfs_syscalls.c
*** arla/nnpfs/linux/nnpfs_syscalls.c 2007-01-03 15:26:27.000000000 +0100
--- arla-bo/nnpfs/linux/nnpfs_syscalls.c 2008-10-06 20:09:04.000000000 +0200
***************
*** 147,152 ****
--- 147,154 ----
#define SEC2PAG(s) (nnpfs_pag_t)(unsigned long)(s)
#define PAG2SEC(p) (void *)(unsigned long)(p)
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)
+
static int
nnpfs_sec_task_alloc(struct task_struct *p)
{
***************
*** 164,169 ****
--- 166,173 ----
p->security = NULL;
}
+ #endif
+
static nnpfs_pag_t
nnpfs_get_pag_sec(void)
{
***************
*** 188,198 ****
--- 192,204 ----
return 0;
}
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)
static struct security_operations nnpfs_sec_ops = {
.task_alloc_security = nnpfs_sec_task_alloc,
.task_free_security = nnpfs_sec_task_free,
// .task_reparent_to_init = nnpfs_sec_reparent_to_init,
};
+ #endif
#endif /* CONFIG_SECURITY */
***************
*** 244,250 ****
--- 250,260 ----
{
struct group_info *old_gi = current->group_info;
struct group_info *new_gi;
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25)
int nblocks, count;
+ #else
+ unsigned int nblocks, count;
+ #endif
int found = 0;
int i, k;
***************
*** 528,534 ****
--- 538,548 ----
putname(kname);
if (error)
return ERR_PTR(error);
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25)
return nd->dentry;
+ #else
+ return nd->path.dentry;
+ #endif
}
asmlinkage long
***************
*** 675,681 ****
--- 689,699 ----
unlock:
if (dentry)
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25)
path_release(&nd);
+ #else
+ path_put(&nd.path);
+ #endif
NNPFSDEB(XDEBSYS, ("nnpfs_syscall returns error: %ld\n", error));
***************
*** 779,786 ****
static int nnpfs_init_procfs(void)
{
struct proc_dir_entry *entry;
!
nnpfs_procfs_dir = proc_mkdir(NNPFS_PROC_DIR, proc_root_fs);
if (nnpfs_procfs_dir == NULL)
return -ENOMEM;
--- 797,808 ----
static int nnpfs_init_procfs(void)
{
struct proc_dir_entry *entry;
!
! #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26)
nnpfs_procfs_dir = proc_mkdir(NNPFS_PROC_DIR, proc_root_fs);
+ #else
+ nnpfs_procfs_dir = proc_mkdir("fs/" NNPFS_PROC_DIR, NULL);
+ #endif
if (nnpfs_procfs_dir == NULL)
return -ENOMEM;
***************
*** 789,795 ****
--- 811,821 ----
entry = create_proc_entry(NNPFS_PROC_NODE, 0666, nnpfs_procfs_dir);
if (entry == NULL) {
NNPFSDEB(XDEBSYS, ("nnpfs_init_procfs: no node\n"));
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26)
remove_proc_entry(NNPFS_PROC_DIR, proc_root_fs);
+ #else
+ remove_proc_entry("fs/" NNPFS_PROC_DIR, NULL);
+ #endif
return -ENOMEM;
}
***************
*** 815,821 ****
--- 841,851 ----
}
#endif /* SYSCALLCOMPAT */
remove_proc_entry(NNPFS_PROC_NODE, nnpfs_procfs_dir);
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26)
remove_proc_entry(NNPFS_PROC_DIR, proc_root_fs);
+ #else
+ remove_proc_entry("fs/" NNPFS_PROC_DIR, NULL);
+ #endif
}
#ifdef GROUPPAGS
***************
*** 840,851 ****
--- 870,883 ----
install_afs_syscall(void)
{
#ifdef CONFIG_SECURITY
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)
if (register_security(&nnpfs_sec_ops))
NNPFSDEB(XDEBSYS,
("install_afs_syscall: nnpfs_init_sec failed\n"));
else
nnpfs_sec_registered = 1;
#endif
+ #endif
nnpfs_init_procfs();
***************
*** 888,896 ****
--- 920,930 ----
#endif /* SYSCALLHACK */
#ifdef CONFIG_SECURITY
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)
if (nnpfs_sec_registered)
if (unregister_security(&nnpfs_sec_ops))
printk(KERN_EMERG "nnpfs_exit_sec: couldn't unregister\n");
+ #endif
#endif /* !CONFIG_SECURITY */
#ifdef GROUPPAGS
diff -cr arla/nnpfs/linux/nnpfs_syscalls-lossage.c arla-bo/nnpfs/linux/nnpfs_syscalls-lossage.c
*** arla/nnpfs/linux/nnpfs_syscalls-lossage.c 2006-12-11 17:31:45.000000000 +0100
--- arla-bo/nnpfs/linux/nnpfs_syscalls-lossage.c 2008-10-06 19:17:03.000000000 +0200
***************
*** 63,68 ****
--- 63,73 ----
unsigned long *offset,
char **modname, char *namebuf);
+ #if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,18)
+ #ifdef __x86_64__
+ extern rwlock_t tasklist_lock __attribute__((weak));
+ #endif
+ #endif
static void **
get_start_addr(void) {
#ifdef __x86_64__
diff -cr arla/nnpfs/linux/nnpfs_vfsops.c arla-bo/nnpfs/linux/nnpfs_vfsops.c
*** arla/nnpfs/linux/nnpfs_vfsops.c 2006-12-11 17:43:35.000000000 +0100
--- arla-bo/nnpfs/linux/nnpfs_vfsops.c 2008-10-06 20:50:41.000000000 +0200
***************
*** 49,57 ****
--- 49,61 ----
struct nnpfs nnpfs[NNNPFS];
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25)
static void nnpfs_read_inode(struct inode *inode);
+ #endif
static void nnpfs_put_super(struct super_block *sb);
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25)
static void nnpfs_put_inode(struct inode *inode);
+ #endif
static void nnpfs_write_super(struct super_block * sb);
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
***************
*** 61,68 ****
--- 65,74 ----
#endif
static struct super_operations nnpfs_sops = {
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25)
read_inode : nnpfs_read_inode,
put_inode : nnpfs_put_inode,
+ #endif
alloc_inode : nnpfs_node_alloc,
destroy_inode : nnpfs_node_free,
drop_inode : generic_delete_inode,
***************
*** 189,195 ****
--- 195,205 ----
if (error)
ddev = ERR_PTR(error);
else
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25)
ddev = nd.dentry;
+ #else
+ ddev = nd.path.dentry;
+ #endif
if (!IS_ERR(ddev)) {
minordevice = MINOR(ddev->d_inode->i_rdev);
***************
*** 273,278 ****
--- 283,289 ----
NNPFSDEB(XDEBVFOPS, ("nnpfs_put_super exiting\n"));
}
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25)
static void
nnpfs_read_inode(struct inode *inode)
{
***************
*** 339,344 ****
--- 350,356 ----
up(&nnpfsp->inactive_sem);
}
+ #endif // LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25)
static int
nnpfs_statfs_int(struct super_block *sb, struct kstatfs *buf)
***************
*** 352,358 ****
--- 364,378 ----
tmp.f_bavail = 1024*1024*2-50;
tmp.f_files = 1024*1024;
tmp.f_ffree = 1024*1024-100;
+ tmp.f_fsid.val[0] = 0;
+ tmp.f_fsid.val[1] = 0;
tmp.f_namelen = NAME_MAX;
+ tmp.f_frsize = 0;
+ tmp.f_spare[0] = 0;
+ tmp.f_spare[1] = 0;
+ tmp.f_spare[2] = 0;
+ tmp.f_spare[3] = 0;
+ tmp.f_spare[4] = 0;
*buf = tmp;
return 0;
}
More information about the Arla-drinkers
mailing list