From: Harald Hoyer <har...@redhat.com>

Some files on btrfs do not have a physical extent. Just return an increasing 
number.
---
 src/readahead-collect.c |    9 ++++++++-
 1 files changed, 8 insertions(+), 1 deletions(-)

diff --git a/src/readahead-collect.c b/src/readahead-collect.c
index 7983b31..f7f0f14 100644
--- a/src/readahead-collect.c
+++ b/src/readahead-collect.c
@@ -146,6 +146,7 @@ static unsigned long fd_first_block(int fd) {
                 struct fiemap fiemap;
                 struct fiemap_extent extent;
         } data;
+       static unsigned long ul = 0;
 
         zero(data);
         data.fiemap.fm_length = ~0ULL;
@@ -160,6 +161,12 @@ static unsigned long fd_first_block(int fd) {
         if (data.fiemap.fm_extents[0].fe_flags & FIEMAP_EXTENT_UNKNOWN)
                 return 0;
 
+       // Some filesystems/files do not have a physical extent.
+       // Just return an increasing number.
+       if (data.fiemap.fm_extents[0].fe_flags & FIEMAP_EXTENT_MERGED
+           && data.fiemap.fm_extents[0].fe_physical == 0)
+               return ul++;
+
         return (unsigned long) data.fiemap.fm_extents[0].fe_physical;
 }
 
@@ -298,7 +305,7 @@ static int collect(const char *root) {
 
                                                 ul = fd_first_block(m->fd);
 
-                                                if ((k = hashmap_put(files, p, 
ULONG_TO_PTR(ul))) < 0) {
+                                                if (ul && (k = 
hashmap_put(files, p, ULONG_TO_PTR(ul))) < 0) {
 
                                                         if (k != -EEXIST)
                                                                 
log_warning("set_put() failed: %s", strerror(-k));
-- 
1.7.3

_______________________________________________
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel

Reply via email to