#endif
#include <stdlib.h>
#include <string.h>
-#include <unistd.h>
-#include <dirent.h>
#include <limits.h>
#include <assert.h>
#include <stdarg.h>
-#include <setjmp.h>
+
+#if !defined(AFS_USR_DARWIN_ENV) && !defined(AFS_USR_FBSD_ENV) /* must be included after KERNEL undef'd */
+#include <unistd.h>
+#include <ctype.h>
+#include <sys/types.h>
+#include <dirent.h>
+#include <setjmp.h>
+#endif
#ifdef AFS_USR_SUN5_ENV
#include <signal.h>
#include <sys/param.h>
-#include <sys/types.h>
#include <sys/socket.h>
#include <net/if.h>
#include <sys/sockio.h>
#ifdef AFS_USR_AIX_ENV
#include <sys/param.h>
-#include <sys/types.h>
#include <sys/socket.h>
#include <net/if.h>
#include <fcntl.h>
#ifdef AFS_USR_SGI_ENV
#include <sys/param.h>
-#include <sys/types.h>
#include <sys/socket.h>
#include <net/if.h>
#include <sys/sockio.h>
#ifdef AFS_USR_HPUX_ENV
#include <sys/param.h>
-#include <sys/types.h>
#include <sys/socket.h>
#include <net/if.h>
#include <sys/file.h>
#define AFS_USR_UNDEF_KERNEL_ENV 1
#endif
#include <sys/param.h>
-#include <sys/types.h>
#include <sys/socket.h>
#include <net/if.h>
#include <sys/file.h>
#define AFS_USR_UNDEF_KERNEL_ENV 1
#endif
#include <errno.h>
+#include <setjmp.h>
#include <sys/param.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <arpa/inet.h>
+#include <dirent.h>
+#include <ctype.h>
+#include <unistd.h>
#ifndef O_SYNC
#define O_SYNC O_FSYNC
#endif
#endif /* AFS_USR_DARWIN_ENV || AFS_USR_FBSD_ENV */
-#ifdef AFS_AFSDB_ENV
+#ifdef HAVE_SYS_BITYPES_H
+#include <sys/bitypes.h>
+#endif
+#ifdef HAVE_SYS_STATFS_H
+#include <sys/statfs.h>
+#endif
+#ifdef HAVE_SYS_STATVFS_H
+#include <sys/statvfs.h>
+#endif
+
+#ifndef HAVE_FSBLKCNT_T
+typedef unsigned int fsblkcnt_t;
+#endif
+
#include <arpa/nameser.h>
+#ifdef HAVE_ARPA_NAMESER_COMPAT_H
+#include <arpa/nameser_compat.h>
+#endif
#include <resolv.h>
-#endif /* AFS_AFSDB_ENV */
/* glibc 2.2 has pthread_attr_setstacksize */
#if (defined(AFS_LINUX22_ENV) && !defined(AFS_USR_LINUX22_ENV)) || (defined(AFS_USR_LINUX22_ENV) && (__GLIBC_MINOR__ < 2))
#define MAXNAMLEN 512
#endif
-#ifndef PAGESIZE
-#define PAGESIZE 4096
-#endif
-
/*
* This file contains data types and definitions for running
* the AFS client in user space. Kernel data structures
#define vattr usr_vattr
#define buf usr_buf
#define statfs usr_statfs
-#define ucred usr_ucred
+/* #define ucred usr_ucred */
#define user usr_user
-#define proc usr_proc
+/* #define proc usr_proc */
#define file usr_file
#define dirent usr_dirent
#define flock usr_flock
#define fid usr_fid
#define sysent usr_sysent
+#define ifaddr usr_ifaddr
+#define ifnet usr_ifnet
#define in_ifaddr usr_in_ifaddr
-#define ifaddr usr_ifaddr
-#define ifnet usr_ifnet
#define socket usr_socket
#define crget usr_crget
#define crcopy usr_crcopy
#define offset_t usr_offset_t
#define getpid() usr_getpid()
#define setpag(A,B,C,D) usr_setpag((A),(B),(C),(D))
+#define osi_getpid() afs_pointer_to_int(usr_thread_self())
#ifdef pid_t
#undef pid_t
#endif
#ifdef VFIFO
#undef VFIFO
#endif
-#ifdef VDOOR
-#undef VDOOR
-#endif
-#ifdef VBAD
-#undef VBAD
-#endif
#ifdef VSOCK
#undef VSOCK
#endif
-#define VNON 0
-#define VREG 1
-#define VDIR 2
-#define VBLK 3
-#define VCHR 4
-#define VLNK 5
-#define VFIFO 6
-#define VDOOR 7
-#define VBAD 8
-#define VSOCK 9
+#define VNON 0
+#define VREG S_IFREG
+#define VDIR S_IFDIR
+#define VBLK S_IFBLK
+#define VCHR S_IFCHR
+#define VLNK S_IFLNK
+#define VSOCK S_IFSOCK
+#define VFIFO S_IFIFO
typedef int usr_vtype_t;
#endif
#define NBPG 4096
-#define panic(S) do{fprintf(stderr, S);assert(0);}while(0)
+#define panic(S) do{fprintf(stderr, "%s", S);assert(0);}while(0)
#define abort() assert(0)
#define usr_assert(A) assert(A)
pthread_attr_t attr; \
assert(pthread_attr_init(&attr) == 0); \
assert(pthread_attr_setstacksize(&attr, 124288) == 0); \
- assert(pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED) == 0); \
assert(pthread_create((A), &attr, (B), (void *)(C)) == 0); \
assert(pthread_attr_destroy(&attr) == 0); \
} while(0)
+#define usr_thread_join(A,B) pthread_join(A, B)
#define usr_thread_detach(A) pthread_detach(A)
#define usr_keycreate(A,B) assert(pthread_key_create(A,B) == 0)
#define usr_setspecific(A,B) pthread_setspecific(A,B)
AFS_ASSERT_GLOCK(); \
usr_assert((vp)->v_count > 0); \
if (--((vp)->v_count) == 0) \
- afs_inactive(vp, u.u_cred); \
+ afs_inactive(VTOAFS(vp), get_user_struct()->u_cred); \
} while(0)
struct usr_statfs {
unsigned long f_files;
};
+#define ATTR_MODE (1 << 0)
+#define ATTR_UID (1 << 1)
+#define ATTR_GID (1 << 2)
+#define ATTR_MTIME (1 << 3)
+#define ATTR_SIZE (1 << 4)
+
struct usr_vattr {
- long va_mask;
+ int va_mask; /* bitmask of ATTR_* values above */
usr_vtype_t va_type;
- unsigned short va_mode;
- long va_uid;
- long va_gid;
- unsigned long va_fsid;
- unsigned long va_nodeid;
- unsigned long va_nlink;
- unsigned long va_size;
+ mode_t va_mode;
+ uid_t va_uid;
+ gid_t va_gid;
+ int va_fsid;
+ ino_t va_nodeid;
+ nlink_t va_nlink;
+ afs_size_t va_size;
struct timeval va_atime;
struct timeval va_mtime;
struct timeval va_ctime;
- unsigned long va_rdev;
+ dev_t va_rdev;
unsigned long va_blocksize;
- unsigned long va_blocks;
+ fsblkcnt_t va_blocks;
unsigned long va_vcode;
};
unsigned long ic_spare[4];
} i_ic;
};
-extern struct usr_inode *iget();
struct usr_fileops {
int (*vno_rw) (void);
char *f_data;
long f_type;
};
-extern struct usr_file *falloc();
+
extern struct usr_file *getf(int);
#ifdef fid_len
extern struct usr_ucred *usr_crcopy(struct usr_ucred *);
extern int usr_crhold(struct usr_ucred *);
extern int usr_crfree(struct usr_ucred *);
-extern struct usr_ucred *afs_global_ucredp;
struct usr_proc {
unsigned long p_flag;
#define NDIRSIZ_LEN(len) \
((sizeof (struct usr_dirent)+4 - (MAXNAMLEN+1)) + (((len)+1 + 3) &~ 3))
+struct vcache;
+#define afs_ucred_t struct usr_ucred
+#define AFS_FLOCK flock
+
+
struct usr_vnodeops {
- int (*vn_open) (char *path, int flags, int mode);
- int (*vn_close) (int fd);
- int (*vn_rdwr) ();
+ int (*vn_open) (struct vcache **, afs_int32, afs_ucred_t *);
+ int (*vn_close) (struct vcache *, afs_int32, afs_ucred_t *);
+ int (*vn_rdwr) (struct usr_vnode *avc, struct usr_uio *uio,
+ int rw, int io, struct usr_ucred *cred);
int (*vn_ioctl) (void);
int (*vn_select) (void);
- int (*vn_getattr) ();
- int (*vn_setattr) ();
- int (*vn_access) ();
- int (*vn_lookup) ();
- int (*vn_create) ();
- int (*vn_remove) ();
- int (*vn_link) ();
- int (*vn_rename) ();
- int (*vn_mkdir) ();
- int (*vn_rmdir) ();
- int (*vn_readdir) ();
- int (*vn_symlink) ();
- int (*vn_readlink) ();
- int (*vn_fsync) ();
- int (*vn_inactive) ();
- int (*vn_bmap) ();
- int (*vn_strategy) ();
- int (*vn_bread) ();
- int (*vn_brelse) ();
- int (*vn_lockctl) ();
- int (*vn_fid) ();
+ int (*vn_getattr) (struct vcache *avc, struct vattr *, afs_ucred_t *);
+ int (*vn_setattr) (struct vcache *avc, struct vattr *, afs_ucred_t *);
+ int (*vn_access) (struct vcache *avc, afs_int32, afs_ucred_t *);
+ int (*vn_lookup) (struct vcache *adp, char *, struct vcache **,
+ afs_ucred_t *, int);
+ int (*vn_create) (struct vcache *adp, char *, struct vattr *,
+ enum vcexcl, int, struct vcache **, afs_ucred_t *);
+ int (*vn_remove) (struct vcache *adp, char *, afs_ucred_t *);
+ int (*vn_link) (struct vcache *avc, struct vcache *adp, char *,
+ afs_ucred_t *);
+ int (*vn_rename) (struct vcache *aodp, char *, struct vcache *, char *,
+ afs_ucred_t *);
+ int (*vn_mkdir) (struct vcache *adp, char *, struct vattr *,
+ struct vcache **, afs_ucred_t *);
+ int (*vn_rmdir) (struct vcache *adp, char *, afs_ucred_t *);
+ int (*vn_readdir) (struct vcache *avc, struct uio *, afs_ucred_t *);
+ int (*vn_symlink) (struct vcache *adp, char *, struct vattr *, char *,
+ afs_ucred_t *);
+ int (*vn_readlink) (struct vcache *avc, struct uio *, afs_ucred_t *);
+ int (*vn_fsync) (struct vcache *avc, afs_ucred_t *);
+ int (*vn_inactive) (struct vcache *avc, afs_ucred_t *acred);
+ int (*vn_bmap) (void);
+ int (*vn_strategy) (void);
+ int (*vn_bread) (void);
+ int (*vn_brelse) (void);
+ int (*vn_lockctl) (struct vcache *, struct AFS_FLOCK *, int,
+ afs_ucred_t *);
+ int (*vn_fid) (struct vcache *avc, struct fid **);
};
struct usr_fs {
typedef long usr_whymountroot_t;
struct usr_vfsops {
- int (*vfs_mount) ();
- int (*vfs_unmount) ();
- int (*vfs_root) ();
- int (*vfs_statfs) ();
- int (*vfs_mountroot) ();
- int (*vfs_swapvp) ();
+ int (*vfs_mount) (struct vfs *, char *, void *);
+ int (*vfs_unmount) (struct vfs *);
+ int (*vfs_root) (struct vfs *, struct vnode **);
+ int (*vfs_statfs) (struct vfs *, struct statfs *);
+ int (*vfs_mountroot) (struct vfs *);
+ int (*vfs_swapvp) (void);
};
struct usr_vfs {
struct usr_vfsops *vfs_op;
};
-struct usr_sysent {
- char sy_narg;
- int (*sy_call) ();
-};
-extern struct usr_sysent usr_sysent[];
-
struct usr_ifnet {
struct usr_ifnet *if_next;
short if_flags;
};
extern struct usr_in_ifaddr *usr_in_ifaddr;
-extern usr_key_t afs_global_u_key; /* for per thread authentication */
-
-#if defined(AFS_USR_OSF_ENV)
-extern char V;
-#else
-extern long V;
-#endif
-
#endif /* UKERNEL */
struct min_direct {
-#if defined(AFS_OFS_ENV) || defined(AFS_USR_OSF_ENV)
+#if defined(AFS_USR_OSF_ENV)
unsigned int d_fileno;
#else /* AFS_OFS_ENV || AFS_USR_OSF_ENV */
unsigned long d_fileno;
} u_r;
};
#define u_rval1 u_r.r_val1
-#define u (*(get_user_struct()))
extern struct usr_user *get_user_struct(void);