Index: arlad/inter.c
===================================================================
RCS file: /afs/stacken.kth.se/src/SourceRepository/arla/arlad/inter.c,v
retrieving revision 1.111
diff -u -r1.111 inter.c
--- inter.c	2001/02/28 22:41:42	1.111
+++ inter.c	2001/03/04 02:19:41
@@ -208,19 +208,20 @@
 	 fcache_cache_handle *cache_handle,
 	 char *cache_name,
 	 size_t cache_name_sz,
-	 size_t length)
+	 size_t *length)
 {
      FCacheEntry *entry;
      Result ret;
      u_long mask;
      int error;
 
-     error = fcache_get_data (&entry, fid, ce, length);
+     error = fcache_get_data (&entry, fid, ce, *length);
      if (error) {
 	 ret.res = -1;
 	 ret.error = error;
 	 return ret;
      }
+     *length = entry->fetched_length;
 
      switch(tokens) {
      case XFS_DATA_R:
Index: arlad/inter.h
===================================================================
RCS file: /afs/stacken.kth.se/src/SourceRepository/arla/arlad/inter.h,v
retrieving revision 1.25
diff -u -r1.25 inter.h
--- inter.h	2001/02/28 22:41:43	1.25
+++ inter.h	2001/03/04 02:19:56
@@ -61,7 +61,7 @@
 
 Result
 cm_open (VenusFid *fid, CredCacheEntry **ce, u_int tokens,
-	 fcache_cache_handle *, char *, size_t, size_t);
+	 fcache_cache_handle *, char *, size_t, size_t *);
 
 Result
 cm_close (VenusFid fid, int flag, AFSStoreStatus *, CredCacheEntry *ce);
Index: arlad/messages.c
===================================================================
RCS file: /afs/stacken.kth.se/src/SourceRepository/arla/arlad/messages.c,v
retrieving revision 1.237
diff -u -r1.237 messages.c
--- messages.c	2001/02/28 22:41:44	1.237
+++ messages.c	2001/03/06 15:25:10
@@ -1715,6 +1715,7 @@
      struct xfs_message_header *h0 = NULL;
      size_t h0_len = 0;
      fcache_cache_handle cache_handle;
+     size_t offset;
 
      fid = (VenusFid *)&h->handle;
      arla_warnx (ADEBMSG, "getdata (%ld.%lu.%lu.%lu)",
@@ -1755,6 +1756,7 @@
 	       if (ret == 0) {
 		   msg.node.tokens = res.tokens;
 		   msg.cache_handle = cache_handle.xfs_handle;
+		   msg.offset = entry->fetched_length;
 		   msg.flag = XFS_ID_INVALID_DNLC;
 		   if (cache_handle.valid)
 		       msg.flag |= XFS_ID_HANDLE_VALID;
@@ -1763,9 +1765,15 @@
 	       }
 	       fcache_release(entry);
 	  } else {
+	      if (h->offset)
+		  offset = ((h->offset - 1) & ~65535) + 65536;
+	      else
+		  offset = 65536;
+	      arla_warnx (ADEBMSG, "  requested %d fetching %d",
+			  h->offset, offset);
 	      do {
 		  res = cm_open (fid, &ce, h->tokens, &cache_handle,
-				 msg.cache_name, sizeof(msg.cache_name), 0 /* XXX */);
+				 msg.cache_name, sizeof(msg.cache_name), &offset);
 		  if (res.res)
 		      ret = res.error;
 		  else
@@ -1777,6 +1785,8 @@
 		  if (cache_handle.valid)
 		      msg.flag |= XFS_ID_HANDLE_VALID;
 		  msg.node.tokens = res.tokens;
+		  arla_warnx (ADEBMSG, "  got %d", offset);
+		  msg.offset = offset;
 		  fcacheentry2xfsnode (fid, &real_fid,
 				       &status, &msg.node, ae,
 				       FCACHE2XFSNODE_ALL);
@@ -1789,6 +1799,25 @@
 	 h0 = (struct xfs_message_header *)&msg;
 	 h0_len = sizeof(msg);
      }
+     xfs_send_message_wakeup_multiple (fd,
+				       h->header.sequence_num,
+				       ret,
+				       h0, h0_len,
+				       NULL, 0);
+
+     if (status.FileType == TYPE_FILE) {
+	 offset = offset + 65536;
+	 arla_warnx (ADEBMSG, "  prefetching to %d", offset);
+	 res = cm_open (fid, &ce, h->tokens, &cache_handle,
+			msg.cache_name, sizeof(msg.cache_name), &offset);
+	 if (res.res)
+	     ret = res.error;
+	 else
+	     ret = res.res;
+     }
+     
+     cred_free (ce);
+     return ret;
 
 out:
      cred_free (ce);
Index: xfs/include/xfs/xfs_message.h
===================================================================
RCS file: /afs/stacken.kth.se/src/SourceRepository/arla/xfs/include/xfs/xfs_message.h,v
retrieving revision 1.45
diff -u -r1.45 xfs_message.h
--- xfs_message.h	2001/02/01 03:52:19	1.45
+++ xfs_message.h	2001/03/04 02:01:10
@@ -38,7 +38,7 @@
 
 /* bump this for any incompatible changes */
 
-#define XFS_VERSION 17
+#define XFS_VERSION 18
 
 #if defined(WIN32)
 #ifdef i386
@@ -299,6 +299,8 @@
   xfs_handle handle;
   u_int32_t tokens;
   u_int32_t pad1;
+  u_int32_t offset;
+  u_int32_t pad2;
 };
 
 /* XFS_MESSAGE_INSTALLDATA */
@@ -309,6 +311,8 @@
   struct xfs_cache_handle cache_handle;
   u_int32_t flag;
   u_int32_t pad1;
+  u_int32_t offset;
+  u_int32_t pad2;
 };
 
 /* XFS_MSG_INACTIVENODE */
