#if defined(AFS_HPUX102_ENV)
#define AFS_FLOCK k_flock
#else
-#if defined(AFS_SUN56_ENV) || (defined(AFS_LINUX24_ENV) && !(defined(AFS_LINUX26_ENV) && defined(AFS_LINUX_64BIT_KERNEL)))
+#if defined(AFS_SUN5_ENV) || (defined(AFS_LINUX24_ENV) && !(defined(AFS_LINUX26_ENV) && defined(AFS_LINUX_64BIT_KERNEL)))
#define AFS_FLOCK flock64
#else
#define AFS_FLOCK flock
#define MAXNUMSYSNAMES 32 /* max that current constants allow */
#define NOTOKTIMEOUT (2*3600) /* time after which to timeout conns sans tokens */
#define NOPAG 0xffffffff
-#define AFS_NCBRS 1024 /* max # of call back return entries */
+
+
+
#define AFS_MAXCBRSCALL 32 /* max to return in a given call (must be <= AFSCBMAX) */
#define AFS_SALLOC_LOW_WATER 250 /* Min free blocks before allocating more */
#define AFS_LRALLOCSIZ 4096 /* "Large" allocated size */
struct afs_cbr *hash_next;
struct AFSFid fid;
- unsigned int dynalloc:1;
};
+#ifdef AFS_LINUX22_ENV
+/* On Linux, we have to be able to allocate the storage for this using
+ * kmalloc, as otherwise we may deadlock. So, it needs to be able to fit
+ * in a single page
+ */
+# define AFS_NCBRS PAGE_SIZE/sizeof(struct afs_cbr)
+#else
+# define AFS_NCBRS 1024 /* max # of call back return entries */
+#endif
+
/* cellinfo file magic number */
#define AFS_CELLINFO_MAGIC 0xf32817cd
struct tokenJar *tokens;
struct afs_exporter *exporter; /* more info about the exporter for the remote user */
void *cellinfo; /* pointer to cell info (PAG manager only) */
+ afs_rwlock_t lock;
};
#define CVEC_LEN 3 /* per-user connection pool */
#if defined(AFS_DARWIN80_ENV)
#define VTOAFS(v) ((struct vcache *)vnode_fsnode((v)))
#define AFSTOV(vc) ((vc)->v)
+#elif defined(AFS_NBSD40_ENV)
+struct nbvdata {
+ struct genfs_node gfsn;
+ struct vcache *afsvc;
+};
+#define VTOAFS(v) ((((struct nbvdata *)((v)->v_data)))->afsvc)
+#define AFSTOV(vc) ((vc)->v)
#elif defined(AFS_XBSD_ENV) || defined(AFS_DARWIN_ENV) || (defined(AFS_LINUX22_ENV) && !defined(STRUCT_SUPER_OPERATIONS_HAS_ALLOC_INODE))
#define VTOAFS(v) ((struct vcache *)(v)->v_data)
#define AFSTOV(vc) ((vc)->v)
struct lock__bsd__ rwlock;
#endif
#ifdef AFS_XBSD_ENV
-# if defined(AFS_NBSD50_ENV)
- struct krwlock rwlock;
-# elif !defined(AFS_DFBSD_ENV)
+#if !defined(AFS_DFBSD_ENV) && !defined(AFS_NBSD_ENV)
struct lock rwlock;
#endif
#endif
#if defined(AFS_CACHE_VNODE_PATH)
typedef char *afs_ufs_dcache_id_t;
-#elif defined(AFS_SGI61_ENV) || defined(AFS_SUN57_64BIT_ENV)
+#elif defined(AFS_SGI61_ENV) || defined(AFS_SUN5_64BIT_ENV)
/* Using ino64_t here so that user level debugging programs compile
* the size correctly.
*/
#define DO_VLRU 2
#define IS_SLOCK 4
#define IS_WLOCK 8
-#define FIND_CDEAD 16
-#define FIND_BULKDEAD 32
/* values for adown value of afs_LoopServers */
#define AFS_LS_UP 0
#define AFS_VLPORT ((unsigned short) htons(7003))
#define AFS_RXOSDPORT ((unsigned short) htons(7011))
-#define afs_write(avc, uio, aio, acred, nolock) \
- (*(afs_cacheType->vwrite))(avc, uio, aio, acred, nolock)
-
#define afs_rdwr(avc, uio, rw, io, cred) \
- (((rw) == UIO_WRITE) ? afs_write(avc, uio, io, cred, 0) : afs_read(avc, uio, cred, 0, 0, 0))
+ (((rw) == UIO_WRITE) ? afs_write(avc, uio, io, cred, 0) : afs_read(avc, uio, cred, 0))
#define afs_nlrdwr(avc, uio, rw, io, cred) \
- (((rw) == UIO_WRITE) ? afs_write(avc, uio, io, cred, 1) : afs_read(avc, uio, cred, 0, 0, 1))
+ (((rw) == UIO_WRITE) ? afs_write(avc, uio, io, cred, 1) : afs_read(avc, uio, cred, 1))
/* Cache size truncation uses the following low and high water marks:
* If the cache is more than 95% full (CM_DCACHECOUNTFREEPCT), the cache
*/
#if defined(AFS_NBSD40_ENV)
/* in osi_machdep.h as expected */
+#elif defined (AFS_DARWIN110_ENV)
+#define afs_cr_uid(cred) kauth_cred_getuid((kauth_cred_t)(cred))
+#define afs_cr_gid(cred) kauth_cred_getgid((kauth_cred_t)(cred))
#elif !(defined(AFS_LINUX26_ENV) && defined(STRUCT_TASK_STRUCT_HAS_CRED))
#define afs_cr_uid(cred) ((cred)->cr_uid)
#define afs_cr_gid(cred) ((cred)->cr_gid)
#define afs_cr_rgid(cred) ((cred)->cr_rgid)
#endif
+#if !defined(AFS_DARWIN110_ENV)
static_inline void
afs_set_cr_uid(afs_ucred_t *cred, uid_t uid) {
cred->cr_uid = uid;
afs_set_cr_rgid(afs_ucred_t *cred, gid_t gid) {
cred->cr_rgid = gid;
}
-#endif
+#endif /* ! AFS_OBSD_ENV */
+#endif /* ! AFS_DARWIN110_ENV */
#endif
#ifdef AFS_SUN5_ENV
* to accomodate both, *long* is used instead of afs_int32
*/
-# ifdef AFS_SUN57_ENV
struct afssysa {
long syscall;
long parm1;
long parm5;
long parm6;
};
-# else
-struct afssysa {
- afs_int32 syscall;
- afs_int32 parm1;
- afs_int32 parm2;
- afs_int32 parm3;
- afs_int32 parm4;
- afs_int32 parm5;
- afs_int32 parm6;
-};
-# endif
extern int Afs_syscall(struct afssysa *uap, rval_t *rvp);
#endif /* AFS_SUN5_ENV */