stat-util: also include inode type in hash ops

This doesn't really have any major benefit, but it does make this nicely
mirror stat_inode_same() which also checks this triplet for identifying
identical inodes.
This commit is contained in:
Lennart Poettering
2026-03-24 16:56:40 +01:00
parent 53d5f5c02f
commit cf6f65c5ea
2 changed files with 10 additions and 1 deletions

View File

@@ -709,6 +709,10 @@ nsec_t statx_timestamp_load_nsec(const struct statx_timestamp *ts) {
void inode_hash_func(const struct stat *q, struct siphash *state) {
siphash24_compress_typesafe(q->st_dev, state);
siphash24_compress_typesafe(q->st_ino, state);
/* Also include inode type, to mirror stat_inode_same() */
mode_t type = q->st_mode & S_IFMT;
siphash24_compress_typesafe(type, state);
}
int inode_compare_func(const struct stat *a, const struct stat *b) {
@@ -718,7 +722,11 @@ int inode_compare_func(const struct stat *a, const struct stat *b) {
if (r != 0)
return r;
return CMP(a->st_ino, b->st_ino);
r = CMP(a->st_ino, b->st_ino);
if (r != 0)
return r;
return CMP(a->st_mode & S_IFMT, b->st_mode & S_IFMT);
}
DEFINE_HASH_OPS_WITH_KEY_DESTRUCTOR(inode_hash_ops, struct stat, inode_hash_func, inode_compare_func, free);

View File

@@ -122,6 +122,7 @@ int xstatfsat(int dir_fd, const char *path, struct statfs *ret);
usec_t statx_timestamp_load(const struct statx_timestamp *ts) _pure_;
nsec_t statx_timestamp_load_nsec(const struct statx_timestamp *ts) _pure_;
/* This compares inode number, backing device and inode type, but not modification info */
void inode_hash_func(const struct stat *q, struct siphash *state);
int inode_compare_func(const struct stat *a, const struct stat *b);
extern const struct hash_ops inode_hash_ops;