[lxc-devel] [lxd/master] Fix handling of major and minor numbers in device IDs
tejeez on Github
lxc-bot at linuxcontainers.org
Tue Aug 29 17:04:17 UTC 2017
A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 529 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20170829/5cb99ee6/attachment.bin>
-------------- next part --------------
From 62d951adfc55f210761ceaa8db55478afddda57d Mon Sep 17 00:00:00 2001
From: Tatu Peltola <tatu.peltola at gmail.com>
Date: Tue, 29 Aug 2017 19:32:53 +0300
Subject: [PATCH] Fix handling of major and minor numbers in device IDs
Signed-off-by: Tatu Peltola <tatu.peltola at gmail.com>
---
lxd/devices.go | 12 ++++++------
shared/util_linux.go | 12 ++++++++++--
2 files changed, 16 insertions(+), 8 deletions(-)
diff --git a/lxd/devices.go b/lxd/devices.go
index 05cbf0f90..a4290c7f7 100644
--- a/lxd/devices.go
+++ b/lxd/devices.go
@@ -243,8 +243,8 @@ func deviceLoadGpu() ([]gpuDevice, []nvidiaGpuDevices, error) {
return nil, nil, err
}
tmpGpu.nvidia.path = nvidiaPath
- tmpGpu.nvidia.major = int(stat.Rdev / 256)
- tmpGpu.nvidia.minor = int(stat.Rdev % 256)
+ tmpGpu.nvidia.major = shared.Major(stat.Rdev)
+ tmpGpu.nvidia.minor = shared.Minor(stat.Rdev)
tmpGpu.nvidia.id = strconv.Itoa(tmpGpu.nvidia.minor)
}
gpus = append(gpus, tmpGpu)
@@ -276,8 +276,8 @@ func deviceLoadGpu() ([]gpuDevice, []nvidiaGpuDevices, error) {
}
tmpNividiaGpu := nvidiaGpuDevices{
path: nvidiaPath,
- major: int(stat.Rdev / 256),
- minor: int(stat.Rdev % 256),
+ major: shared.Major(stat.Rdev),
+ minor: shared.Minor(stat.Rdev),
}
nvidiaDevices = append(nvidiaDevices, tmpNividiaGpu)
}
@@ -914,8 +914,8 @@ func deviceGetAttributes(path string) (string, int, int, error) {
}
// Return the device information
- major := int(stat.Rdev / 256)
- minor := int(stat.Rdev % 256)
+ major := shared.Major(stat.Rdev)
+ minor := shared.Minor(stat.Rdev)
return dType, major, minor, nil
}
diff --git a/shared/util_linux.go b/shared/util_linux.go
index 33747f191..44935a2b7 100644
--- a/shared/util_linux.go
+++ b/shared/util_linux.go
@@ -448,6 +448,14 @@ again:
// --- pure Go functions ---
+func Major(dev uint64) int {
+ return int(((dev >> 8) & 0xfff) | ((dev >> 32) & (0xfffff000)))
+}
+
+func Minor(dev uint64) int {
+ return int((dev & 0xff) | ((dev >> 12) & (0xfff00)))
+}
+
func GetFileStat(p string) (uid int, gid int, major int, minor int,
inode uint64, nlink int, err error) {
var stat syscall.Stat_t
@@ -462,8 +470,8 @@ func GetFileStat(p string) (uid int, gid int, major int, minor int,
major = -1
minor = -1
if stat.Mode&syscall.S_IFBLK != 0 || stat.Mode&syscall.S_IFCHR != 0 {
- major = int(stat.Rdev / 256)
- minor = int(stat.Rdev % 256)
+ major = Major(stat.Rdev)
+ minor = Minor(stat.Rdev)
}
return
More information about the lxc-devel
mailing list