+++ /dev/null
-/*
- * Copyright (c) 2000-2006 Silicon Graphics, Inc.
- * All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-#ifndef __XFS_IRIX_H__
-#define __XFS_IRIX_H__
-
-#include <stdlib.h>
-#include <unistd.h>
-#include <libgen.h>
-#include <values.h>
-#include <strings.h>
-#include <inttypes.h>
-#include <limits.h>
-#include <fcntl.h>
-#include <sys/stat.h>
-#include <sys/uuid.h>
-#include <sys/param.h>
-#include <sys/ioctl.h>
-#include <sys/types.h>
-#include <sys/statfs.h>
-#include <sys/statvfs.h>
-#include <sys/syssgi.h>
-#include <sys/sysmacros.h>
-#include <sys/fs/xfs_fsops.h>
-#include <sys/fs/xfs_itable.h>
-#include <mntent.h>
-
-#define __int8_t char
-#define __int16_t short
-#define __uint8_t unsigned char
-#define __uint16_t unsigned short
-
-typedef unsigned char __u8;
-typedef signed char __s8;
-typedef unsigned short __u16;
-typedef signed short __s16;
-typedef unsigned int __u32;
-typedef signed int __s32;
-typedef unsigned long long int __u64;
-typedef signed long long int __s64;
-
-typedef off_t xfs_off_t;
-typedef __int64_t xfs_ino_t;
-typedef __int32_t xfs_dev_t;
-typedef __int64_t xfs_daddr_t;
-typedef __u32 xfs_nlink_t;
-
-#define xfs_flock64 flock64
-#define xfs_flock64_t struct flock64
-
-#define EFSBADCRC 991 /* Bad CRC detected */
-
-typedef struct xfs_error_injection {
- __int32_t fd;
- __int32_t errtag;
-} xfs_error_injection_t;
-
-/* --- xfs_fsop_*req - request data structures --- */
-
-typedef struct xfs_fsop_bulkreq {
- ino64_t *lastip;
- __int32_t icount;
- xfs_bstat_t *ubuffer;
- __int32_t *ocount;
-} xfs_fsop_bulkreq_t;
-
-typedef struct xfs_fsop_handlereq {
- __u32 fd; /* fd for FD_TO_HANDLE */
- void *path; /* user pathname */
- __u32 oflags; /* open flags */
- void *ihandle; /* user supplied handle */
- __u32 ihandlen; /* user supplied length */
- void *ohandle; /* user buffer for handle */
- __u32 *ohandlen; /* user buffer length */
-} xfs_fsop_handlereq_t;
-
-typedef struct xfs_fsop_setdm_handlereq {
- struct xfs_fsop_handlereq hreq; /* handle information */
- struct fsdmidata *data; /* DMAPI data */
-} xfs_fsop_setdm_handlereq_t;
-
-typedef struct xfs_attrlist_cursor {
- __u32 opaque[4];
-} xfs_attrlist_cursor_t;
-
-typedef struct xfs_fsop_attrlist_handlereq {
- struct xfs_fsop_handlereq hreq; /* handle interface structure */
- struct xfs_attrlist_cursor pos; /* opaque cookie, list offset */
- __u32 flags; /* which namespace to use */
- __u32 buflen; /* length of buffer supplied */
- void *buffer; /* returned names */
-} xfs_fsop_attrlist_handlereq_t;
-
-typedef struct xfs_fsop_getparents_handlereq {
- struct xfs_fsop_handlereq hreq; /* handle interface structure */
- struct xfs_attrlist_cursor pos; /* opaque cookie, list offset */
- __u32 buflen; /* length of buffer supplied */
- void *buffer; /* returned data */
- __u32 *ocount; /* return number of links */
- __u32 *omore; /* return whether more to come */
-} xfs_fsop_getparents_handlereq_t;
-
-typedef struct xfs_attr_multiop {
- __u32 am_opcode;
- __s32 am_error;
- void *am_attrname;
- void *am_attrvalue;
- __u32 am_length;
- __u32 am_flags;
-} xfs_attr_multiop_t;
-
-typedef struct xfs_fsop_attrmulti_handlereq {
- struct xfs_fsop_handlereq hreq; /* handle interface structure */
- __u32 opcount;/* count of following multiop */
- struct xfs_attr_multiop *ops; /* attr_multi data */
-} xfs_fsop_attrmulti_handlereq_t;
-
-/* start doing packed stuctures here */
-#define HAVE_FORMAT32 1
-#pragma pack 1
-typedef struct xfs_inode_log_format_32 {
- __u16 ilf_type; /* inode log item type */
- __u16 ilf_size; /* size of this item */
- __u32 ilf_fields; /* flags for fields logged */
- __u16 ilf_asize; /* size of attr d/ext/root */
- __u16 ilf_dsize; /* size of data/ext/root */
- __u64 ilf_ino; /* inode number */
- union {
- __u32 ilfu_rdev; /* rdev value for dev inode*/
- uuid_t ilfu_uuid; /* mount point value */
- } ilf_u;
- __s64 ilf_blkno; /* blkno of inode buffer */
- __s32 ilf_len; /* len of inode buffer */
- __s32 ilf_boffset; /* off of inode in buffer */
-} xfs_inode_log_format_32_t;
-
-typedef struct xfs_extent_32 {
- __u64 ext_start;
- __u32 ext_len;
-} xfs_extent_32_t;
-
-typedef struct xfs_efi_log_format_32 {
- __u16 efi_type; /* efi log item type */
- __u16 efi_size; /* size of this item */
- __u32 efi_nextents; /* # extents to free */
- __u64 efi_id; /* efi identifier */
- xfs_extent_32_t efi_extents[1]; /* array of extents to free */
-} xfs_efi_log_format_32_t;
-
-typedef struct xfs_efd_log_format_32 {
- __u16 efd_type; /* efd log item type */
- __u16 efd_size; /* size of this item */
- __u32 efd_nextents; /* # of extents freed */
- __u64 efd_efi_id; /* id of corresponding efi */
- xfs_extent_32_t efd_extents[1]; /* array of extents freed */
-} xfs_efd_log_format_32_t;
-
-#pragma pack 0
-/* end of packed stuctures */
-
-#include <sys/endian.h>
-#define __BYTE_ORDER BYTE_ORDER
-#define __BIG_ENDIAN BIG_ENDIAN
-#define __LITTLE_ENDIAN LITTLE_ENDIAN
-
-/* Map some gcc macros for the MipsPRO compiler */
-#ifndef __GNUC__
-#define __builtin_constant_p(x) (0)
-#define __FUNCTION__ "XFS"
-#define __sgi__ __sgi
-#define __inline__ __inline
-#define inline __inline
-#endif
-
-/*ARGSUSED*/
-static __inline__ int xfsctl(const char *path, int fd, int cmd, void *arg)
-{
- if (cmd >= 0 && cmd < XFS_FSOPS_COUNT) {
- /*
- * We have a problem in that xfsctl takes 1 arg but
- * some sgi xfs ops take an input arg and/or an output arg
- * So have to special case the ops to decide if xfsctl arg
- * is an input or an output argument.
- */
- if (cmd == XFS_FS_GOINGDOWN)
- return syssgi(SGI_XFS_FSOPERATIONS, fd, cmd, arg, 0);
- return syssgi(SGI_XFS_FSOPERATIONS, fd, cmd, 0, arg);
- }
- switch (cmd) {
- case SGI_FS_INUMBERS:
- case SGI_FS_BULKSTAT:
- return syssgi(cmd, fd,
- ((xfs_fsop_bulkreq_t*)arg)->lastip,
- ((xfs_fsop_bulkreq_t*)arg)->icount,
- ((xfs_fsop_bulkreq_t*)arg)->ubuffer,
- ((xfs_fsop_bulkreq_t*)arg)->ocount);
- case SGI_FS_BULKSTAT_SINGLE:
- return syssgi(SGI_FS_BULKSTAT_SINGLE, fd,
- ((xfs_fsop_bulkreq_t*)arg)->lastip,
- ((xfs_fsop_bulkreq_t*)arg)->ubuffer);
- case SGI_XFS_INJECT_ERROR:
- return syssgi(SGI_XFS_INJECT_ERROR,
- ((xfs_error_injection_t*)arg)->errtag,
- fd);
- case SGI_XFS_CLEARALL_ERROR:
- return syssgi(SGI_XFS_CLEARALL_ERROR, fd);
- case SGI_PATH_TO_HANDLE:
- case SGI_PATH_TO_FSHANDLE:
- return syssgi(cmd,
- ((xfs_fsop_handlereq_t*)arg)->path,
- ((xfs_fsop_handlereq_t*)arg)->ohandle,
- ((xfs_fsop_handlereq_t*)arg)->ohandlen);
- case SGI_FD_TO_HANDLE:
- return syssgi(cmd,
- ((xfs_fsop_handlereq_t*)arg)->fd,
- ((xfs_fsop_handlereq_t*)arg)->ohandle,
- ((xfs_fsop_handlereq_t*)arg)->ohandlen);
- case SGI_OPEN_BY_HANDLE:
- return syssgi(cmd,
- ((xfs_fsop_handlereq_t*)arg)->ihandle,
- ((xfs_fsop_handlereq_t*)arg)->ihandlen,
- ((xfs_fsop_handlereq_t*)arg)->oflags);
- case SGI_READLINK_BY_HANDLE:
- return syssgi(cmd,
- ((xfs_fsop_handlereq_t*)arg)->ihandle,
- ((xfs_fsop_handlereq_t*)arg)->ihandlen,
- ((xfs_fsop_handlereq_t*)arg)->ohandle,
- ((xfs_fsop_handlereq_t*)arg)->ohandlen);
- case SGI_ATTR_LIST_BY_HANDLE:
- return syssgi(cmd,
- ((xfs_fsop_attrlist_handlereq_t*)arg)->hreq.ihandle,
- ((xfs_fsop_attrlist_handlereq_t*)arg)->hreq.ihandlen,
- ((xfs_fsop_attrlist_handlereq_t*)arg)->buffer,
- ((xfs_fsop_attrlist_handlereq_t*)arg)->buflen,
- ((xfs_fsop_attrlist_handlereq_t*)arg)->flags,
- &(((xfs_fsop_attrlist_handlereq_t*)arg)->pos));
- case SGI_XFS_GETPARENTS:
- case SGI_XFS_GETPARENTPATHS:
- return syssgi(cmd,
- ((xfs_fsop_getparents_handlereq_t*)arg)->hreq.ihandle,
- ((xfs_fsop_getparents_handlereq_t*)arg)->hreq.ihandlen,
- ((xfs_fsop_getparents_handlereq_t*)arg)->buffer,
- ((xfs_fsop_getparents_handlereq_t*)arg)->buflen,
- &(((xfs_fsop_getparents_handlereq_t*)arg)->pos),
- ((xfs_fsop_getparents_handlereq_t*)arg)->ocount,
- ((xfs_fsop_getparents_handlereq_t*)arg)->omore);
- case SGI_ATTR_MULTI_BY_HANDLE:
- return syssgi(cmd,
- ((xfs_fsop_attrmulti_handlereq_t*)arg)->hreq.ihandle,
- ((xfs_fsop_attrmulti_handlereq_t*)arg)->hreq.ihandlen,
- ((xfs_fsop_attrmulti_handlereq_t*)arg)->ops,
- ((xfs_fsop_attrmulti_handlereq_t*)arg)->opcount,
- ((xfs_fsop_attrmulti_handlereq_t*)arg)->hreq.oflags);
- case SGI_FSSETDM_BY_HANDLE:
- return syssgi(cmd,
- ((xfs_fsop_setdm_handlereq_t*)arg)->hreq.ihandle,
- ((xfs_fsop_setdm_handlereq_t*)arg)->hreq.ihandlen,
- ((xfs_fsop_setdm_handlereq_t*)arg)->data);
- }
- return fcntl(fd, cmd, arg);
-}
-
-static __inline__ int platform_test_xfs_fd(int fd)
-{
- struct statvfs sbuf;
- if (fstatvfs(fd, &sbuf) < 0)
- return 0;
- return strncmp(sbuf.f_basetype, "xfs", 4) == 0;
-}
-
-static __inline__ int platform_test_xfs_path(const char *path)
-{
- struct statvfs sbuf;
- if (statvfs(path, &sbuf) < 0)
- return 0;
- return strncmp(sbuf.f_basetype, "xfs", 4) == 0;
-}
-
-static __inline__ int platform_fstatfs(int fd, struct statfs *buf)
-{
- return fstatfs(fd, buf, sizeof(struct statfs), 0);
-}
-
-static __inline__ void platform_getoptreset(void)
-{
- getoptreset();
-}
-
-static __inline__ int platform_uuid_compare(uuid_t *uu1, uuid_t *uu2)
-{
- __uint32_t status;
- return uuid_compare(uu1, uu2, &status);
-}
-
-static __inline__ void platform_uuid_unparse(uuid_t *uu, char *buffer)
-{
- __uint32_t status;
- char *s;
- uuid_to_string(uu, &s, &status);
- if (status == uuid_s_ok)
- strcpy(buffer, s);
- else buffer[0] = '\0';
- free(s);
-}
-
-static __inline__ int platform_uuid_parse(char *buffer, uuid_t *uu)
-{
- __uint32_t status;
- uuid_from_string(buffer, uu, &status);
- return (status == uuid_s_ok);
-}
-
-static __inline__ int platform_uuid_is_null(uuid_t *uu)
-{
- uint status;
- return uuid_is_nil(uu, &status);
-}
-
-static __inline__ void platform_uuid_generate(uuid_t *uu)
-{
- __uint32_t status;
- uuid_create(uu, &status);
-}
-
-static __inline__ void platform_uuid_clear(uuid_t *uu)
-{
- __uint32_t status;
- uuid_create_nil(uu, &status);
-}
-
-static __inline__ void platform_uuid_copy(uuid_t *dst, uuid_t *src)
-{
- memcpy(dst, src, sizeof(uuid_t));
-}
-
-static __inline__ int
-platform_discard_blocks(int fd, uint64_t start, uint64_t len)
-{
- return 0;
-}
-
-static __inline__ char * strsep(char **s, const char *ct)
-{
- char *sbegin = *s, *end;
-
- if (!sbegin)
- return NULL;
- end = strpbrk(sbegin, ct);
- if (end)
- *end++ = '\0';
- *s = end;
- return sbegin;
-}
-
-#define HAVE_DIOATTR 1
-#define HAVE_FSXATTR 1
-#define HAVE_GETBMAP 1
-#define HAVE_GETBMAPX 1
-#define HAVE_FSDMIDATA 1
-#define HAVE_FID 1
-#define HAVE_IOCMACROS 1
-#define HAVE_BBMACROS 1
-
-#define __XFS_FS_H__ 1
-
-#define XFS_IOC_DIOINFO F_DIOINFO
-#define XFS_IOC_ALLOCSP64 F_ALLOCSP64
-#define XFS_IOC_FREESP64 F_FREESP64
-#define XFS_IOC_GETBMAP F_GETBMAP
-#define XFS_IOC_FSSETDM F_FSSETDM
-#define XFS_IOC_RESVSP F_RESVSP
-#define XFS_IOC_RESVSP64 F_RESVSP64
-#define XFS_IOC_UNRESVSP F_UNRESVSP
-#define XFS_IOC_UNRESVSP64 F_UNRESVSP64
-#define XFS_IOC_GETBMAPA F_GETBMAPA
-#define XFS_IOC_FSGETXATTRA F_FSGETXATTRA
-#define XFS_IOC_GETBMAPX F_GETBMAPX
-
-#define XFS_IOC_FSGEOMETRY_V1 XFS_FS_GEOMETRY
-#define XFS_IOC_FSBULKSTAT SGI_FS_BULKSTAT
-#define XFS_IOC_FSBULKSTAT_SINGLE SGI_FS_BULKSTAT_SINGLE
-#define XFS_IOC_FSINUMBERS SGI_FS_INUMBERS
-#define XFS_IOC_PATH_TO_FSHANDLE SGI_PATH_TO_FSHANDLE
-#define XFS_IOC_PATH_TO_HANDLE SGI_PATH_TO_HANDLE
-#define XFS_IOC_FD_TO_HANDLE SGI_FD_TO_HANDLE
-#define XFS_IOC_OPEN_BY_HANDLE SGI_OPEN_BY_HANDLE
-#define XFS_IOC_READLINK_BY_HANDLE SGI_READLINK_BY_HANDLE
-#define XFS_IOC_SWAPEXT /* TODO */
-#define XFS_IOC_FSGROWFSDATA XFS_GROWFS_DATA
-#define XFS_IOC_FSGROWFSLOG XFS_GROWFS_LOG
-#define XFS_IOC_FSGROWFSRT XFS_GROWFS_RT
-#define XFS_IOC_FSCOUNTS XFS_FS_COUNTS
-#define XFS_IOC_SET_RESBLKS XFS_SET_RESBLKS
-#define XFS_IOC_GET_RESBLKS XFS_GET_RESBLKS
-#define XFS_IOC_ERROR_INJECTION SGI_XFS_INJECT_ERROR
-#define XFS_IOC_ERROR_CLEARALL SGI_XFS_CLEARALL_ERROR
-#define XFS_IOC_FREEZE XFS_FS_FREEZE
-#define XFS_IOC_THAW XFS_FS_THAW
-#define XFS_IOC_FSSETDM_BY_HANDLE SGI_FSSETDM_BY_HANDLE
-#define XFS_IOC_ATTRLIST_BY_HANDLE SGI_ATTR_LIST_BY_HANDLE
-#define XFS_IOC_ATTRMULTI_BY_HANDLE SGI_ATTR_MULTI_BY_HANDLE
-#define XFS_IOC_FSGEOMETRY XFS_FS_GEOMETRY
-#define XFS_IOC_GOINGDOWN XFS_FS_GOINGDOWN
-#define XFS_IOC_GETPARENTS SGI_XFS_GETPARENTS
-#define XFS_IOC_GETPARENTPATHS SGI_XFS_GETPARENTPATHS
-
-#define _AIOCB64_T_DEFINED 1
-
-/* check whether we have to define FS_IOC_FS[GS]ETXATTR ourselves */
-#ifndef HAVE_FSXATTR
-struct fsxattr {
- __u32 fsx_xflags; /* xflags field value (get/set) */
- __u32 fsx_extsize; /* extsize field value (get/set)*/
- __u32 fsx_nextents; /* nextents field value (get) */
- __u32 fsx_projid; /* project identifier (get/set) */
- __u32 fsx_cowextsize; /* cow extsize field value (get/set) */
- unsigned char fsx_pad[8];
-};
-
-/*
- * Flags for the fsx_xflags field
- */
-#define FS_XFLAG_REALTIME 0x00000001 /* data in realtime volume */
-#define FS_XFLAG_PREALLOC 0x00000002 /* preallocated file extents */
-#define FS_XFLAG_IMMUTABLE 0x00000008 /* file cannot be modified */
-#define FS_XFLAG_APPEND 0x00000010 /* all writes append */
-#define FS_XFLAG_SYNC 0x00000020 /* all writes synchronous */
-#define FS_XFLAG_NOATIME 0x00000040 /* do not update access time */
-#define FS_XFLAG_NODUMP 0x00000080 /* do not include in backups */
-#define FS_XFLAG_RTINHERIT 0x00000100 /* create with rt bit set */
-#define FS_XFLAG_PROJINHERIT 0x00000200 /* create with parents projid */
-#define FS_XFLAG_NOSYMLINKS 0x00000400 /* disallow symlink creation */
-#define FS_XFLAG_EXTSIZE 0x00000800 /* extent size allocator hint */
-#define FS_XFLAG_EXTSZINHERIT 0x00001000 /* inherit inode extent size */
-#define FS_XFLAG_NODEFRAG 0x00002000 /* do not defragment */
-#define FS_XFLAG_FILESTREAM 0x00004000 /* use filestream allocator */
-#define FS_XFLAG_DAX 0x00008000 /* use DAX for IO */
-#define FS_XFLAG_HASATTR 0x80000000 /* no DIFLAG for this */
-
-#define FS_IOC_FSGETXATTR F_FSGETXATTR
-#define FS_IOC_FSSETXATTR F_FSSETXATTR
-
-#endif
-
-#ifndef FS_XFLAG_COWEXTSIZE
-#define FS_XFLAG_COWEXTSIZE 0x00010000 /* CoW extent size allocator hint */
-#endif
-
-/**
- * Abstraction of mountpoints.
- */
-struct mntent_cursor {
- FILE *mtabp;
-};
-
-static inline int platform_mntent_open(struct mntent_cursor * cursor, char *mtab)
-{
- cursor->mtabp = setmntent(mtab, "r");
- if (!cursor->mtabp) {
- fprintf(stderr, "Error: cannot read %s\n", mtab);
- return 1;
- }
- return 0;
-}
-
-static inline struct mntent * platform_mntent_next(struct mntent_cursor * cursor)
-{
- return getmntent(cursor->mtabp);
-}
-
-static inline void platform_mntent_close(struct mntent_cursor * cursor)
-{
- endmntent(cursor->mtabp);
-}
-
-
-#endif /* __XFS_IRIX_H__ */