4 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 only,
8 * as published by the Free Software Foundation.
10 * This program is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * General Public License version 2 for more details (a copy is included
14 * in the LICENSE file that accompanied this code).
16 * You should have received a copy of the GNU General Public License
17 * version 2 along with this program; If not, see
18 * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf
20 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
21 * CA 95054 USA or visit www.sun.com if you need additional information or
27 * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
28 * Use is subject to license terms.
31 * This file is part of Lustre, http://www.lustre.org/
32 * Lustre is a trademark of Sun Microsystems, Inc.
34 * libcfs/include/libcfs/darwin/darwin-fs.h
36 * Implementation of standard file system interfaces for XNU kernel.
39 #ifndef __LIBCFS_DARWIN_FS_H__
40 #define __LIBCFS_DARWIN_FS_H__
42 #ifndef __LIBCFS_LIBCFS_H__
43 #error Do not #include this file directly. #include <libcfs/libcfs.h> instead
48 #include <sys/types.h>
49 #include <sys/systm.h>
51 #include <sys/kernel.h>
54 #include <sys/filedesc.h>
55 #include <sys/mount.h>
57 #include <sys/sysctl.h>
60 #include <sys/namei.h>
61 #include <sys/fcntl.h>
62 #include <sys/lockf.h>
65 #include <mach/mach_types.h>
66 #include <mach/time_value.h>
67 #include <kern/clock.h>
68 #include <sys/param.h>
69 #include <IOKit/system.h>
71 #include <libcfs/darwin/darwin-types.h>
72 #include <libcfs/darwin/darwin-lock.h>
73 #include <libcfs/darwin/darwin-mem.h>
74 #include <libcfs/list.h>
77 * File operating APIs in kernel
81 * Kernel file descriptor
83 typedef struct cfs_kern_file {
91 typedef struct file cfs_file_t;
95 int kern_file_size(cfs_file_t *fp, off_t *size);
96 #define cfs_filp_size(fp) \
99 kern_file_size((fp), &__size); \
102 #define cfs_filp_poff(fp) (NULL)
104 cfs_file_t *kern_file_open(const char *name, int flags, int mode, int *err);
105 int kern_file_close(cfs_file_t *fp);
106 int kern_file_read(cfs_file_t *fp, void *buf, size_t nbytes, off_t *pos);
107 int kern_file_write(cfs_file_t *fp, void *buf, size_t nbytes, off_t *pos);
108 int kern_file_sync(cfs_file_t *fp);
110 #define cfs_filp_open(n, f, m, e) kern_file_open(n, f, m, e)
111 #define cfs_filp_close(f) kern_file_close(f)
112 #define cfs_filp_read(f, b, n, p) kern_file_read(f, b, n, p)
113 #define cfs_filp_write(f, b, n, p) kern_file_write(f, b, n, p)
114 #define cfs_filp_fsync(f) kern_file_sync(f)
116 int ref_file(cfs_file_t *fp);
117 int rele_file(cfs_file_t *fp);
118 int file_count(cfs_file_t *fp);
119 #define cfs_get_file(f) ref_file(f)
120 #define cfs_put_file(f) rele_file(f)
121 #define cfs_file_count(f) file_count(f)
123 #define CFS_INT_LIMIT(x) (~((x)1 << (sizeof(x)*8 - 1)))
124 #define CFS_OFFSET_MAX CFS_INT_LIMIT(loff_t)
126 typedef struct flock cfs_flock_t;
127 #define cfs_flock_type(fl) ((fl)->l_type)
128 #define cfs_flock_set_type(fl, type) do { (fl)->l_type = (type); } while(0)
129 #define cfs_flock_pid(fl) ((fl)->l_pid)
130 #define cfs_flock_set_pid(fl, pid) do { (fl)->l_pid = (pid); } while(0)
131 #define cfs_flock_start(fl) ((fl)->l_start)
132 #define cfs_flock_set_start(fl, start) do { (fl)->l_start = (start); } while(0)
134 static inline loff_t cfs_flock_end(cfs_flock_t *fl)
136 return (fl->l_len == 0 ? CFS_OFFSET_MAX: (fl->l_start + fl->l_len));
139 static inline void cfs_flock_set_end(cfs_flock_t *fl, loff_t end)
141 if (end == CFS_OFFSET_MAX)
144 fl->l_len = end - fl->l_start;
147 #define ATTR_MODE 0x0001
148 #define ATTR_UID 0x0002
149 #define ATTR_GID 0x0004
150 #define ATTR_SIZE 0x0008
151 #define ATTR_ATIME 0x0010
152 #define ATTR_MTIME 0x0020
153 #define ATTR_CTIME 0x0040
154 #define ATTR_ATIME_SET 0x0080
155 #define ATTR_MTIME_SET 0x0100
156 #define ATTR_FORCE 0x0200 /* Not a change, but a change it */
157 #define ATTR_ATTR_FLAG 0x0400
158 #define ATTR_RAW 0x0800 /* file system, not vfs will massage attrs */
159 #define ATTR_FROM_OPEN 0x1000 /* called from open path, ie O_TRUNC */
160 #define ATTR_CTIME_SET 0x2000
161 #define ATTR_BLOCKS 0x4000
162 #define ATTR_KILL_SUID 0
163 #define ATTR_KILL_SGID 0
165 #define in_group_p(x) (0)
167 struct posix_acl_entry {
169 unsigned short e_perm;
175 unsigned int a_count;
176 struct posix_acl_entry a_entries[0];
179 struct posix_acl *posix_acl_alloc(int count, int flags);
180 static inline struct posix_acl *posix_acl_from_xattr(const void *value,
183 return posix_acl_alloc(0, 0);
185 static inline void posix_acl_release(struct posix_acl *acl) {};
186 static inline int posix_acl_valid(const struct posix_acl *acl) { return 0; }
187 static inline struct posix_acl * posix_acl_dup(struct posix_acl *acl)
192 #else /* !__KERNEL__ */
194 typedef struct file cfs_file_t;
196 #endif /* END __KERNEL__ */
206 #define O_DIRECTORY 0
209 #define O_LARGEFILE 0