@@ -21,16 +21,44 @@ package xfs
21
21
import (
22
22
"errors"
23
23
"os"
24
+ "path"
24
25
25
26
"github.com/minio/directpv/pkg/sys"
27
+ "k8s.io/klog/v2"
26
28
)
27
29
28
30
func mount (device , target string ) error {
29
- if err := os .Mkdir (target , 0o777 ); err != nil && ! errors .Is (err , os .ErrExist ) {
31
+ if err := sys .Mkdir (target , 0o777 ); err != nil && ! errors .Is (err , os .ErrExist ) {
30
32
return err
31
33
}
32
34
33
- return sys .Mount (device , target , "xfs" , []string {"noatime" }, "prjquota" )
35
+ if err := sys .Mount (device , target , "xfs" , []string {"noatime" }, "prjquota" ); err != nil {
36
+ return err
37
+ }
38
+
39
+ name := path .Base (device )
40
+ if name == "/" || name == "." {
41
+ klog .Errorf ("unable to get device name from device %v" , device )
42
+ return nil
43
+ }
44
+
45
+ if err := os .WriteFile ("/sys/fs/xfs/" + name + "/error/metadata/EIO/max_retries" , []byte ("1" ), 0o644 ); err != nil {
46
+ klog .ErrorS (err , "unable to set EIO max_retires device" , "name" , name )
47
+ }
48
+
49
+ if err := os .WriteFile ("/sys/fs/xfs/" + name + "/error/metadata/EIO/retry_timeout_seconds" , []byte ("5" ), 0o644 ); err != nil {
50
+ klog .ErrorS (err , "unable to set EIO retry_timeout_seconds for device" , "name" , name )
51
+ }
52
+
53
+ if err := os .WriteFile ("/sys/fs/xfs/" + name + "/error/metadata/ENOSPC/max_retries" , []byte ("1" ), 0o644 ); err != nil {
54
+ klog .ErrorS (err , "unable to set ENOSPC max_retires device" , "name" , name )
55
+ }
56
+
57
+ if err := os .WriteFile ("/sys/fs/xfs/" + name + "/error/metadata/ENOSPC/retry_timeout_seconds" , []byte ("5" ), 0o644 ); err != nil {
58
+ klog .ErrorS (err , "unable to set ENOSPC retry_timeout_seconds for device" , "name" , name )
59
+ }
60
+
61
+ return nil
34
62
}
35
63
36
64
func bindMount (source , target string , readOnly bool ) error {
0 commit comments