Skip to content

Commit

Permalink
Configure XFS max-retry=1 max-timeout=5 for EIO/ENOSPC errors
Browse files Browse the repository at this point in the history
Signed-off-by: Bala.FA <[email protected]>
  • Loading branch information
balamurugana committed Apr 13, 2023
1 parent de23fc4 commit 3ffafe5
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 2 deletions.
1 change: 1 addition & 0 deletions apparmor.profile
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ profile directpv flags=(attach_disconnected,mediate_deleted) {
/var/lib/directpv/** w,
/var/lib/kubelet/** w,
/csi/** w,
/sys/fs/xfs/**/error/metadata/{EIO,ENOSPC}/retry_timeout_seconds rw,

# only a limited set of binaries can be executed
/usr/sbin/mkfs ix,
Expand Down
38 changes: 36 additions & 2 deletions pkg/xfs/mount_linux.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,17 +20,51 @@ package xfs

import (
"errors"
"fmt"
"os"
"path"

"github.com/minio/directpv/pkg/sys"
)

func mount(device, target string) error {
if err := os.Mkdir(target, 0o777); err != nil && !errors.Is(err, os.ErrExist) {
if err := sys.Mkdir(target, 0o777); err != nil && !errors.Is(err, os.ErrExist) {
return err
}

return sys.Mount(device, target, "xfs", []string{"noatime"}, "prjquota")
if err := sys.Mount(device, target, "xfs", []string{"noatime"}, "prjquota"); err != nil {
return err
}

name := path.Base(device)
if name == "/" || name == "." {
return fmt.Errorf("unable to get device name from device %v", device)
}

writeFile := func(name, value string) error {
if _, err := os.Stat(name); err != nil {
return nil
}
return os.WriteFile(name, []byte(value), 0o644)
}

if err := writeFile("/sys/fs/xfs/"+name+"/error/metadata/EIO/max_retries", "1"); err != nil {
return fmt.Errorf("unable to set EIO max_retires device %v; %w", name, err)
}

if err := writeFile("/sys/fs/xfs/"+name+"/error/metadata/EIO/retry_timeout_seconds", "5"); err != nil {
return fmt.Errorf("unable to set EIO retry_timeout_seconds for device %v; %w", name, err)
}

if err := writeFile("/sys/fs/xfs/"+name+"/error/metadata/ENOSPC/max_retries", "1"); err != nil {
return fmt.Errorf("unable to set ENOSPC max_retires for device %v; %w", name, err)
}

if err := writeFile("/sys/fs/xfs/"+name+"/error/metadata/ENOSPC/retry_timeout_seconds", "5"); err != nil {
return fmt.Errorf("unable to set ENOSPC retry_timeout_seconds for device %v; %w", name, err)
}

return nil
}

func bindMount(source, target string, readOnly bool) error {
Expand Down

0 comments on commit 3ffafe5

Please sign in to comment.