2
0
mirror of https://github.com/checkpoint-restore/criu synced 2025-08-29 05:18:00 +00:00

util: Update kdev_to_odev to respect BITS_PER_LONG

Depending on BITS_PER_LONG userspace representation of dev_t
may vary, so we need to choose proper encoding.

Signed-off-by: Igor Sukhih <igor@parallels.com>
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
This commit is contained in:
Igor Sukhih 2013-11-01 17:40:54 +04:00 committed by Pavel Emelyanov
parent 59c43e481e
commit 647207714a

View File

@ -220,9 +220,17 @@ static inline u32 kdev_minor(u32 kdev)
static inline dev_t kdev_to_odev(u32 kdev)
{
/*
* New kernels envcode devices in a new form
* New kernels encode devices in a new form.
* See kernel's fs/stat.c for details, there
* choose_32_64 helpers which are the key.
*/
return (kdev_major(kdev) << 8) | kdev_minor(kdev);
unsigned major = kdev_major(kdev);
unsigned minor = kdev_minor(kdev);
#if BITS_PER_LONG == 32
return (major << 8) | minor;
#else
return (minor & 0xff) | (major << 8) | ((minor & ~0xff) << 12);
#endif
}
int copy_file(int fd_in, int fd_out, size_t bytes);