Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 18 Jun 2011 12:52:48 +0300
From:      Gleb Kurtsou <gleb.kurtsou@gmail.com>
To:        soc-status@freebsd.org
Subject:   ino64 status report 4
Message-ID:  <20110618095248.GA18585@tops>

next in thread | raw e-mail | index | archive | help

--cNdxnHkX5QqsyA0e
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline

ino64 project aims at extending ino_t to 64 bits and nlink_t to 32 bits
integers providing compatibility shims for both kernel and libc.

I've finished merging and testing my original patch this week. I've used
pjdfstest, dbench and blogbench benchmark suits for testing, rebuilt
most common ports, etc.

Using shlib-compat to compare ABI compatibility of all shared
libraries the following were found to break ABI:
libarchive.so.5
libmagic.so.4
libprocstat.so.1
libufs.so.5
libutil.so.9

Considering forthcoming 9.0 release I think it would be interesting to
check ABI compatibility between 8-STABLE and 9-CURRENT. Please contact
me if you are interested in running such tests. Example diff between
original and ino64 versions of libarchive.so.5 produced by shlib-compat
attached.


--cNdxnHkX5QqsyA0e
Content-Type: text/plain; charset=utf-8
Content-Disposition: attachment; filename="libarchive.so.5.diff.txt"

--- so-diff/libarchive.so.5.orig.c	2011-06-17 21:41:06.971647373 +0300
+++ so-diff/libarchive.so.5.new.c	2011-06-17 21:41:07.004194526 +0300
@@ -1,5 +1,5 @@
 
