kata-runtime: fix kata-runtime skip read lines in /proc/mounts
Signed-off-by: jikui <jikui2@huawei.com>
This commit is contained in:
parent
6ff1f39a5c
commit
96945d5af5
@ -2,7 +2,7 @@
|
|||||||
%global debug_package %{nil}
|
%global debug_package %{nil}
|
||||||
|
|
||||||
%define VERSION 2.1.0
|
%define VERSION 2.1.0
|
||||||
%define RELEASE 6
|
%define RELEASE 7
|
||||||
|
|
||||||
Name: kata-containers
|
Name: kata-containers
|
||||||
Version: %{VERSION}
|
Version: %{VERSION}
|
||||||
@ -108,6 +108,12 @@ strip %{buildroot}/usr/bin/containerd-shim-kata-v2
|
|||||||
%doc
|
%doc
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Mon Oct 15 2021 jikui <jikui2@huawei.com> - 2.1.0-7
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:fix kata-runtime skip read lines in /proc/mounts
|
||||||
|
|
||||||
* Fri Oct 5 2021 jikui <jikui2@huawei.com> - 2.1.0-6
|
* Fri Oct 5 2021 jikui <jikui2@huawei.com> - 2.1.0-6
|
||||||
- Type:bugfix
|
- Type:bugfix
|
||||||
- ID:NA
|
- ID:NA
|
||||||
|
|||||||
@ -0,0 +1,115 @@
|
|||||||
|
From c355523761598154653466033a1d88643d3fd3df Mon Sep 17 00:00:00 2001
|
||||||
|
From: jikui <jikui2@huawei.com>
|
||||||
|
Date: Thu, 4 Nov 2021 20:27:22 +0800
|
||||||
|
Subject: [PATCH 2/8] kata-runtime: fix kata-runtime skip read lines in
|
||||||
|
/proc/mounts file problem
|
||||||
|
|
||||||
|
Signed-off-by: jikui <jikui2@huawei.com>
|
||||||
|
---
|
||||||
|
.../virtcontainers/utils/utils_linux.go | 61 +++++++++++--------
|
||||||
|
1 file changed, 36 insertions(+), 25 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/runtime/virtcontainers/utils/utils_linux.go b/src/runtime/virtcontainers/utils/utils_linux.go
|
||||||
|
index 3c14e0c..c6dbd0a 100644
|
||||||
|
--- a/src/runtime/virtcontainers/utils/utils_linux.go
|
||||||
|
+++ b/src/runtime/virtcontainers/utils/utils_linux.go
|
||||||
|
@@ -7,15 +7,18 @@ package utils
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bufio"
|
||||||
|
+ "bytes"
|
||||||
|
"crypto/rand"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
+ "io/ioutil"
|
||||||
|
"math/big"
|
||||||
|
"os"
|
||||||
|
"strings"
|
||||||
|
"syscall"
|
||||||
|
"unsafe"
|
||||||
|
|
||||||
|
+ "github.com/sirupsen/logrus"
|
||||||
|
"golang.org/x/sys/unix"
|
||||||
|
)
|
||||||
|
|
||||||
|
@@ -93,6 +96,7 @@ const (
|
||||||
|
procMountsFile = "/proc/mounts"
|
||||||
|
|
||||||
|
fieldsPerLine = 6
|
||||||
|
+ maxRetryTimes = 5
|
||||||
|
vfioAPSysfsDir = "vfio_ap"
|
||||||
|
)
|
||||||
|
|
||||||
|
@@ -110,37 +114,44 @@ func GetDevicePathAndFsType(mountPoint string) (devicePath, fsType string, err e
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
- var file *os.File
|
||||||
|
+ var retry int = 0
|
||||||
|
|
||||||
|
- file, err = os.Open(procMountsFile)
|
||||||
|
- if err != nil {
|
||||||
|
- return
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- defer file.Close()
|
||||||
|
-
|
||||||
|
- reader := bufio.NewReader(file)
|
||||||
|
- for {
|
||||||
|
- var line string
|
||||||
|
-
|
||||||
|
- line, err = reader.ReadString('\n')
|
||||||
|
- if err == io.EOF {
|
||||||
|
- err = fmt.Errorf("Mount %s not found", mountPoint)
|
||||||
|
+ for retry <= maxRetryTimes {
|
||||||
|
+ var content []byte
|
||||||
|
+ content, err = ioutil.ReadFile(procMountsFile)
|
||||||
|
+ if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
-
|
||||||
|
- fields := strings.Fields(line)
|
||||||
|
- if len(fields) != fieldsPerLine {
|
||||||
|
- err = fmt.Errorf("Incorrect no of fields (expected %d, got %d)) :%s", fieldsPerLine, len(fields), line)
|
||||||
|
- return
|
||||||
|
+ bytesReader := bytes.NewReader(content)
|
||||||
|
+ reader := bufio.NewReader(bytesReader)
|
||||||
|
+
|
||||||
|
+ for {
|
||||||
|
+ var line string
|
||||||
|
+
|
||||||
|
+ line, err = reader.ReadString('\n')
|
||||||
|
+ if err == io.EOF {
|
||||||
|
+ err = fmt.Errorf("Mount %s not found", mountPoint)
|
||||||
|
+ break
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ fields := strings.Fields(line)
|
||||||
|
+ if len(fields) != fieldsPerLine {
|
||||||
|
+ err = fmt.Errorf("Incorrect no of fields (expected %d, got %d)) :%s", fieldsPerLine, len(fields), line)
|
||||||
|
+ return
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if mountPoint == fields[procPathIndex] {
|
||||||
|
+ devicePath = fields[procDeviceIndex]
|
||||||
|
+ fsType = fields[procTypeIndex]
|
||||||
|
+ return
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
-
|
||||||
|
- if mountPoint == fields[procPathIndex] {
|
||||||
|
- devicePath = fields[procDeviceIndex]
|
||||||
|
- fsType = fields[procTypeIndex]
|
||||||
|
- return
|
||||||
|
+ retry = retry + 1
|
||||||
|
+ if retry <= maxRetryTimes {
|
||||||
|
+ logrus.Warnf("can not find %s in %s, retry %d times again......", mountPoint, procMountsFile, retry)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
+ return "", "", fmt.Errorf("retry %d times fail to get devicePath adn fs type", maxRetryTimes)
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsAPVFIOMediatedDevice decides whether a device is a VFIO-AP device
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
||||||
@ -7,3 +7,4 @@
|
|||||||
0007-kata-containers-support-with-iSulad.patch
|
0007-kata-containers-support-with-iSulad.patch
|
||||||
0008-kata-containers-adpat-with-iSulad.patch
|
0008-kata-containers-adpat-with-iSulad.patch
|
||||||
0009-kata-containers-fix-kata-runtime-hungs-when-qemu-proces.patch
|
0009-kata-containers-fix-kata-runtime-hungs-when-qemu-proces.patch
|
||||||
|
0010-kata-containers-fix-kata-runtime-skip-read-lines-in-pro.patch
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user