Re: Arla on Linux 2.6.27

Bo Brantén <[email protected]>
Newsgroups gmane.comp.file-systems.arla.general
Message-ID <[email protected]>
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;
    }
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.