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