summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
Diffstat (limited to 'sys')
-rw-r--r--sys/conf/GENERIC4
-rw-r--r--sys/xfs/xfs_dev-bsd.c310
2 files changed, 60 insertions, 254 deletions
diff --git a/sys/conf/GENERIC b/sys/conf/GENERIC
index 8750a7324f1..2f23f129325 100644
--- a/sys/conf/GENERIC
+++ b/sys/conf/GENERIC
@@ -1,4 +1,4 @@
-# $OpenBSD: GENERIC,v 1.98 2004/01/07 20:54:35 tedu Exp $
+# $OpenBSD: GENERIC,v 1.99 2004/01/18 21:46:53 beck Exp $
#
# Machine-independent option; used by all architectures for their
# GENERIC kernel
@@ -36,7 +36,7 @@ option UFS_DIRHASH # hash large directories
option QUOTA # UFS quotas
option EXT2FS # Second Extended Filesystem
option MFS # memory file system
-#option XFS # xfs filesystem
+option XFS # xfs filesystem
option TCP_SACK # Selective Acknowledgements for TCP
option TCP_ECN # Explicit Congestion Notification for TCP
diff --git a/sys/xfs/xfs_dev-bsd.c b/sys/xfs/xfs_dev-bsd.c
index 9316de4cff9..88b99406b84 100644
--- a/sys/xfs/xfs_dev-bsd.c
+++ b/sys/xfs/xfs_dev-bsd.c
@@ -1,4 +1,6 @@
-/*
+/* $OpenBSD: xfs_dev-bsd.c,v 1.10 2004/01/18 21:46:54 beck Exp $
+
+ * Copyright (c) 2004 Bob Beck
* Copyright (c) 1995 - 2003 Kungliga Tekniska Högskolan
* (Royal Institute of Technology, Stockholm, Sweden).
* All rights reserved.
@@ -38,306 +40,111 @@
#include <xfs/xfs_dev.h>
#include <xfs/xfs_deb.h>
-RCSID("$arla: xfs_dev-bsd.c,v 1.35 2003/04/01 14:04:11 lha Exp $");
-
int
xfs_devopen(dev_t dev, int flag, int devtype, d_thread_t *proc)
{
- NNPFSDEB(XDEBDEV, ("xfsopen dev = %d.%d, flag = %d, devtype = %d\n",
- major(dev), minor(dev), flag, devtype));
- return xfs_devopen_common(dev);
+ NNPFSDEB(XDEBDEV, ("xfsopen dev = %d.%d, flag = %d, devtype = %d\n",
+ major(dev), minor(dev), flag, devtype));
+ return xfs_devopen_common(dev);
}
int
xfs_devclose(dev_t dev, int flag, int devtype, d_thread_t *p)
{
-#ifdef NNPFS_DEBUG
- char devname[64];
-#endif
+ NNPFSDEB(XDEBDEV, ("xfs_devclose dev = %d(%d), flag = 0x%x\n",
+ major(dev), minor(dev), flag));
- NNPFSDEB(XDEBDEV, ("xfs_devclose dev = %s, flag = 0x%x\n",
- xfs_devtoname_r(dev, devname, sizeof(devname)),
- flag));
- return xfs_devclose_common(dev, p);
+ return xfs_devclose_common(dev, p);
}
-/*
- * Not used.
- */
-
int
-xfs_devioctl(dev_t dev,
- u_long cmd,
- caddr_t data,
- int flags,
- d_thread_t *p)
+xfs_devioctl(dev_t dev, u_long cmd, caddr_t data, int flags, d_thread_t *p)
{
- NNPFSDEB(XDEBDEV, ("xfs_devioctl dev = %d.%d, cmd = %lu, "
- "data = %lx, flags = %x\n",
- major(dev), minor(dev), (unsigned long)cmd,
- (unsigned long)data, flags));
- return ENOTTY;
+ NNPFSDEB(XDEBDEV, ("xfs_devioctl dev = %d.%d, cmd = %lu, "
+ "data = %lx, flags = %x\n", major(dev), minor(dev),
+ (unsigned long)cmd, (unsigned long)data, flags));
+ return ENOTTY;
}
-#ifdef HAVE_VOP_SELECT
-static int
-xfs_realselect(dev_t dev, d_thread_t *p, void *wql)
-{
- struct xfs_channel *chan = &xfs_channel[minor(dev)];
-
- if (!xfs_emptyq(&chan->messageq))
- return 1; /* Something to read */
-
-#ifdef HAVE_THREE_ARGUMENT_SELRECORD
- selrecord (p, &chan->selinfo, wql);
-#else
- selrecord (p, &chan->selinfo);
-#endif
- return 0;
-}
-#endif
-
-#ifdef HAVE_VOP_POLL
int
xfs_devpoll(dev_t dev, int events, d_thread_t * p)
{
- struct xfs_channel *chan = &xfs_channel[minor(dev)];
-#ifdef NNPFS_DEBUG
- char devname[64];
-#endif
-
- NNPFSDEB(XDEBDEV, ("xfs_devpoll dev = %s, events = 0x%x\n",
- xfs_devtoname_r (dev, devname, sizeof(devname)),
- events));
+ struct xfs_channel *chan = &xfs_channel[minor(dev)];
+
+ NNPFSDEB(XDEBDEV, ("xfs_devpoll dev = %d(%d), events = 0x%x\n",
+ major(dev), minor(dev), events));
+
+ if ((events & (POLLIN | POLLRDNORM)) == 0)
+ return 0; /* only supports read */
+
+ if (!xfs_emptyq(&chan->messageq))
+ return (events & (POLLIN | POLLRDNORM));
+
+ selrecord (p, &chan->selinfo);
- if ((events & (POLLIN | POLLRDNORM)) == 0)
- return 0; /* only supports read */
-
- if (!xfs_emptyq(&chan->messageq))
- return (events & (POLLIN | POLLRDNORM));
-
-#ifdef HAVE_THREE_ARGUMENT_SELRECORD
- selrecord (p, &chan->selinfo, wql);
-#else
- selrecord (p, &chan->selinfo);
-#endif
- return 0;
-}
-#endif
-
-#ifdef HAVE_VOP_SELECT
-#ifdef HAVE_THREE_ARGUMENT_SELRECORD
-int
-xfs_devselect(dev_t dev, int which, void *wql, struct proc * p)
-{
- NNPFSDEB(XDEBDEV, ("xfs_devselect dev = %d, which = %d\n", dev, which));
-
- if (which != FREAD)
return 0;
-
- return xfs_realselect(dev, p, wql);
}
-#else
-int
-xfs_devselect(dev_t dev, int which, d_thread_t * p)
-{
- NNPFSDEB(XDEBDEV, ("xfs_devselect dev = %d, which = %d\n", dev, which));
-
- if (which != FREAD)
- return 0;
-
- return xfs_realselect(dev, p, NULL);
-}
-#endif
-#endif
void
xfs_select_wakeup(struct xfs_channel *chan)
{
- selwakeup (&chan->selinfo);
+ selwakeup (&chan->selinfo);
}
/*
* Install and uninstall device.
*/
-#if defined(__NetBSD__)
-struct cdevsw xfs_dev = {
- xfs_devopen,
- xfs_devclose,
- xfs_devread,
- xfs_devwrite,
- xfs_devioctl,
- (dev_type_stop((*))) enodev,
- 0,
- xfs_devpoll,
- (dev_type_mmap((*))) enodev,
- 0
-};
-
-#elif defined(__OpenBSD__)
struct cdevsw xfs_dev = {
- xfs_devopen,
- xfs_devclose,
- xfs_devread,
- xfs_devwrite,
- xfs_devioctl,
- (dev_type_stop((*))) enodev,
- 0,
- xfs_devpoll,
- (dev_type_mmap((*))) enodev,
- 0
-};
-
-#elif defined(__FreeBSD__)
-struct cdevsw xfs_dev = {
- d_name: "xfs",
- d_open: xfs_devopen,
- d_close: xfs_devclose,
- d_read: xfs_devread,
- d_write: xfs_devwrite,
- d_ioctl: xfs_devioctl,
- d_mmap: nommap,
- d_strategy: nostrategy,
- d_flags: 0,
-#ifdef HAVE_STRUCT_CDEVSW_D_STOP
- d_stop: nostop,
-#endif
-#ifdef HAVE_STRUCT_CDEVSW_D_RESET
- d_reset: noreset,
-#endif
-#ifdef HAVE_STRUCT_CDEVSW_D_BOGORESET
- d_bogoreset: noreset,
-#endif
-#ifdef HAVE_STRUCT_CDEVSW_D_DEVTOTTY
- d_devtotty: nodevtotty,
-#endif
-#if defined(HAVE_VOP_SELECT)
- d_select: xfs_devselect,
-#elif defined(HAVE_VOP_POLL)
- d_poll: xfs_devpoll,
-#else
-#error select or poll: that is the question
-#endif
-#ifdef HAVE_STRUCT_CDEVSW_D_BOGOPARMS
- d_bogoparms: noparms,
-#endif
-#ifdef HAVE_STRUCT_CDEVSW_D_SPARE
- d_spare: NULL,
-#endif
- d_maj: 128, /* XXX */
- d_dump: nodump,
-#ifdef HAVE_STRUCT_CDEVSW_D_PSIZE
- d_psize: nopsize,
-#endif
-#ifdef HAVE_STRUCT_CDEVSW_D_MAXIO
- d_maxio: 0,
-#endif
-#ifdef HAVE_STRUCT_CDEVSW_D_BMAJ
-#ifdef NOUDEV
- d_bmaj: NOUDEV
-#else
- d_bmaj: NODEV
-#endif
-#endif /* HAVE_STRUCT_CDEVSW_D_BMAJ */
-};
-
-#elif defined(__APPLE__)
-static struct cdevsw xfs_dev = {
- xfs_devopen,
- xfs_devclose,
- xfs_devread,
- xfs_devwrite,
- xfs_devioctl,
- eno_stop,
- eno_reset,
- 0,
- xfs_devselect,
- eno_mmap,
- eno_strat,
- eno_getc,
- eno_putc,
- 0
+ xfs_devopen,
+ xfs_devclose,
+ xfs_devread,
+ xfs_devwrite,
+ xfs_devioctl,
+ (dev_type_stop((*))) enodev,
+ 0,
+ xfs_devpoll,
+ (dev_type_mmap((*))) enodev,
+ 0
};
-#endif /* __APPLE__ */
-
-#if defined(__APPLE__)
-extern int xfs_dev_major;
-#include <miscfs/devfs/devfs.h>
-
-static void *devfs_handles[NNNPFS];
-
-#endif
int
xfs_install_device(void)
{
- int i;
-
-#if defined(__APPLE__)
- xfs_dev_major = cdevsw_add(-1, &xfs_dev);
- if (xfs_dev_major == -1) {
- NNPFSDEB(XDEBDEV, ("failed installing cdev\n"));
- return ENFILE;
- }
-
- for (i = 0; i < NNNPFS; ++i)
- devfs_handles[i] = devfs_make_node(makedev(xfs_dev_major, i),
- DEVFS_CHAR,
- UID_ROOT, GID_WHEEL, 0600,
- "xfs%d", i);
-
- NNPFSDEB(XDEBDEV, ("done installing cdev !\n"));
- NNPFSDEB(XDEBDEV, ("Char device number %d\n", xfs_dev_major));
-#endif
-
- for (i = 0; i < NNNPFS; i++) {
- NNPFSDEB(XDEBDEV, ("before initq(messageq and sleepq)\n"));
- xfs_initq(&xfs_channel[i].messageq);
- xfs_initq(&xfs_channel[i].sleepq);
- xfs_channel[i].status = 0;
- }
- return 0;
+ int i;
+
+ for (i = 0; i < NNNPFS; i++) {
+ NNPFSDEB(XDEBDEV, ("before initq(messageq and sleepq)\n"));
+ xfs_initq(&xfs_channel[i].messageq);
+ xfs_initq(&xfs_channel[i].sleepq);
+ xfs_channel[i].status = 0;
+ }
+ return 0;
}
int
xfs_uninstall_device(void)
{
- int i;
- struct xfs_channel *chan;
- int ret = 0;
-
- for (i = 0; i < NNNPFS; i++) {
- chan = &xfs_channel[i];
- if (chan->status & CHANNEL_OPENED)
- xfs_devclose(makedev(0, i), 0, 0, NULL);
- }
-
-#if defined(__APPLE__)
- for (i = 0; i < NNNPFS; ++i)
- devfs_remove (devfs_handles[i]);
-
- ret = cdevsw_remove(xfs_dev_major, &xfs_dev);
- if (ret == -1) {
+ int i;
+ struct xfs_channel *chan;
+ int ret = 0;
+
+ for (i = 0; i < NNNPFS; i++) {
+ chan = &xfs_channel[i];
+ if (chan->status & CHANNEL_OPENED)
+ xfs_devclose(makedev(0, i), 0, 0, NULL);
+ }
+
NNPFSDEB(XDEBLKM, ("xfs_uninstall_device error %d\n", ret));
- } else if (ret == xfs_dev_major) {
- ret = 0;
- } else {
- NNPFSDEB(XDEBLKM, ("xfs_uninstall_device unexpected error error %d\n",
- ret));
- }
-#endif
- NNPFSDEB(XDEBLKM, ("xfs_uninstall_device error %d\n", ret));
- return ret;
+ return ret;
}
int
xfs_stat_device(void)
{
- return xfs_uprintf_device();
+ return xfs_uprintf_device();
}
-#if !defined(_LKM) && !defined(KLD_MODULE) && !defined(__APPLE__)
int
xfs_is_xfs_dev(dev_t dev)
{
@@ -345,4 +152,3 @@ xfs_is_xfs_dev(dev_t dev)
cdevsw[major(dev)].d_open == xfs_devopen &&
minor(dev) >= 0 && minor(dev) < NNNPFS;
}
-#endif