From c93e6b5f79d677417d79c62cf1e303f2d8340aed Mon Sep 17 00:00:00 2001 From: Jim Meyering Date: Fri, 20 Jul 2007 15:22:46 +0000 Subject: [PATCH] Introduce is_same_inode macro, now including a comparison of st_dev. * lib/misc/lvm-file.h (is_same_inode): Define. * lib/filters/filter-persistent.c (persistent_filter_dump): Use is_same_inode in place of a direct st_ino-only comparison. * lib/locking/file_locking.c (_release_lock, _lock_file): Likewise. --- WHATS_NEW | 2 +- lib/filters/filter-persistent.c | 2 +- lib/locking/file_locking.c | 4 ++-- lib/misc/lvm-file.h | 4 ++++ 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/WHATS_NEW b/WHATS_NEW index 7584c4aec..75be2e7a6 100644 --- a/WHATS_NEW +++ b/WHATS_NEW @@ -1,5 +1,5 @@ Version 2.02.28 - -================================ + Introduce is_same_inode macro, now including a comparison of st_dev. Don't leak a file descriptor in _lock_file(), when flock fails. Add SUN's LDOM virtual block device to filters Split metadata-external.h out from metadata.h for the tools to use. diff --git a/lib/filters/filter-persistent.c b/lib/filters/filter-persistent.c index 91e71478e..f07b246f8 100644 --- a/lib/filters/filter-persistent.c +++ b/lib/filters/filter-persistent.c @@ -208,7 +208,7 @@ int persistent_filter_dump(struct dev_filter *f) goto out; } - if (!memcmp(&info.st_ino, &info2.st_ino, sizeof(ino_t))) + if (is_same_inode(info, info2)) break; fcntl_unlock_file(lockfd); diff --git a/lib/locking/file_locking.c b/lib/locking/file_locking.c index 1ac76c174..7361a78d4 100644 --- a/lib/locking/file_locking.c +++ b/lib/locking/file_locking.c @@ -64,7 +64,7 @@ static int _release_lock(const char *file, int unlock) if (!flock(ll->lf, LOCK_NB | LOCK_EX) && !stat(ll->res, &buf1) && !fstat(ll->lf, &buf2) && - !memcmp(&buf1.st_ino, &buf2.st_ino, sizeof(ino_t))) + is_same_inode(buf1, buf2)) if (unlink(ll->res)) log_sys_error("unlink", ll->res); @@ -190,7 +190,7 @@ static int _lock_file(const char *file, int flags) } if (!stat(ll->res, &buf1) && !fstat(ll->lf, &buf2) && - !memcmp(&buf1.st_ino, &buf2.st_ino, sizeof(ino_t))) + is_same_inode(buf1, buf2)) break; } while (!(flags & LCK_NONBLOCK)); diff --git a/lib/misc/lvm-file.h b/lib/misc/lvm-file.h index 00c807339..f5da9a9ac 100644 --- a/lib/misc/lvm-file.h +++ b/lib/misc/lvm-file.h @@ -52,4 +52,8 @@ void sync_dir(const char *file); int fcntl_lock_file(const char *file, short lock_type, int warn_if_read_only); void fcntl_unlock_file(int lockfd); +#define is_same_inode(buf1, buf2) \ + ((buf1).st_ino == (buf2).st_ino && \ + (buf1).st_dev == (buf2).st_dev) + #endif -- 2.43.5