[CRIU] [PATCH] [RFC] locks: fix up a device returned by stat() for btrfs
Andrew Vagin
avagin at openvz.org
Wed Sep 3 04:54:41 PDT 2014
BTRFS returns subvolume dev-id instead of superblock dev-id,
in such case return device obtained from mountinfo (ie subvolume0).
Reported-by: Mr Jenkins
Signed-off-by: Andrew Vagin <avagin at openvz.org>
---
file-lock.c | 16 +++++++++++++++-
1 file changed, 15 insertions(+), 1 deletion(-)
diff --git a/file-lock.c b/file-lock.c
index b6a511f..f380010 100644
--- a/file-lock.c
+++ b/file-lock.c
@@ -10,6 +10,8 @@
#include "fdset.h"
#include "files.h"
#include "image.h"
+#include "mount.h"
+#include "proc_parse.h"
#include "servicefd.h"
#include "file-lock.h"
#include "parasite.h"
@@ -123,8 +125,20 @@ err:
static inline bool lock_file_match(struct file_lock *fl, struct fd_parms *p)
{
+ struct mount_info *m;
+ dev_t dev = p->stat.st_dev;
+
+ /* Get the right devices for BTRFS. Look at phys_stat_resolve_dev()
+ * for more details.
+ */
+ if (p->mnt_id != -1) {
+ m = lookup_mnt_id(p->mnt_id);
+ BUG_ON(m == NULL);
+ dev = kdev_to_odev(m->s_dev);
+ }
+
return fl->i_no == p->stat.st_ino &&
- makedev(fl->maj, fl->min) == p->stat.st_dev;
+ makedev(fl->maj, fl->min) == dev;
}
static int lock_check_fd(int lfd, struct file_lock *fl)
--
1.9.3
More information about the CRIU
mailing list