libafs: Drop xvcache for AllocCBR
[openafs.git] / src / afs / afs.h
index 6969831..ac06998 100644 (file)
@@ -85,7 +85,9 @@ extern int afs_shuttingdown;
 #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 */
@@ -258,9 +260,18 @@ struct afs_cbr {
     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
 
@@ -1329,6 +1340,7 @@ extern struct brequest afs_brs[NBRS];     /* request structures */
 #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
@@ -1347,15 +1359,10 @@ extern struct brequest afs_brs[NBRS];   /* request structures */
 #define        AFS_VLPORT          ((unsigned short) htons(7003))
 #define AFS_RXOSDPORT      ((unsigned short) htons(7011))
 
-#define        afs_read(avc, uio, acred, albn, abpp, nolock) \
-        (*(afs_cacheType->vread))(avc, uio, acred, albn, abpp, nolock)
-#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
@@ -1424,25 +1431,38 @@ extern struct brequest afs_brs[NBRS];   /* request structures */
 
 struct buf;
 
+struct rxfs_storeVariables {
+    struct rx_call *call;
+    struct vcache *vcache;
+    char *tbuffer;
+    struct iovec *tiov;
+    afs_int32 tnio;
+    afs_int32 hasNo64bit;
+    struct AFSStoreStatus InStatus;
+};
+
 struct storeOps {
-    int (*prepare)(void *, afs_uint32, afs_uint32 *);
-    int (*read)(void *, struct osi_file *, afs_uint32, afs_uint32,
-               afs_uint32 *, char **);
-    int (*write)(void *, char *, afs_uint32, afs_uint32 *);
-    int (*status)(void *);
-    int (*padd)(void *, afs_uint32);
-    int (*close)(void *, struct AFSFetchStatus *, afs_int32 *);
-    int (*destroy)(void **, afs_int32);
-    int (*storeproc)(struct vcache *, struct storeOps *, void *,
-                    struct dcache *, int *, afs_size_t *);
+    int (*prepare)(void *rock, afs_uint32 size, afs_uint32 *bytestoxfer);
+    int (*read)(void *rock, struct osi_file *tfile, afs_uint32 offset,
+        afs_uint32 tlen, afs_uint32 *bytesread);
+    int (*write)(void *rock, afs_uint32 tlen, afs_uint32 *byteswritten);
+    int (*status)(void *rock);
+    int (*padd)(void *rock, afs_uint32 tlen);
+    int (*close)(void *rock, struct AFSFetchStatus *OutStatus,
+        afs_int32 *doProcessFS);
+    int (*destroy)(void **rock, afs_int32 error);
+    int (*storeproc)(struct storeOps *, void *, struct dcache *, int *,
+                    afs_size_t *);
 };
 
 struct fetchOps {
-    int (*more)(void *, afs_int32 *, afs_uint32 *);
-    int (*read)(void *, afs_uint32, afs_uint32 *);
-    int (*write)(void *, struct osi_file *, afs_uint32, afs_uint32, afs_uint32 *);
-    int (*close)(void *, struct vcache *, struct dcache *, struct afs_FetchOutput *);
-    int (*destroy)(void **, afs_int32);
+    int (*more)(void *rock, afs_int32 *length, afs_uint32 *moredata);
+    int (*read)(void *rock, afs_uint32 tlen, afs_uint32 *bytesread);
+    int (*write)(void *rock, struct osi_file *fp, afs_uint32 offset,
+        afs_uint32 tlen, afs_uint32 *byteswritten);
+    int (*close)(void *rock, struct vcache *avc, struct dcache *adc,
+        struct afs_FetchOutput *Outputs);
+    int (*destroy)(void **rock, afs_int32 error);
 };
 
 /* fakestat support: opaque storage for afs_EvalFakeStat to remember
@@ -1470,12 +1490,18 @@ extern int afsd_dynamic_vcaches;
  */
 #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)
+#if !defined(AFS_OBSD_ENV)
 #define afs_cr_ruid(cred) ((cred)->cr_ruid)
 #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;
@@ -1484,6 +1510,7 @@ static_inline void
 afs_set_cr_gid(afs_ucred_t *cred, gid_t gid) {
     cred->cr_gid = gid;
 }
+#if !defined(AFS_OBSD_ENV)
 static_inline void
 afs_set_cr_ruid(afs_ucred_t *cred, uid_t uid) {
     cred->cr_ruid = uid;
@@ -1492,6 +1519,8 @@ static_inline void
 afs_set_cr_rgid(afs_ucred_t *cred, gid_t gid) {
     cred->cr_rgid = gid;
 }
+#endif /* ! AFS_OBSD_ENV */
+#endif /* ! AFS_DARWIN110_ENV */
 #endif
 
 #ifdef AFS_SUN5_ENV