mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-22 02:27:36 +03:00
OpenZFS restructuring - libspl
Factor Linux specific pieces out of libspl. Reviewed-by: Ryan Moeller <ryan@ixsystems.com> Reviewed-by: Sean Eric Fagan <sef@ixsystems.com> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Matt Macy <mmacy@FreeBSD.org> Closes #9336
This commit is contained in:
committed by
Brian Behlendorf
parent
6360e2779e
commit
d31277abb1
@@ -0,0 +1,3 @@
|
||||
if BUILD_LINUX
|
||||
SUBDIRS = linux
|
||||
endif
|
||||
@@ -0,0 +1 @@
|
||||
SUBDIRS = sys
|
||||
@@ -0,0 +1,10 @@
|
||||
libspldir = $(includedir)/libspl/sys
|
||||
libspl_HEADERS = \
|
||||
$(top_srcdir)/lib/libspl/include/os/linux/sys/byteorder.h \
|
||||
$(top_srcdir)/lib/libspl/include/os/linux/sys/file.h \
|
||||
$(top_srcdir)/lib/libspl/include/os/linux/sys/mnttab.h \
|
||||
$(top_srcdir)/lib/libspl/include/os/linux/sys/mount.h \
|
||||
$(top_srcdir)/lib/libspl/include/os/linux/sys/param.h \
|
||||
$(top_srcdir)/lib/libspl/include/os/linux/sys/stat.h \
|
||||
$(top_srcdir)/lib/libspl/include/os/linux/sys/sysmacros.h \
|
||||
$(top_srcdir)/lib/libspl/include/os/linux/sys/uio.h
|
||||
@@ -0,0 +1,225 @@
|
||||
/*
|
||||
* CDDL HEADER START
|
||||
*
|
||||
* The contents of this file are subject to the terms of the
|
||||
* Common Development and Distribution License (the "License").
|
||||
* You may not use this file except in compliance with the License.
|
||||
*
|
||||
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
|
||||
* or http://www.opensolaris.org/os/licensing.
|
||||
* See the License for the specific language governing permissions
|
||||
* and limitations under the License.
|
||||
*
|
||||
* When distributing Covered Code, include this CDDL HEADER in each
|
||||
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
|
||||
* If applicable, add the following below this CDDL HEADER, with the
|
||||
* fields enclosed by brackets "[]" replaced with your own identifying
|
||||
* information: Portions Copyright [yyyy] [name of copyright owner]
|
||||
*
|
||||
* CDDL HEADER END
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright 2007 Sun Microsystems, Inc. All rights reserved.
|
||||
* Use is subject to license terms.
|
||||
*/
|
||||
|
||||
/* Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1989 AT&T */
|
||||
/* All Rights Reserved */
|
||||
|
||||
/*
|
||||
* University Copyright- Copyright (c) 1982, 1986, 1988
|
||||
* The Regents of the University of California
|
||||
* All Rights Reserved
|
||||
*
|
||||
* University Acknowledgment- Portions of this document are derived from
|
||||
* software developed by the University of California, Berkeley, and its
|
||||
* contributors.
|
||||
*/
|
||||
|
||||
#ifndef _SYS_BYTEORDER_H
|
||||
#define _SYS_BYTEORDER_H
|
||||
|
||||
|
||||
|
||||
#include <sys/isa_defs.h>
|
||||
#include <sys/int_types.h>
|
||||
|
||||
#if defined(__GNUC__) && defined(_ASM_INLINES) && \
|
||||
(defined(__i386) || defined(__amd64))
|
||||
#include <asm/byteorder.h>
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*
|
||||
* macros for conversion between host and (internet) network byte order
|
||||
*/
|
||||
|
||||
#if defined(_BIG_ENDIAN) && !defined(ntohl) && !defined(__lint)
|
||||
/* big-endian */
|
||||
#define ntohl(x) (x)
|
||||
#define ntohs(x) (x)
|
||||
#define htonl(x) (x)
|
||||
#define htons(x) (x)
|
||||
|
||||
#elif !defined(ntohl) /* little-endian */
|
||||
|
||||
#ifndef _IN_PORT_T
|
||||
#define _IN_PORT_T
|
||||
typedef uint16_t in_port_t;
|
||||
#endif
|
||||
|
||||
#ifndef _IN_ADDR_T
|
||||
#define _IN_ADDR_T
|
||||
typedef uint32_t in_addr_t;
|
||||
#endif
|
||||
|
||||
#if !defined(_XPG4_2) || defined(__EXTENSIONS__) || defined(_XPG5)
|
||||
extern uint32_t htonl(uint32_t);
|
||||
extern uint16_t htons(uint16_t);
|
||||
extern uint32_t ntohl(uint32_t);
|
||||
extern uint16_t ntohs(uint16_t);
|
||||
#else
|
||||
extern in_addr_t htonl(in_addr_t);
|
||||
extern in_port_t htons(in_port_t);
|
||||
extern in_addr_t ntohl(in_addr_t);
|
||||
extern in_port_t ntohs(in_port_t);
|
||||
#endif /* !defined(_XPG4_2) || defined(__EXTENSIONS__) || defined(_XPG5) */
|
||||
#endif
|
||||
|
||||
#if !defined(_XPG4_2) || defined(__EXTENSIONS__)
|
||||
|
||||
/*
|
||||
* Macros to reverse byte order
|
||||
*/
|
||||
#define BSWAP_8(x) ((x) & 0xff)
|
||||
#define BSWAP_16(x) ((BSWAP_8(x) << 8) | BSWAP_8((x) >> 8))
|
||||
#define BSWAP_32(x) ((BSWAP_16(x) << 16) | BSWAP_16((x) >> 16))
|
||||
#define BSWAP_64(x) ((BSWAP_32(x) << 32) | BSWAP_32((x) >> 32))
|
||||
|
||||
#define BMASK_8(x) ((x) & 0xff)
|
||||
#define BMASK_16(x) ((x) & 0xffff)
|
||||
#define BMASK_32(x) ((x) & 0xffffffff)
|
||||
#define BMASK_64(x) (x)
|
||||
|
||||
/*
|
||||
* Macros to convert from a specific byte order to/from native byte order
|
||||
*/
|
||||
#ifdef _BIG_ENDIAN
|
||||
#define BE_8(x) BMASK_8(x)
|
||||
#define BE_16(x) BMASK_16(x)
|
||||
#define BE_32(x) BMASK_32(x)
|
||||
#define BE_64(x) BMASK_64(x)
|
||||
#define LE_8(x) BSWAP_8(x)
|
||||
#define LE_16(x) BSWAP_16(x)
|
||||
#define LE_32(x) BSWAP_32(x)
|
||||
#define LE_64(x) BSWAP_64(x)
|
||||
#else
|
||||
#define LE_8(x) BMASK_8(x)
|
||||
#define LE_16(x) BMASK_16(x)
|
||||
#define LE_32(x) BMASK_32(x)
|
||||
#define LE_64(x) BMASK_64(x)
|
||||
#define BE_8(x) BSWAP_8(x)
|
||||
#define BE_16(x) BSWAP_16(x)
|
||||
#define BE_32(x) BSWAP_32(x)
|
||||
#define BE_64(x) BSWAP_64(x)
|
||||
#endif
|
||||
|
||||
#ifdef _BIG_ENDIAN
|
||||
static __inline__ uint64_t
|
||||
htonll(uint64_t n)
|
||||
{
|
||||
return (n);
|
||||
}
|
||||
|
||||
static __inline__ uint64_t
|
||||
ntohll(uint64_t n)
|
||||
{
|
||||
return (n);
|
||||
}
|
||||
#else
|
||||
static __inline__ uint64_t
|
||||
htonll(uint64_t n)
|
||||
{
|
||||
return ((((uint64_t)htonl(n)) << 32) + htonl(n >> 32));
|
||||
}
|
||||
|
||||
static __inline__ uint64_t
|
||||
ntohll(uint64_t n)
|
||||
{
|
||||
return ((((uint64_t)ntohl(n)) << 32) + ntohl(n >> 32));
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Macros to read unaligned values from a specific byte order to
|
||||
* native byte order
|
||||
*/
|
||||
|
||||
#define BE_IN8(xa) \
|
||||
*((uint8_t *)(xa))
|
||||
|
||||
#define BE_IN16(xa) \
|
||||
(((uint16_t)BE_IN8(xa) << 8) | BE_IN8((uint8_t *)(xa)+1))
|
||||
|
||||
#define BE_IN32(xa) \
|
||||
(((uint32_t)BE_IN16(xa) << 16) | BE_IN16((uint8_t *)(xa)+2))
|
||||
|
||||
#define BE_IN64(xa) \
|
||||
(((uint64_t)BE_IN32(xa) << 32) | BE_IN32((uint8_t *)(xa)+4))
|
||||
|
||||
#define LE_IN8(xa) \
|
||||
*((uint8_t *)(xa))
|
||||
|
||||
#define LE_IN16(xa) \
|
||||
(((uint16_t)LE_IN8((uint8_t *)(xa) + 1) << 8) | LE_IN8(xa))
|
||||
|
||||
#define LE_IN32(xa) \
|
||||
(((uint32_t)LE_IN16((uint8_t *)(xa) + 2) << 16) | LE_IN16(xa))
|
||||
|
||||
#define LE_IN64(xa) \
|
||||
(((uint64_t)LE_IN32((uint8_t *)(xa) + 4) << 32) | LE_IN32(xa))
|
||||
|
||||
/*
|
||||
* Macros to write unaligned values from native byte order to a specific byte
|
||||
* order.
|
||||
*/
|
||||
|
||||
#define BE_OUT8(xa, yv) *((uint8_t *)(xa)) = (uint8_t)(yv);
|
||||
|
||||
#define BE_OUT16(xa, yv) \
|
||||
BE_OUT8((uint8_t *)(xa) + 1, yv); \
|
||||
BE_OUT8((uint8_t *)(xa), (yv) >> 8);
|
||||
|
||||
#define BE_OUT32(xa, yv) \
|
||||
BE_OUT16((uint8_t *)(xa) + 2, yv); \
|
||||
BE_OUT16((uint8_t *)(xa), (yv) >> 16);
|
||||
|
||||
#define BE_OUT64(xa, yv) \
|
||||
BE_OUT32((uint8_t *)(xa) + 4, yv); \
|
||||
BE_OUT32((uint8_t *)(xa), (yv) >> 32);
|
||||
|
||||
#define LE_OUT8(xa, yv) *((uint8_t *)(xa)) = (uint8_t)(yv);
|
||||
|
||||
#define LE_OUT16(xa, yv) \
|
||||
LE_OUT8((uint8_t *)(xa), yv); \
|
||||
LE_OUT8((uint8_t *)(xa) + 1, (yv) >> 8);
|
||||
|
||||
#define LE_OUT32(xa, yv) \
|
||||
LE_OUT16((uint8_t *)(xa), yv); \
|
||||
LE_OUT16((uint8_t *)(xa) + 2, (yv) >> 16);
|
||||
|
||||
#define LE_OUT64(xa, yv) \
|
||||
LE_OUT32((uint8_t *)(xa), yv); \
|
||||
LE_OUT32((uint8_t *)(xa) + 4, (yv) >> 32);
|
||||
|
||||
#endif /* !defined(_XPG4_2) || defined(__EXTENSIONS__) */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _SYS_BYTEORDER_H */
|
||||
@@ -0,0 +1,49 @@
|
||||
/*
|
||||
* CDDL HEADER START
|
||||
*
|
||||
* The contents of this file are subject to the terms of the
|
||||
* Common Development and Distribution License, Version 1.0 only
|
||||
* (the "License"). You may not use this file except in compliance
|
||||
* with the License.
|
||||
*
|
||||
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
|
||||
* or http://www.opensolaris.org/os/licensing.
|
||||
* See the License for the specific language governing permissions
|
||||
* and limitations under the License.
|
||||
*
|
||||
* When distributing Covered Code, include this CDDL HEADER in each
|
||||
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
|
||||
* If applicable, add the following below this CDDL HEADER, with the
|
||||
* fields enclosed by brackets "[]" replaced with your own identifying
|
||||
* information: Portions Copyright [yyyy] [name of copyright owner]
|
||||
*
|
||||
* CDDL HEADER END
|
||||
*/
|
||||
/*
|
||||
* Copyright 2006 Sun Microsystems, Inc. All rights reserved.
|
||||
* Use is subject to license terms.
|
||||
*/
|
||||
|
||||
#ifndef _LIBSPL_SYS_FILE_H
|
||||
#define _LIBSPL_SYS_FILE_H
|
||||
|
||||
#include_next <sys/file.h>
|
||||
|
||||
#include <sys/user.h>
|
||||
|
||||
#define FREAD 1
|
||||
#define FWRITE 2
|
||||
// #define FAPPEND 8
|
||||
|
||||
#define FCREAT O_CREAT
|
||||
#define FTRUNC O_TRUNC
|
||||
#define FOFFMAX O_LARGEFILE
|
||||
#define FSYNC O_SYNC
|
||||
#define FDSYNC O_DSYNC
|
||||
#define FEXCL O_EXCL
|
||||
|
||||
#define FNODSYNC 0x10000 /* fsync pseudo flag */
|
||||
#define FNOFOLLOW 0x20000 /* don't follow symlinks */
|
||||
#define FIGNORECASE 0x80000 /* request case-insensitive lookups */
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,89 @@
|
||||
/*
|
||||
* CDDL HEADER START
|
||||
*
|
||||
* The contents of this file are subject to the terms of the
|
||||
* Common Development and Distribution License, Version 1.0 only
|
||||
* (the "License"). You may not use this file except in compliance
|
||||
* with the License.
|
||||
*
|
||||
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
|
||||
* or http://www.opensolaris.org/os/licensing.
|
||||
* See the License for the specific language governing permissions
|
||||
* and limitations under the License.
|
||||
*
|
||||
* When distributing Covered Code, include this CDDL HEADER in each
|
||||
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
|
||||
* If applicable, add the following below this CDDL HEADER, with the
|
||||
* fields enclosed by brackets "[]" replaced with your own identifying
|
||||
* information: Portions Copyright [yyyy] [name of copyright owner]
|
||||
*
|
||||
* CDDL HEADER END
|
||||
*/
|
||||
/* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
|
||||
/* All Rights Reserved */
|
||||
/*
|
||||
* Copyright 2004 Sun Microsystems, Inc. All rights reserved.
|
||||
* Use is subject to license terms.
|
||||
*/
|
||||
/* Copyright 2006 Ricardo Correia */
|
||||
|
||||
#ifndef _SYS_MNTTAB_H
|
||||
#define _SYS_MNTTAB_H
|
||||
|
||||
#include <stdio.h>
|
||||
#include <mntent.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#ifdef MNTTAB
|
||||
#undef MNTTAB
|
||||
#endif /* MNTTAB */
|
||||
|
||||
#define MNTTAB "/proc/self/mounts"
|
||||
#define MNT_LINE_MAX 4096
|
||||
|
||||
#define MNT_TOOLONG 1 /* entry exceeds MNT_LINE_MAX */
|
||||
#define MNT_TOOMANY 2 /* too many fields in line */
|
||||
#define MNT_TOOFEW 3 /* too few fields in line */
|
||||
|
||||
struct mnttab {
|
||||
char *mnt_special;
|
||||
char *mnt_mountp;
|
||||
char *mnt_fstype;
|
||||
char *mnt_mntopts;
|
||||
};
|
||||
|
||||
/*
|
||||
* NOTE: fields in extmnttab should match struct mnttab till new fields
|
||||
* are encountered, this allows hasmntopt to work properly when its arg is
|
||||
* a pointer to an extmnttab struct cast to a mnttab struct pointer.
|
||||
*/
|
||||
|
||||
struct extmnttab {
|
||||
char *mnt_special;
|
||||
char *mnt_mountp;
|
||||
char *mnt_fstype;
|
||||
char *mnt_mntopts;
|
||||
uint_t mnt_major;
|
||||
uint_t mnt_minor;
|
||||
};
|
||||
|
||||
struct stat64;
|
||||
struct statfs;
|
||||
|
||||
extern int getmntany(FILE *fp, struct mnttab *mp, struct mnttab *mpref);
|
||||
extern int _sol_getmntent(FILE *fp, struct mnttab *mp);
|
||||
extern int getextmntent(const char *path, struct extmnttab *mp,
|
||||
struct stat64 *statbuf);
|
||||
static inline char *_sol_hasmntopt(struct mnttab *mnt, char *opt)
|
||||
{
|
||||
struct mntent mnt_new;
|
||||
|
||||
mnt_new.mnt_opts = mnt->mnt_mntopts;
|
||||
|
||||
return (hasmntopt(&mnt_new, opt));
|
||||
}
|
||||
|
||||
#define hasmntopt _sol_hasmntopt
|
||||
#define getmntent _sol_getmntent
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,98 @@
|
||||
/*
|
||||
* CDDL HEADER START
|
||||
*
|
||||
* The contents of this file are subject to the terms of the
|
||||
* Common Development and Distribution License, Version 1.0 only
|
||||
* (the "License"). You may not use this file except in compliance
|
||||
* with the License.
|
||||
*
|
||||
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
|
||||
* or http://www.opensolaris.org/os/licensing.
|
||||
* See the License for the specific language governing permissions
|
||||
* and limitations under the License.
|
||||
*
|
||||
* When distributing Covered Code, include this CDDL HEADER in each
|
||||
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
|
||||
* If applicable, add the following below this CDDL HEADER, with the
|
||||
* fields enclosed by brackets "[]" replaced with your own identifying
|
||||
* information: Portions Copyright [yyyy] [name of copyright owner]
|
||||
*
|
||||
* CDDL HEADER END
|
||||
*/
|
||||
/*
|
||||
* Copyright 2006 Sun Microsystems, Inc. All rights reserved.
|
||||
* Use is subject to license terms.
|
||||
*/
|
||||
|
||||
#include_next <sys/mount.h>
|
||||
|
||||
#ifndef _LIBSPL_SYS_MOUNT_H
|
||||
#define _LIBSPL_SYS_MOUNT_H
|
||||
|
||||
#include <assert.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
/*
|
||||
* Some old glibc headers don't define BLKGETSIZE64
|
||||
* and we don't want to require the kernel headers
|
||||
*/
|
||||
#if !defined(BLKGETSIZE64)
|
||||
#define BLKGETSIZE64 _IOR(0x12, 114, size_t)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Some old glibc headers don't correctly define MS_DIRSYNC and
|
||||
* instead use the enum name S_WRITE. When using these older
|
||||
* headers define MS_DIRSYNC to be S_WRITE.
|
||||
*/
|
||||
#if !defined(MS_DIRSYNC)
|
||||
#define MS_DIRSYNC S_WRITE
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Some old glibc headers don't correctly define MS_POSIXACL and
|
||||
* instead leave it undefined. When using these older headers define
|
||||
* MS_POSIXACL to the reserved value of (1<<16).
|
||||
*/
|
||||
#if !defined(MS_POSIXACL)
|
||||
#define MS_POSIXACL (1<<16)
|
||||
#endif
|
||||
|
||||
#define MS_USERS (MS_NOEXEC|MS_NOSUID|MS_NODEV)
|
||||
#define MS_OWNER (MS_NOSUID|MS_NODEV)
|
||||
#define MS_GROUP (MS_NOSUID|MS_NODEV)
|
||||
#define MS_COMMENT 0
|
||||
|
||||
/*
|
||||
* Older glibc <sys/mount.h> headers did not define all the available
|
||||
* umount2(2) flags. Both MNT_FORCE and MNT_DETACH are supported in the
|
||||
* kernel back to 2.4.11 so we define them correctly if they are missing.
|
||||
*/
|
||||
#ifdef MNT_FORCE
|
||||
#define MS_FORCE MNT_FORCE
|
||||
#else
|
||||
#define MS_FORCE 0x00000001
|
||||
#endif /* MNT_FORCE */
|
||||
|
||||
#ifdef MNT_DETACH
|
||||
#define MS_DETACH MNT_DETACH
|
||||
#else
|
||||
#define MS_DETACH 0x00000002
|
||||
#endif /* MNT_DETACH */
|
||||
|
||||
/*
|
||||
* Overlay mount is default in Linux, but for solaris/zfs
|
||||
* compatibility, MS_OVERLAY is defined to explicitly have the user
|
||||
* provide a flag (-O) to mount over a non empty directory.
|
||||
*/
|
||||
#define MS_OVERLAY 0x00000004
|
||||
|
||||
/*
|
||||
* MS_CRYPT indicates that encryption keys should be loaded if they are not
|
||||
* already available. This is not defined in glibc, but it is never seen by
|
||||
* the kernel so it will not cause any problems.
|
||||
*/
|
||||
#define MS_CRYPT 0x00000008
|
||||
|
||||
#endif /* _LIBSPL_SYS_MOUNT_H */
|
||||
@@ -0,0 +1,67 @@
|
||||
/*
|
||||
* CDDL HEADER START
|
||||
*
|
||||
* The contents of this file are subject to the terms of the
|
||||
* Common Development and Distribution License, Version 1.0 only
|
||||
* (the "License"). You may not use this file except in compliance
|
||||
* with the License.
|
||||
*
|
||||
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
|
||||
* or http://www.opensolaris.org/os/licensing.
|
||||
* See the License for the specific language governing permissions
|
||||
* and limitations under the License.
|
||||
*
|
||||
* When distributing Covered Code, include this CDDL HEADER in each
|
||||
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
|
||||
* If applicable, add the following below this CDDL HEADER, with the
|
||||
* fields enclosed by brackets "[]" replaced with your own identifying
|
||||
* information: Portions Copyright [yyyy] [name of copyright owner]
|
||||
*
|
||||
* CDDL HEADER END
|
||||
*/
|
||||
/*
|
||||
* Copyright 2006 Sun Microsystems, Inc. All rights reserved.
|
||||
* Use is subject to license terms.
|
||||
*/
|
||||
|
||||
#ifndef _LIBSPL_SYS_PARAM_H
|
||||
#define _LIBSPL_SYS_PARAM_H
|
||||
|
||||
#include_next <sys/param.h>
|
||||
#include <unistd.h>
|
||||
|
||||
/*
|
||||
* File system parameters and macros.
|
||||
*
|
||||
* The file system is made out of blocks of at most MAXBSIZE units,
|
||||
* with smaller units (fragments) only in the last direct block.
|
||||
* MAXBSIZE primarily determines the size of buffers in the buffer
|
||||
* pool. It may be made larger without any effect on existing
|
||||
* file systems; however making it smaller may make some file
|
||||
* systems unmountable.
|
||||
*
|
||||
* Note that the blocked devices are assumed to have DEV_BSIZE
|
||||
* "sectors" and that fragments must be some multiple of this size.
|
||||
*/
|
||||
#define MAXBSIZE 8192
|
||||
#define DEV_BSIZE 512
|
||||
#define DEV_BSHIFT 9 /* log2(DEV_BSIZE) */
|
||||
|
||||
#define MAXNAMELEN 256
|
||||
#define MAXOFFSET_T LLONG_MAX
|
||||
|
||||
#define UID_NOBODY 60001 /* user ID no body */
|
||||
#define GID_NOBODY UID_NOBODY
|
||||
#define UID_NOACCESS 60002 /* user ID no access */
|
||||
|
||||
#define MAXUID UINT32_MAX /* max user id */
|
||||
#define MAXPROJID MAXUID /* max project id */
|
||||
|
||||
#ifdef PAGESIZE
|
||||
#undef PAGESIZE
|
||||
#endif /* PAGESIZE */
|
||||
|
||||
extern size_t spl_pagesize(void);
|
||||
#define PAGESIZE (spl_pagesize())
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,50 @@
|
||||
/*
|
||||
* CDDL HEADER START
|
||||
*
|
||||
* The contents of this file are subject to the terms of the
|
||||
* Common Development and Distribution License, Version 1.0 only
|
||||
* (the "License"). You may not use this file except in compliance
|
||||
* with the License.
|
||||
*
|
||||
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
|
||||
* or http://www.opensolaris.org/os/licensing.
|
||||
* See the License for the specific language governing permissions
|
||||
* and limitations under the License.
|
||||
*
|
||||
* When distributing Covered Code, include this CDDL HEADER in each
|
||||
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
|
||||
* If applicable, add the following below this CDDL HEADER, with the
|
||||
* fields enclosed by brackets "[]" replaced with your own identifying
|
||||
* information: Portions Copyright [yyyy] [name of copyright owner]
|
||||
*
|
||||
* CDDL HEADER END
|
||||
*/
|
||||
/*
|
||||
* Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef _LIBSPL_SYS_STAT_H
|
||||
#define _LIBSPL_SYS_STAT_H
|
||||
|
||||
#include_next <sys/stat.h>
|
||||
|
||||
#include <sys/mount.h> /* for BLKGETSIZE64 */
|
||||
|
||||
/*
|
||||
* Emulate Solaris' behavior of returning the block device size in fstat64().
|
||||
*/
|
||||
static inline int
|
||||
fstat64_blk(int fd, struct stat64 *st)
|
||||
{
|
||||
if (fstat64(fd, st) == -1)
|
||||
return (-1);
|
||||
|
||||
/* In Linux we need to use an ioctl to get the size of a block device */
|
||||
if (S_ISBLK(st->st_mode)) {
|
||||
if (ioctl(fd, BLKGETSIZE64, &st->st_size) != 0)
|
||||
return (-1);
|
||||
}
|
||||
|
||||
return (0);
|
||||
}
|
||||
#endif /* _LIBSPL_SYS_STAT_H */
|
||||
@@ -0,0 +1,103 @@
|
||||
/*
|
||||
* CDDL HEADER START
|
||||
*
|
||||
* The contents of this file are subject to the terms of the
|
||||
* Common Development and Distribution License, Version 1.0 only
|
||||
* (the "License"). You may not use this file except in compliance
|
||||
* with the License.
|
||||
*
|
||||
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
|
||||
* or http://www.opensolaris.org/os/licensing.
|
||||
* See the License for the specific language governing permissions
|
||||
* and limitations under the License.
|
||||
*
|
||||
* When distributing Covered Code, include this CDDL HEADER in each
|
||||
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
|
||||
* If applicable, add the following below this CDDL HEADER, with the
|
||||
* fields enclosed by brackets "[]" replaced with your own identifying
|
||||
* information: Portions Copyright [yyyy] [name of copyright owner]
|
||||
*
|
||||
* CDDL HEADER END
|
||||
*/
|
||||
/*
|
||||
* Copyright 2007 Sun Microsystems, Inc. All rights reserved.
|
||||
* Use is subject to license terms.
|
||||
*/
|
||||
|
||||
#ifndef _LIBSPL_SYS_SYSMACROS_H
|
||||
#define _LIBSPL_SYS_SYSMACROS_H
|
||||
|
||||
#include_next <sys/sysmacros.h>
|
||||
|
||||
/* common macros */
|
||||
#ifndef MIN
|
||||
#define MIN(a, b) ((a) < (b) ? (a) : (b))
|
||||
#endif
|
||||
#ifndef MAX
|
||||
#define MAX(a, b) ((a) < (b) ? (b) : (a))
|
||||
#endif
|
||||
#ifndef ABS
|
||||
#define ABS(a) ((a) < 0 ? -(a) : (a))
|
||||
#endif
|
||||
#ifndef ARRAY_SIZE
|
||||
#define ARRAY_SIZE(a) (sizeof (a) / sizeof (a[0]))
|
||||
#endif
|
||||
#ifndef DIV_ROUND_UP
|
||||
#define DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d))
|
||||
#endif
|
||||
|
||||
#define makedevice(maj, min) makedev(maj, min)
|
||||
#define _sysconf(a) sysconf(a)
|
||||
|
||||
/*
|
||||
* Compatibility macros/typedefs needed for Solaris -> Linux port
|
||||
*/
|
||||
#define P2ALIGN(x, align) ((x) & -(align))
|
||||
#define P2CROSS(x, y, align) (((x) ^ (y)) > (align) - 1)
|
||||
#define P2ROUNDUP(x, align) ((((x) - 1) | ((align) - 1)) + 1)
|
||||
#define P2BOUNDARY(off, len, align) \
|
||||
(((off) ^ ((off) + (len) - 1)) > (align) - 1)
|
||||
#define P2PHASE(x, align) ((x) & ((align) - 1))
|
||||
#define P2NPHASE(x, align) (-(x) & ((align) - 1))
|
||||
#define P2NPHASE_TYPED(x, align, type) \
|
||||
(-(type)(x) & ((type)(align) - 1))
|
||||
#define ISP2(x) (((x) & ((x) - 1)) == 0)
|
||||
#define IS_P2ALIGNED(v, a) ((((uintptr_t)(v)) & ((uintptr_t)(a) - 1)) == 0)
|
||||
|
||||
/*
|
||||
* Typed version of the P2* macros. These macros should be used to ensure
|
||||
* that the result is correctly calculated based on the data type of (x),
|
||||
* which is passed in as the last argument, regardless of the data
|
||||
* type of the alignment. For example, if (x) is of type uint64_t,
|
||||
* and we want to round it up to a page boundary using "PAGESIZE" as
|
||||
* the alignment, we can do either
|
||||
* P2ROUNDUP(x, (uint64_t)PAGESIZE)
|
||||
* or
|
||||
* P2ROUNDUP_TYPED(x, PAGESIZE, uint64_t)
|
||||
*/
|
||||
#define P2ALIGN_TYPED(x, align, type) \
|
||||
((type)(x) & -(type)(align))
|
||||
#define P2PHASE_TYPED(x, align, type) \
|
||||
((type)(x) & ((type)(align) - 1))
|
||||
#define P2NPHASE_TYPED(x, align, type) \
|
||||
(-(type)(x) & ((type)(align) - 1))
|
||||
#define P2ROUNDUP_TYPED(x, align, type) \
|
||||
((((type)(x) - 1) | ((type)(align) - 1)) + 1)
|
||||
#define P2END_TYPED(x, align, type) \
|
||||
(-(~(type)(x) & -(type)(align)))
|
||||
#define P2PHASEUP_TYPED(x, align, phase, type) \
|
||||
((type)(phase) - (((type)(phase) - (type)(x)) & -(type)(align)))
|
||||
#define P2CROSS_TYPED(x, y, align, type) \
|
||||
(((type)(x) ^ (type)(y)) > (type)(align) - 1)
|
||||
#define P2SAMEHIGHBIT_TYPED(x, y, type) \
|
||||
(((type)(x) ^ (type)(y)) < ((type)(x) & (type)(y)))
|
||||
|
||||
|
||||
/* avoid any possibility of clashing with <stddef.h> version */
|
||||
#if defined(_KERNEL) && !defined(_KMEMUSER) && !defined(offsetof)
|
||||
#define offsetof(s, m) ((size_t)(&(((s *)0)->m)))
|
||||
#endif
|
||||
|
||||
#define _NOTE(x)
|
||||
|
||||
#endif /* _LIBSPL_SYS_SYSMACROS_H */
|
||||
@@ -0,0 +1,110 @@
|
||||
/*
|
||||
* CDDL HEADER START
|
||||
*
|
||||
* The contents of this file are subject to the terms of the
|
||||
* Common Development and Distribution License, Version 1.0 only
|
||||
* (the "License"). You may not use this file except in compliance
|
||||
* with the License.
|
||||
*
|
||||
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
|
||||
* or http://www.opensolaris.org/os/licensing.
|
||||
* See the License for the specific language governing permissions
|
||||
* and limitations under the License.
|
||||
*
|
||||
* When distributing Covered Code, include this CDDL HEADER in each
|
||||
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
|
||||
* If applicable, add the following below this CDDL HEADER, with the
|
||||
* fields enclosed by brackets "[]" replaced with your own identifying
|
||||
* information: Portions Copyright [yyyy] [name of copyright owner]
|
||||
*
|
||||
* CDDL HEADER END
|
||||
*/
|
||||
/*
|
||||
* Copyright 2005 Sun Microsystems, Inc. All rights reserved.
|
||||
* Use is subject to license terms.
|
||||
*/
|
||||
|
||||
/* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
|
||||
/* All Rights Reserved */
|
||||
|
||||
/*
|
||||
* University Copyright- Copyright (c) 1982, 1986, 1988
|
||||
* The Regents of the University of California
|
||||
* All Rights Reserved
|
||||
*
|
||||
* University Acknowledgment- Portions of this document are derived from
|
||||
* software developed by the University of California, Berkeley, and its
|
||||
* contributors.
|
||||
*/
|
||||
|
||||
#ifndef _LIBSPL_SYS_UIO_H
|
||||
#define _LIBSPL_SYS_UIO_H
|
||||
|
||||
#include <sys/types.h>
|
||||
#include_next <sys/uio.h>
|
||||
|
||||
#include <stdint.h>
|
||||
typedef struct iovec iovec_t;
|
||||
|
||||
typedef enum uio_rw {
|
||||
UIO_READ = 0,
|
||||
UIO_WRITE = 1,
|
||||
} uio_rw_t;
|
||||
|
||||
typedef enum uio_seg {
|
||||
UIO_USERSPACE = 0,
|
||||
UIO_SYSSPACE = 1,
|
||||
UIO_USERISPACE = 2,
|
||||
} uio_seg_t;
|
||||
|
||||
typedef struct uio {
|
||||
struct iovec *uio_iov; /* pointer to array of iovecs */
|
||||
int uio_iovcnt; /* number of iovecs */
|
||||
loff_t uio_loffset; /* file offset */
|
||||
uio_seg_t uio_segflg; /* address space (kernel or user) */
|
||||
uint16_t uio_fmode; /* file mode flags */
|
||||
uint16_t uio_extflg; /* extended flags */
|
||||
loff_t uio_limit; /* u-limit (maximum byte offset) */
|
||||
ssize_t uio_resid; /* residual count */
|
||||
} uio_t;
|
||||
|
||||
typedef enum xuio_type {
|
||||
UIOTYPE_ASYNCIO,
|
||||
UIOTYPE_ZEROCOPY,
|
||||
} xuio_type_t;
|
||||
|
||||
#define UIOA_IOV_MAX 16
|
||||
|
||||
typedef struct uioa_page_s { /* locked uio_iov state */
|
||||
int uioa_pfncnt; /* count of pfn_t(s) in *uioa_ppp */
|
||||
void **uioa_ppp; /* page_t or pfn_t array */
|
||||
caddr_t uioa_base; /* address base */
|
||||
size_t uioa_len; /* span length */
|
||||
} uioa_page_t;
|
||||
|
||||
typedef struct xuio {
|
||||
uio_t xu_uio; /* embedded UIO structure */
|
||||
|
||||
/* Extended uio fields */
|
||||
enum xuio_type xu_type; /* uio type */
|
||||
union {
|
||||
struct {
|
||||
uint32_t xu_a_state; /* state of async i/o */
|
||||
ssize_t xu_a_mbytes; /* bytes moved */
|
||||
uioa_page_t *xu_a_lcur; /* uioa_locked[] pointer */
|
||||
void **xu_a_lppp; /* lcur->uioa_pppp[] pointer */
|
||||
void *xu_a_hwst[4]; /* opaque hardware state */
|
||||
uioa_page_t xu_a_locked[UIOA_IOV_MAX];
|
||||
} xu_aio;
|
||||
|
||||
struct {
|
||||
int xu_zc_rw; /* read or write buffer */
|
||||
void *xu_zc_priv; /* fs specific */
|
||||
} xu_zc;
|
||||
} xu_ext;
|
||||
} xuio_t;
|
||||
|
||||
#define XUIO_XUZC_PRIV(xuio) xuio->xu_ext.xu_zc.xu_zc_priv
|
||||
#define XUIO_XUZC_RW(xuio) xuio->xu_ext.xu_zc.xu_zc_rw
|
||||
|
||||
#endif /* _SYS_UIO_H */
|
||||
Reference in New Issue
Block a user