Reordered the items inside the file_struct so that alignment padding
[rsync/rsync.git] / rsync.h
diff --git a/rsync.h b/rsync.h
index aa22cfe..d37243a 100644 (file)
--- a/rsync.h
+++ b/rsync.h
@@ -80,8 +80,8 @@
  * unlikely to begin by sending a byte between MIN_PROTOCL_VERSION and
  * MAX_PROTOCOL_VERSION. */
 
-#define MIN_PROTOCOL_VERSION 19
-#define OLD_PROTOCOL_VERSION 20
+#define MIN_PROTOCOL_VERSION 20
+#define OLD_PROTOCOL_VERSION 25
 #define MAX_PROTOCOL_VERSION 40
 
 #define RSYNC_PORT 873
 #define FULL_FLUSH     1
 #define NORMAL_FLUSH   0
 
-#define CLEAR_STRUCT   0
-#define FREE_STRUCT    1
 
 /* Log-message categories.  FLOG is only used on the daemon side to
  * output messages to the log file. */
@@ -254,6 +252,7 @@ enum msgcode {
 
 #include <assert.h>
 
+#include "lib/pool_alloc.h"
 
 #define BOOL int
 
@@ -408,23 +407,23 @@ struct idev {
 #define F_NEXT link_u.links->next
 
 struct file_struct {
-       time_t modtime;
-       OFF_T length;
-       mode_t mode;
        union {
                DEV64_T rdev;   /* The device number, if this is a device */
                char *sum;      /* Only a normal file can have a checksum */
                char *link;     /* Holds symlink string, if a symlink */
        } u;
+       OFF_T length;
+       char *basename;
+       char *dirname;
+       char *basedir;
        union {
                struct idev *idev;
                struct hlink *links;
        } link_u;
-       char *basename;
-       char *dirname;
-       char *basedir;
+       time_t modtime;
        uid_t uid;
        gid_t gid;
+       mode_t mode;
        uchar flags;    /* this item MUST remain last */
 };
 
@@ -435,9 +434,26 @@ struct file_struct {
 #define FLIST_START    (32 * 1024)
 #define FLIST_LINEAR   (FLIST_START * 512)
 
+/*
+ * Extent size for allocation pools A minimum size of 128KB
+ * is needed to mmap them so that freeing will release the
+ * space to the OS.
+ *
+ * Larger sizes reduce leftover fragments and speed free calls
+ * (when they happen) Smaller sizes increase the chance of
+ * freed allocations freeing whole extents.
+ */
+#define FILE_EXTENT    (256 * 1024)
+#define HLINK_EXTENT   (128 * 1024)
+
+#define WITH_HLINK     1
+#define WITHOUT_HLINK  0
+
 struct file_list {
        int count;
        int malloced;
+       alloc_pool_t file_pool;
+       alloc_pool_t hlink_pool;
        struct file_struct **files;
 };