Patches for FreeBSD -CURRENT

Andrea Campi andrea at webcom.it
Mon Dec 10 18:55:28 CET 2001


Hi,

lately I've been working on getting Arla (xfs really) to work better on FreeBSD
-CURRENT and to allow it to be compiled in the kernel instead of as a module.
My goal is to have xfs committed to the FreeBSD repo, and hopefully merged to
the 4.x branch, to make it easier to keep it up to date with FreeBSD evolution.

A few changes are needed before this can happen; I've summarized them in a
single patch. I've sent this to Assar, who's accepted my patches before, but
he's probably busy lately as he's not answered in 2 weeks. Would anybody care
to review and hopefully commit?

This is a short description of my changes (I didn't review this text from the
original mail to Assar):

 - xfs_message.c and xfs_node-bsd.c are needed on both -CURRENT and -STABLE
after recent changes. Sorry I didn't protect them with a __FreeBSD_version
check, but as you said, it's probably more important to have better support for
recent versions. If any problem emerges we can always fix later.

 - In xfs_syscalls-common.c I sort of fixed an admittedly kludgy #ifdef which
mandated defining HAVE_CONFIG_H. This way I can avoid this define. Also, I
fixed compilation in the kernel (vs. module). Last, crcopy() changed semantics
in recent -CURRENT. This breaks -STABLE, sorry but I thought of that only right
now. Feel free to fix or I will do it later.

 - Most of the rest deals with compilation in the kernel.

You can see I renamed the module "arlaxfsdev" in DEV_MODULE (xfs_wrap-bsd.c). I
did this in order to avoid future conflicts in case we import SGI XFS in the
future; you might want to avoid that part for now.

If you agree to commit this, we will be able to import the required files only
in contrib, as follows (pseudocode):

cd /u/arla/xfs/bsd
cp xfs_deb.c xfs_message.c xfs_common.c xfs_wrap-bsd.c xfs_common-bsd.c xfs_dev-common.c xfs_dev-bsd.c xfs_syscalls-common.c xfs_syscalls-wrap-freebsd.c xfs_node-bsd.c xfs_vfsops-common.c xfs_vfsops-bsd.c xfs_vfsops-freebsd.c xfs_vnodeops-common.c xfs_vnodeops-bsd.c sys/contrib/dev/arlaxfs
cp xfs/* sys/contrib/dev/arlaxfs/xfs
cp /u/arla/xfs/include/xfs/* sys/contrib/dev/arlaxfs/xfs
cp /u/arla/include/{afssysdefs.h,kafs.h} sys/contrib/dev/arlaxfs

xfs_config.h, xfs_vopdefs.h must be maintained by hand, for now I would import
them in contrib.

I have reached the point where I can compile everything both in the kernel and
as module, and kldload the module, with no error. I'm sure I still need to fix
a few things but I need to commit things or I will lose too much time every time
anything changes; having things in the repo will make for faster work.

Please give me feedback.

Bye,
	Andrea

-- 
                       There's no place like ~

diff -urN xfs/bsd/xfs_dev-bsd.c xfs/bsd/xfs_dev-bsd.c
--- xfs/bsd/xfs_dev-bsd.c	Mon Nov 26 14:45:32 2001
+++ xfs/bsd/xfs_dev-bsd.c	Sat Nov 24 01:14:18 2001
@@ -322,7 +322,7 @@
     return xfs_uprintf_device();
 }
 
-#if !defined(_LKM) && !defined(KLD_MODULE) && !defined(__APPLE__)
+#if !defined(_LKM) && !defined(KLD_MODULE) && !defined(__APPLE__) && !defined(__FreeBSD__)
 int
 xfs_is_xfs_dev(dev_t dev)
 {
diff -urN xfs/bsd/xfs_message.c xfs/bsd/xfs_message.c
--- xfs/bsd/xfs_message.c	Mon Nov 26 14:45:32 2001
+++ xfs/bsd/xfs_message.c	Fri Nov 23 22:20:17 2001
@@ -494,11 +494,11 @@
 	/* XXX see comment in xfs_node_find */
 	/* XXXSMP do gone[l] need to get mntvnode_slock ? */
 
