mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-07-05 11:36:56 +00:00
Merge pull request #4743 from yuchen0cc/main
mount: support checking multiple kinds of block device driver
This commit is contained in:
commit
e2c6b8ae6e
@ -1319,12 +1319,12 @@ func (c *Container) hotplugDrive(ctx context.Context) error {
|
||||
"mount-point": dev.mountPoint,
|
||||
}).Info("device details")
|
||||
|
||||
isDM, err := checkStorageDriver(dev.major, dev.minor)
|
||||
isBD, err := checkStorageDriver(dev.major, dev.minor)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if !isDM {
|
||||
if !isBD {
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -194,14 +194,14 @@ func getDeviceForPath(path string) (device, error) {
|
||||
return dev, nil
|
||||
}
|
||||
|
||||
var blockFormatTemplate = "/sys/dev/block/%d:%d/dm"
|
||||
var blockFormatTemplate = "/sys/dev/block/%d:%d/"
|
||||
|
||||
var checkStorageDriver = isDeviceMapper
|
||||
var checkStorageDriver = isBlockDevice
|
||||
|
||||
// isDeviceMapper checks if the device with the major and minor numbers is a devicemapper block device
|
||||
func isDeviceMapper(major, minor int) (bool, error) {
|
||||
// isBlockDevice checks if the device with the major and minor numbers is a block device
|
||||
func isBlockDevice(major, minor int) (bool, error) {
|
||||
|
||||
//Check if /sys/dev/block/${major}-${minor}/dm exists
|
||||
//Check if /sys/dev/block/${major}-${minor}/ exists
|
||||
sysPath := fmt.Sprintf(blockFormatTemplate, major, minor)
|
||||
|
||||
_, err := os.Stat(sysPath)
|
||||
@ -209,9 +209,9 @@ func isDeviceMapper(major, minor int) (bool, error) {
|
||||
return true, nil
|
||||
} else if os.IsNotExist(err) {
|
||||
return false, nil
|
||||
} else {
|
||||
return false, err
|
||||
}
|
||||
|
||||
return false, err
|
||||
}
|
||||
|
||||
const mountPerm = os.FileMode(0755)
|
||||
|
@ -305,20 +305,31 @@ func TestGetDeviceForPathValidMount(t *testing.T) {
|
||||
assert.Equal(dev.mountPoint, expected)
|
||||
}
|
||||
|
||||
func TestIsDeviceMapper(t *testing.T) {
|
||||
func TestIsBlockDevice(t *testing.T) {
|
||||
assert := assert.New(t)
|
||||
|
||||
// known major, minor for /dev/tty
|
||||
major := 5
|
||||
minor := 0
|
||||
|
||||
isDM, err := isDeviceMapper(major, minor)
|
||||
isBD, err := isBlockDevice(major, minor)
|
||||
assert.NoError(err)
|
||||
assert.False(isDM)
|
||||
assert.False(isBD)
|
||||
|
||||
// fake the block device format
|
||||
blockFormatTemplateOld := blockFormatTemplate
|
||||
defer func() {
|
||||
blockFormatTemplate = blockFormatTemplateOld
|
||||
}()
|
||||
|
||||
blockFormatTemplate = "/sys/dev/char/%d:%d"
|
||||
isDM, err = isDeviceMapper(major, minor)
|
||||
isBD, err = isBlockDevice(major, minor)
|
||||
assert.NoError(err)
|
||||
assert.True(isDM)
|
||||
assert.True(isBD)
|
||||
|
||||
// invalid template
|
||||
blockFormatTemplate = "\000/sys/dev/char/%d:%d"
|
||||
isBD, err = isBlockDevice(major, minor)
|
||||
assert.Error(err)
|
||||
assert.False(isBD)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user