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