-	for(vp = XFS_TO_VFS(&xfs[fd])->mnt_vnodelist.lh_first;
+	for(vp = XFS_TO_VFS(&xfs[fd])->mnt_nvnodelist.tqh_first;
 	    vp != NULL; 
 	    vp = next) {
 
-	    next = vp->v_mntvnodes.le_next;
+	    next = vp->v_nmntvnodes.tqe_next;
 	    gc_vnode (vp, p);
 	}
     } else {
diff -urN xfs/bsd/xfs_node-bsd.c xfs/bsd/xfs_node-bsd.c
--- xfs/bsd/xfs_node-bsd.c	Mon Nov 26 14:45:32 2001
+++ xfs/bsd/xfs_node-bsd.c	Fri Nov 23 22:22:41 2001
@@ -280,7 +280,7 @@
      *       on FreeBSD once.
      */
 
-    LIST_FOREACH(t, &XFS_TO_VFS(xfsp)->mnt_vnodelist, v_mntvnodes) {
+    TAILQ_FOREACH(t, &XFS_TO_VFS(xfsp)->mnt_nvnodelist, v_nmntvnodes) {
 	xn = VNODE_TO_XNODE(t);
 	if (xn && xfs_handle_eq(&xn->handle, handlep))
 	    break;
diff -urN xfs/bsd/xfs_syscalls-common.c xfs/bsd/xfs_syscalls-common.c
--- xfs/bsd/xfs_syscalls-common.c	Mon Nov 26 14:45:32 2001
+++ xfs/bsd/xfs_syscalls-common.c	Sat Nov 24 01:37:09 2001
@@ -57,7 +57,7 @@
  * XXX - horrible kludge. If we're built without HAVE_CONFIG_H we assume that
  *       we're built inside the kernel on OpenBSD.
  */
-#ifdef HAVE_CONFIG_H
+#if !defined(__OpenBSD__)
 #include <kafs.h>
 #else
 #include <xfs/xfs_pioctl.h>
@@ -67,9 +67,11 @@
 
 /*
  * the syscall entry point
+ *
+ * FIXME for !LKM on FreeBSD
  */
 
-#if defined(_LKM) || defined(KLD_MODULE) || defined(__osf__) || defined(__APPLE__)
+#if defined(_LKM) || defined(KLD_MODULE) || defined(__osf__) || defined(__APPLE__) || defined(__FreeBSD__)
 int
 xfspioctl(d_thread_t *proc, void *varg, register_t *return_value)
 #else
@@ -77,7 +79,7 @@
 sys_xfspioctl(d_thread_t *proc, void *varg, register_t *return_value)
 #endif
 {
-#if defined(_LKM) || defined(KLD_MODULE) || defined(__osf__) || defined(__APPLE__)
+#if defined(_LKM) || defined(KLD_MODULE) || defined(__osf__) || defined(__APPLE__) || defined(__FreeBSD__)
     struct sys_pioctl_args *arg = (struct sys_pioctl_args *) varg;
 #else
     struct sys_xfspioctl_args *arg = (struct sys_xfspioctl_args *) varg;
@@ -169,14 +171,14 @@
 	if (cred->cr_ngroups + 2 >= NGROUPS)
 	    return E2BIG;
 
-	cred = crcopy (cred);
+	crcopy(cred, cred);
 
 	for (i = cred->cr_ngroups - 1; i > 0; i--) {
 	    cred->cr_groups[i + 2] = cred->cr_groups[i];
 	}
 	cred->cr_ngroups += 2;
     } else {
-	cred = crcopy (cred);
+	crcopy(cred, cred);
     }
     cred->cr_groups[1] = part1;
     cred->cr_groups[2] = part2;
diff -urN xfs/bsd/xfs_wrap-bsd.c xfs/bsd/xfs_wrap-bsd.c
--- xfs/bsd/xfs_wrap-bsd.c	Mon Nov 26 14:45:32 2001
+++ xfs/bsd/xfs_wrap-bsd.c	Sat Nov 24 02:13:03 2001
@@ -173,7 +192,8 @@
 
 #ifdef DEV_MODULE
 
-DEV_MODULE(xfsdev, xfs_load, NULL);
+DEV_MODULE(arlaxfsdev, xfs_load, NULL);
+MODULE_VERSION(arlaxfsdev, 1);
 
 #else /* DEV_MODULE */
 
@@ -182,18 +202,15 @@
 #endif /* DECLARE_MODULE */
 
 #else /* KLD_MODULE */
+#if !defined(__FreeBSD__)
 
 /*
  * An ordinary lkm-module
  */
 
-#if defined(__FreeBSD__)
-MOD_DEV(xfs,LM_DT_CHAR,-1,&xfs_dev);
-#else
 #if !defined(__APPLE__)
 MOD_DEV("xfs_mod",LM_DT_CHAR,-1,&xfs_dev)
 #endif
-#endif
 
 /*
  *
@@ -294,6 +311,7 @@
     return ret;
 }
 #endif
-
+
+#endif
 #endif /* KLD_MODULE */

--- xfs/include/xfs/xfs_message.h	Sun Oct 14 13:17:09 2001
+++ xfs/include/xfs/xfs_message.h	Mon Nov 26 15:28:17 2001
@@ -52,7 +52,11 @@
 #error not a i386
 #endif
 #elif !defined(__LINUX__) && !defined(HAVE_GLIBC)
+#if defined(__FreeBSD__)
+#include <sys/types.h>
+#else
 #include <atypes.h>
+#endif
 #else
 #include <linux/types.h>
 #endif
--- xfs/bsd/xfs/xfs_locl.h	Mon Nov 26 15:25:03 2001
+++ xfs/bsd/xfs/xfs_locl.h	Fri Nov 23 22:14:03 2001
@@ -211,6 +211,21 @@
 void cache_purgevfs(struct mount *);
 #endif
 
+#ifdef __FreeBSD_version
+#if __FreeBSD_version < 400000
+# error This version is unsupported
+#elif __FreeBSD_version < 500023
+typedef struct proc d_thread_t;
+#elif __FreeBSD_version == 500023
+#   define HAVE_FREEBSD_THREAD
+typedef struct thread d_thread_t;
+#elif __FreeBSD_version >= 500024
+#   define HAVE_FREEBSD_THREAD
+#endif
+#else /* !__FreeBSD_version */
+typedef struct proc d_thread_t;
+#endif /* !__FreeBSD_version */
+
 #if defined(HAVE_FREEBSD_THREAD)
 #define xfs_uio_to_thread(uiop) ((uiop)->uio_td)
 #define xfs_cnp_to_thread(cnp) ((cnp)->cn_thread)
@@ -241,21 +256,6 @@
 typedef u_quad_t va_size_t;
 
 #endif /* !__osf__ */
-
-#ifdef __FreeBSD_version
-#if __FreeBSD_version < 400000
-# error This version is unsupported
-#elif __FreeBSD_version < 500023
-typedef struct proc d_thread_t;
-#elif __FreeBSD_version == 500023
-#   define HAVE_FREEBSD_THREAD
-typedef struct thread d_thread_t;
-#elif __FreeBSD_version >= 500024
-#   define HAVE_FREEBSD_THREAD
-#endif
-#else /* !__FreeBSD_version */
-typedef struct proc d_thread_t;
-#endif /* !__FreeBSD_version */
 
 /*
  * XXX


----- End forwarded message -----

-- 
                       There's no place like ~





More information about the Arla-drinkers mailing list