diff options
Diffstat (limited to 'sys')
-rw-r--r-- | sys/conf/GENERIC | 4 | ||||
-rw-r--r-- | sys/xfs/xfs_dev-bsd.c | 310 |
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 |