1
0
Fork 0
mirror of https://github.com/moby/moby.git synced 2022-11-09 12:21:53 -05:00

Update quota support to treat permission error as not supported

When initializing graphdrivers without root a permission warning
log is given due to lack of permission to create a device. This
error should be treated the same as quota not supported.

Signed-off-by: Derek McGowan <derek@mcgstyle.net>
This commit is contained in:
Derek McGowan 2019-03-13 11:22:13 -07:00
parent 258edd715d
commit 1217819f07
No known key found for this signature in database
GPG key ID: F58C5D0A4405ACDB

View file

@ -59,6 +59,7 @@ import (
"unsafe"
rsystem "github.com/opencontainers/runc/libcontainer/system"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
"golang.org/x/sys/unix"
)
@ -208,8 +209,8 @@ func setProjectQuota(backingFsBlockDev string, projectID uint32, quota Quota) er
uintptr(unsafe.Pointer(cs)), uintptr(d.d_id),
uintptr(unsafe.Pointer(&d)), 0, 0)
if errno != 0 {
return fmt.Errorf("Failed to set quota limit for projid %d on %s: %v",
projectID, backingFsBlockDev, errno.Error())
return errors.Wrapf(errno, "failed to set quota limit for projid %d on %s",
projectID, backingFsBlockDev)
}
return nil
@ -235,8 +236,8 @@ func (q *Control) GetQuota(targetPath string, quota *Quota) error {
uintptr(unsafe.Pointer(cs)), uintptr(C.__u32(projectID)),
uintptr(unsafe.Pointer(&d)), 0, 0)
if errno != 0 {
return fmt.Errorf("Failed to get quota limit for projid %d on %s: %v",
projectID, q.backingFsBlockDev, errno.Error())
return errors.Wrapf(errno, "Failed to get quota limit for projid %d on %s",
projectID, q.backingFsBlockDev)
}
quota.Size = uint64(d.d_blk_hardlimit) * 512
@ -255,7 +256,7 @@ func getProjectID(targetPath string) (uint32, error) {
_, _, errno := unix.Syscall(unix.SYS_IOCTL, getDirFd(dir), C.FS_IOC_FSGETXATTR,
uintptr(unsafe.Pointer(&fsx)))
if errno != 0 {
return 0, fmt.Errorf("Failed to get projid for %s: %v", targetPath, errno.Error())
return 0, errors.Wrapf(errno, "failed to get projid for %s", targetPath)
}
return uint32(fsx.fsx_projid), nil
@ -273,14 +274,14 @@ func setProjectID(targetPath string, projectID uint32) error {
_, _, errno := unix.Syscall(unix.SYS_IOCTL, getDirFd(dir), C.FS_IOC_FSGETXATTR,
uintptr(unsafe.Pointer(&fsx)))
if errno != 0 {
return fmt.Errorf("Failed to get projid for %s: %v", targetPath, errno.Error())
return errors.Wrapf(errno, "failed to get projid for %s", targetPath)
}
fsx.fsx_projid = C.__u32(projectID)
fsx.fsx_xflags |= C.FS_XFLAG_PROJINHERIT
_, _, errno = unix.Syscall(unix.SYS_IOCTL, getDirFd(dir), C.FS_IOC_FSSETXATTR,
uintptr(unsafe.Pointer(&fsx)))
if errno != 0 {
return fmt.Errorf("Failed to set projid for %s: %v", targetPath, errno.Error())
return errors.Wrapf(errno, "failed to set projid for %s", targetPath)
}
return nil
@ -323,7 +324,7 @@ func openDir(path string) (*C.DIR, error) {
dir := C.opendir(Cpath)
if dir == nil {
return nil, fmt.Errorf("Can't open dir")
return nil, fmt.Errorf("failed to open dir")
}
return dir, nil
}
@ -355,11 +356,11 @@ func makeBackingFsDev(home string) (string, error) {
case nil:
return backingFsBlockDev, nil
case unix.ENOSYS:
case unix.ENOSYS, unix.EPERM:
return "", ErrQuotaNotSupported
default:
return "", fmt.Errorf("Failed to mknod %s: %v", backingFsBlockDev, err)
return "", errors.Wrapf(err, "failed to mknod %s", backingFsBlockDev)
}
}