X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Freadahead-collect.c;h=c8b2cdcc52eca4a38ff8216d3cfebe5d99b11e69;hp=5c9968a06e562d3c9a25370ed6ea3b455a600967;hb=b4a16b7b8abddb93205577aefd126040ff5310a3;hpb=efe5e8f7e114b0ff12c6341617630e1204eca229 diff --git a/src/readahead-collect.c b/src/readahead-collect.c index 5c9968a06..c8b2cdcc5 100644 --- a/src/readahead-collect.c +++ b/src/readahead-collect.c @@ -54,7 +54,6 @@ * * - detect ssd on btrfs/lvm... * - read ahead directories - * - sd_readahead_cancel * - gzip? * - remount rw? * - handle files where nothing is in mincore @@ -65,6 +64,10 @@ static unsigned arg_files_max = 16*1024; static off_t arg_file_size_max = READAHEAD_FILE_SIZE_MAX; static usec_t arg_timeout = 2*USEC_PER_MINUTE; +/* Avoid collisions with the NULL pointer */ +#define SECTOR_TO_PTR(s) ULONG_TO_PTR((s)+1) +#define PTR_TO_SECTOR(p) (PTR_TO_ULONG(p)-1) + static int btrfs_defrag(int fd) { struct btrfs_ioctl_vol_args data; @@ -201,7 +204,7 @@ static int qsort_compare(const void *a, const void *b) { static int collect(const char *root) { enum { - FD_FANOTIFY, /* Get the actualy fs events */ + FD_FANOTIFY, /* Get the actual fs events */ FD_SIGNAL, FD_INOTIFY, /* We get notifications to quit early via this fd */ _FD_MAX @@ -396,7 +399,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 ((k = hashmap_put(files, p, SECTOR_TO_PTR(ul))) < 0) { log_warning("set_put() failed: %s", strerror(-k)); free(p); } @@ -469,7 +472,7 @@ done: j = ordered; HASHMAP_FOREACH_KEY(q, p, files, i) { j->path = p; - j->block = PTR_TO_ULONG(q); + j->block = PTR_TO_SECTOR(q); j++; }