-// Definitions mismatch: __archive_read_ahead@Base so-orig/libarchive.so.5
+// Definitions mismatch: __archive_read_ahead@Base so-ino64/libarchive.so.5
 struct archive
 {
     uint32_t magic;
@@ -33,7 +33,7 @@
     struct archive archive;
     struct archive_entry *entry;
     uint32_t skip_file_dev;
-    uint32_t skip_file_ino;
+    uint64_t skip_file_ino;
     const char *read_data_block;
     int64_t read_data_offset;
     int64_t read_data_output_offset;
@@ -102,7 +102,7 @@
 struct extract {  };
 const void *__archive_read_ahead(struct archive_read *a, uint64_t min, int64_t *avail);
 
-// Definitions mismatch: __archive_read_consume@Base so-orig/libarchive.so.5
+// Definitions mismatch: __archive_read_consume@Base so-ino64/libarchive.so.5
 struct archive
 {
     uint32_t magic;
@@ -136,7 +136,7 @@
     struct archive archive;
     struct archive_entry *entry;
     uint32_t skip_file_dev;
-    uint32_t skip_file_ino;
+    uint64_t skip_file_ino;
     const char *read_data_block;
     int64_t read_data_offset;
     int64_t read_data_output_offset;
@@ -205,7 +205,7 @@
 struct extract {  };
 int64_t __archive_read_consume(struct archive_read *a, uint64_t request);
 
-// Definitions mismatch: __archive_read_filter_ahead@Base so-orig/libarchive.so.5
+// Definitions mismatch: __archive_read_filter_ahead@Base so-ino64/libarchive.so.5
 struct archive_read_filter
 {
     struct archive_read_filter_bidder *bidder;
@@ -231,7 +231,7 @@
 };
 const void *__archive_read_filter_ahead(struct archive_read_filter *filter, uint64_t min, int64_t *avail);
 
-// Definitions mismatch: __archive_read_filter_consume@Base so-orig/libarchive.so.5
+// Definitions mismatch: __archive_read_filter_consume@Base so-ino64/libarchive.so.5
 struct archive_read_filter
 {
     struct archive_read_filter_bidder *bidder;
@@ -257,7 +257,7 @@
 };
 int64_t __archive_read_filter_consume(struct archive_read_filter *filter, uint64_t request);
 
-// Definitions mismatch: __archive_read_filter_skip@Base so-orig/libarchive.so.5
+// Definitions mismatch: __archive_read_filter_skip@Base so-ino64/libarchive.so.5
 struct archive_read_filter
 {
     struct archive_read_filter_bidder *bidder;
@@ -283,7 +283,7 @@
 };
 int64_t __archive_read_filter_skip(struct archive_read_filter *filter, int64_t request);
 
-// Definitions mismatch: __archive_read_get_bidder@Base so-orig/libarchive.so.5
+// Definitions mismatch: __archive_read_get_bidder@Base so-ino64/libarchive.so.5
 struct archive
 {
     uint32_t magic;
@@ -317,7 +317,7 @@
     struct archive archive;
     struct archive_entry *entry;
     uint32_t skip_file_dev;
-    uint32_t skip_file_ino;
+    uint64_t skip_file_ino;
     const char *read_data_block;
     int64_t read_data_offset;
     int64_t read_data_output_offset;
@@ -386,7 +386,7 @@
 struct extract {  };
 struct archive_read_filter_bidder *__archive_read_get_bidder(struct archive_read *a);
 
-// Definitions mismatch: __archive_read_register_format@Base so-orig/libarchive.so.5
+// Definitions mismatch: __archive_read_register_format@Base so-ino64/libarchive.so.5
 struct archive
 {
     uint32_t magic;
@@ -420,7 +420,7 @@
     struct archive archive;
     struct archive_entry *entry;
     uint32_t skip_file_dev;
-    uint32_t skip_file_ino;
+    uint64_t skip_file_ino;
     const char *read_data_block;
     int64_t read_data_offset;
     int64_t read_data_output_offset;
@@ -489,7 +489,7 @@
 struct extract {  };
 int32_t __archive_read_register_format(struct archive_read *a, void *format_data, const char *name, F(, int32_t, (struct archive_read * ))* bid, F(, int32_t, (struct archive_read * , const char * , const char * ))* options, F(, int32_t, (struct archive_read * , struct archive_entry * ))* read_header, F(, int32_t, (struct archive_read * , const void ** , uint64_t * , int64_t * ))* read_data, F(, int32_t, (struct archive_read * ))* read_data_skip, F(, int32_t, (struct archive_read * ))* cleanup);
 
-// Definitions mismatch: __archive_read_skip@Base so-orig/libarchive.so.5
+// Definitions mismatch: __archive_read_skip@Base so-ino64/libarchive.so.5
 struct archive
 {
     uint32_t magic;
@@ -523,7 +523,7 @@
     struct archive archive;
     struct archive_entry *entry;
     uint32_t skip_file_dev;
-    uint32_t skip_file_ino;
+    uint64_t skip_file_ino;
     const char *read_data_block;
     int64_t read_data_offset;
     int64_t read_data_output_offset;
@@ -592,7 +592,7 @@
 struct extract {  };
 int64_t __archive_read_skip(struct archive_read *a, int64_t request);
 
-// Definitions mismatch: __archive_read_skip_lenient@Base so-orig/libarchive.so.5
+// Definitions mismatch: __archive_read_skip_lenient@Base so-ino64/libarchive.so.5
 struct archive
 {
     uint32_t magic;
@@ -626,7 +626,7 @@
     struct archive archive;
     struct archive_entry *entry;
     uint32_t skip_file_dev;
-    uint32_t skip_file_ino;
+    uint64_t skip_file_ino;
     const char *read_data_block;
     int64_t read_data_offset;
     int64_t read_data_output_offset;
@@ -695,14 +695,15 @@
 struct extract {  };
 int64_t __archive_read_skip_lenient(struct archive_read *a, int64_t request);
 
-// Definitions mismatch: archive_entry_copy_stat@Base so-orig/libarchive.so.5
+// Definitions mismatch: archive_entry_copy_stat@Base so-ino64/libarchive.so.5
 struct archive_entry {  };
 struct stat
 {
+    uint64_t st_ino;
+    uint32_t st_nlink;
     uint32_t st_dev;
-    uint32_t st_ino;
     uint16_t st_mode;
-    uint16_t st_nlink;
+    int16_t st_padding0;
     uint32_t st_uid;
     uint32_t st_gid;
     uint32_t st_rdev;
@@ -724,7 +725,7 @@
 };
 void archive_entry_copy_stat(struct archive_entry *entry, const struct stat *st);
 
-// Definitions mismatch: archive_entry_ino@Base so-orig/libarchive.so.5
+// Definitions mismatch: archive_entry_ino@Base so-ino64/libarchive.so.5
 struct ae_acl
 {
     struct ae_acl *next;
@@ -802,9 +803,9 @@
     uint64_t length;
     uint64_t buffer_length;
 };
-uint32_t archive_entry_ino(struct archive_entry *entry);
+uint64_t archive_entry_ino(struct archive_entry *entry);
 
-// Definitions mismatch: archive_entry_stat@Base so-orig/libarchive.so.5
+// Definitions mismatch: archive_entry_stat@Base so-ino64/libarchive.so.5
 struct ae_acl
 {
     struct ae_acl *next;
@@ -884,10 +885,11 @@
 };
 struct stat
 {
+    uint64_t st_ino;
+    uint32_t st_nlink;
     uint32_t st_dev;
-    uint32_t st_ino;
     uint16_t st_mode;
-    uint16_t st_nlink;
+    int16_t st_padding0;
     uint32_t st_uid;
     uint32_t st_gid;
     uint32_t st_rdev;
@@ -909,14 +911,15 @@
 };
 const struct stat *archive_entry_stat(struct archive_entry *entry);
 
-// Definitions mismatch: archive_read_disk_entry_from_file@Base so-orig/libarchive.so.5
+// Definitions mismatch: archive_read_disk_entry_from_file@Base so-ino64/libarchive.so.5
 struct archive_entry {  };
 struct stat
 {
+    uint64_t st_ino;
+    uint32_t st_nlink;
     uint32_t st_dev;
-    uint32_t st_ino;
     uint16_t st_mode;
-    uint16_t st_nlink;
+    int16_t st_padding0;
     uint32_t st_uid;
     uint32_t st_gid;
     uint32_t st_rdev;
@@ -938,10 +941,10 @@
 };
 int32_t archive_read_disk_entry_from_file(struct archive *_a, struct archive_entry *entry, int32_t fd, const struct stat *st);
 
-// Definitions mismatch: archive_read_extract_set_skip_file@Base so-orig/libarchive.so.5
-void archive_read_extract_set_skip_file(struct archive *_a, uint32_t d, uint32_t i);
+// Definitions mismatch: archive_read_extract_set_skip_file@Base so-ino64/libarchive.so.5
+void archive_read_extract_set_skip_file(struct archive *_a, uint32_t d, uint64_t i);
 
-// Definitions mismatch: archive_read_support_compression_gzip@Base so-orig/libarchive.so.5
+// Definitions mismatch: archive_read_support_compression_gzip@Base so-ino64/libarchive.so.5
 struct archive
 {
     uint32_t magic;
@@ -976,7 +979,7 @@
 };
 int32_t archive_read_support_compression_gzip(struct archive *_a);
 
-// Definitions mismatch: archive_write_disk_set_skip_file@Base so-orig/libarchive.so.5
+// Definitions mismatch: archive_write_disk_set_skip_file@Base so-ino64/libarchive.so.5
 struct archive
 {
     uint32_t magic;
@@ -1009,9 +1012,9 @@
     F(, int64_t, (struct archive * , const void * , uint64_t )) *archive_write_data;
     F(, int64_t, (struct archive * , const void * , uint64_t , int64_t )) *archive_write_data_block;
 };
-int32_t archive_write_disk_set_skip_file(struct archive *_a, uint32_t d, uint32_t i);
+int32_t archive_write_disk_set_skip_file(struct archive *_a, uint32_t d, uint64_t i);
 
-// Definitions mismatch: archive_write_set_skip_file@Base so-orig/libarchive.so.5
+// Definitions mismatch: archive_write_set_skip_file@Base so-ino64/libarchive.so.5
 struct archive
 {
     uint32_t magic;
@@ -1044,4 +1047,4 @@
     F(, int64_t, (struct archive * , const void * , uint64_t )) *archive_write_data;
     F(, int64_t, (struct archive * , const void * , uint64_t , int64_t )) *archive_write_data_block;
 };
-int32_t archive_write_set_skip_file(struct archive *_a, uint32_t d, uint32_t i);
+int32_t archive_write_set_skip_file(struct archive *_a, uint32_t d, uint64_t i);

--cNdxnHkX5QqsyA0e--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20110618095248.GA18585>