mirror of
https://github.com/netbirdio/gvisor.git
synced 2026-05-22 17:12:49 -07:00
[syserror] Change syserror to linuxerr for E2BIG, EADDRINUSE, and EINVAL
Remove three syserror entries duplicated in linuxerr. Because of the linuxerr.Equals method, this is a mere change of return values from syserror to linuxerr definitions. Done with only these three errnos as CLs removing all grow to a significantly large size. PiperOrigin-RevId: 382173835
This commit is contained in:
committed by
gVisor bot
parent
d205926f23
commit
54b71221c0
@@ -44,7 +44,7 @@ func BenchmarkAssignLinuxerr(b *testing.B) {
|
||||
|
||||
func BenchmarkAssignSyserror(b *testing.B) {
|
||||
for i := b.N; i > 0; i-- {
|
||||
globalError = syserror.EINVAL
|
||||
globalError = linuxerr.ENOMSG
|
||||
}
|
||||
}
|
||||
|
||||
@@ -72,7 +72,7 @@ func BenchmarkCompareSyserror(b *testing.B) {
|
||||
globalError = syserror.EAGAIN
|
||||
j := 0
|
||||
for i := b.N; i > 0; i-- {
|
||||
if globalError == syserror.EINVAL {
|
||||
if globalError == syserror.EACCES {
|
||||
j++
|
||||
}
|
||||
}
|
||||
@@ -113,7 +113,7 @@ func BenchmarkSwitchSyserror(b *testing.B) {
|
||||
j := 0
|
||||
for i := b.N; i > 0; i-- {
|
||||
switch globalError {
|
||||
case syserror.EINVAL:
|
||||
case syserror.EACCES:
|
||||
j++
|
||||
case syserror.EINTR:
|
||||
j += 2
|
||||
|
||||
@@ -28,6 +28,7 @@ go_library(
|
||||
"//pkg/abi/linux",
|
||||
"//pkg/context",
|
||||
"//pkg/cpuid",
|
||||
"//pkg/errors/linuxerr",
|
||||
"//pkg/hostarch",
|
||||
"//pkg/log",
|
||||
"//pkg/marshal",
|
||||
|
||||
@@ -22,6 +22,7 @@ import (
|
||||
|
||||
"gvisor.dev/gvisor/pkg/abi/linux"
|
||||
"gvisor.dev/gvisor/pkg/cpuid"
|
||||
"gvisor.dev/gvisor/pkg/errors/linuxerr"
|
||||
"gvisor.dev/gvisor/pkg/log"
|
||||
"gvisor.dev/gvisor/pkg/sentry/arch/fpu"
|
||||
rpb "gvisor.dev/gvisor/pkg/sentry/arch/registers_go_proto"
|
||||
@@ -237,7 +238,7 @@ func (s *State) PtraceGetRegSet(regset uintptr, dst io.Writer, maxlen int) (int,
|
||||
}
|
||||
return s.PtraceGetRegs(dst)
|
||||
default:
|
||||
return 0, syserror.EINVAL
|
||||
return 0, linuxerr.EINVAL
|
||||
}
|
||||
}
|
||||
|
||||
@@ -250,7 +251,7 @@ func (s *State) PtraceSetRegSet(regset uintptr, src io.Reader, maxlen int) (int,
|
||||
}
|
||||
return s.PtraceSetRegs(src)
|
||||
default:
|
||||
return 0, syserror.EINVAL
|
||||
return 0, linuxerr.EINVAL
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -23,6 +23,7 @@ import (
|
||||
"golang.org/x/sys/unix"
|
||||
"gvisor.dev/gvisor/pkg/abi/linux"
|
||||
"gvisor.dev/gvisor/pkg/cpuid"
|
||||
"gvisor.dev/gvisor/pkg/errors/linuxerr"
|
||||
"gvisor.dev/gvisor/pkg/log"
|
||||
"gvisor.dev/gvisor/pkg/sentry/arch/fpu"
|
||||
rpb "gvisor.dev/gvisor/pkg/sentry/arch/registers_go_proto"
|
||||
@@ -361,7 +362,7 @@ func (s *State) PtraceGetRegSet(regset uintptr, dst io.Writer, maxlen int) (int,
|
||||
case _NT_X86_XSTATE:
|
||||
return s.fpState.PtraceGetXstateRegs(dst, maxlen, s.FeatureSet)
|
||||
default:
|
||||
return 0, syserror.EINVAL
|
||||
return 0, linuxerr.EINVAL
|
||||
}
|
||||
}
|
||||
|
||||
@@ -378,7 +379,7 @@ func (s *State) PtraceSetRegSet(regset uintptr, src io.Reader, maxlen int) (int,
|
||||
case _NT_X86_XSTATE:
|
||||
return s.fpState.PtraceSetXstateRegs(src, maxlen, s.FeatureSet)
|
||||
default:
|
||||
return 0, syserror.EINVAL
|
||||
return 0, linuxerr.EINVAL
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@ go_library(
|
||||
deps = [
|
||||
"//pkg/abi/linux",
|
||||
"//pkg/context",
|
||||
"//pkg/errors/linuxerr",
|
||||
"//pkg/hostarch",
|
||||
"//pkg/sentry/arch",
|
||||
"//pkg/sentry/fsimpl/devtmpfs",
|
||||
|
||||
@@ -18,6 +18,7 @@ package tundev
|
||||
import (
|
||||
"gvisor.dev/gvisor/pkg/abi/linux"
|
||||
"gvisor.dev/gvisor/pkg/context"
|
||||
"gvisor.dev/gvisor/pkg/errors/linuxerr"
|
||||
"gvisor.dev/gvisor/pkg/hostarch"
|
||||
"gvisor.dev/gvisor/pkg/sentry/arch"
|
||||
"gvisor.dev/gvisor/pkg/sentry/fsimpl/devtmpfs"
|
||||
@@ -81,7 +82,7 @@ func (fd *tunFD) Ioctl(ctx context.Context, uio usermem.IO, args arch.SyscallArg
|
||||
}
|
||||
stack, ok := t.NetworkContext().(*netstack.Stack)
|
||||
if !ok {
|
||||
return 0, syserror.EINVAL
|
||||
return 0, linuxerr.EINVAL
|
||||
}
|
||||
|
||||
var req linux.IFReq
|
||||
|
||||
@@ -162,7 +162,7 @@ func doCopyUp(ctx context.Context, d *Dirent) error {
|
||||
// then try to take copyMu for writing here, we'd deadlock.
|
||||
t := d.Inode.overlay.lower.StableAttr.Type
|
||||
if t != RegularFile && t != Directory && t != Symlink {
|
||||
return syserror.EINVAL
|
||||
return linuxerr.EINVAL
|
||||
}
|
||||
|
||||
// Wait to get exclusive access to the upper Inode.
|
||||
|
||||
@@ -18,6 +18,7 @@ go_library(
|
||||
deps = [
|
||||
"//pkg/abi/linux",
|
||||
"//pkg/context",
|
||||
"//pkg/errors/linuxerr",
|
||||
"//pkg/hostarch",
|
||||
"//pkg/rand",
|
||||
"//pkg/safemem",
|
||||
|
||||
@@ -17,6 +17,7 @@ package dev
|
||||
import (
|
||||
"gvisor.dev/gvisor/pkg/abi/linux"
|
||||
"gvisor.dev/gvisor/pkg/context"
|
||||
"gvisor.dev/gvisor/pkg/errors/linuxerr"
|
||||
"gvisor.dev/gvisor/pkg/hostarch"
|
||||
"gvisor.dev/gvisor/pkg/sentry/arch"
|
||||
"gvisor.dev/gvisor/pkg/sentry/fs"
|
||||
@@ -102,7 +103,7 @@ func (n *netTunFileOperations) Ioctl(ctx context.Context, file *fs.File, io user
|
||||
}
|
||||
stack, ok := t.NetworkContext().(*netstack.Stack)
|
||||
if !ok {
|
||||
return 0, syserror.EINVAL
|
||||
return 0, linuxerr.EINVAL
|
||||
}
|
||||
|
||||
var req linux.IFReq
|
||||
|
||||
@@ -964,7 +964,7 @@ func (d *Dirent) mount(ctx context.Context, inode *Inode) (newChild *Dirent, err
|
||||
//
|
||||
// See Linux equivalent in fs/namespace.c:do_add_mount.
|
||||
if IsSymlink(inode.StableAttr) {
|
||||
return nil, syserror.EINVAL
|
||||
return nil, linuxerr.EINVAL
|
||||
}
|
||||
|
||||
// Dirent that'll replace d.
|
||||
|
||||
@@ -39,6 +39,7 @@ go_test(
|
||||
library = ":fdpipe",
|
||||
deps = [
|
||||
"//pkg/context",
|
||||
"//pkg/errors/linuxerr",
|
||||
"//pkg/fd",
|
||||
"//pkg/fdnotifier",
|
||||
"//pkg/hostarch",
|
||||
|
||||
@@ -21,14 +21,14 @@ import (
|
||||
"testing"
|
||||
|
||||
"golang.org/x/sys/unix"
|
||||
"gvisor.dev/gvisor/pkg/errors/linuxerr"
|
||||
"gvisor.dev/gvisor/pkg/fd"
|
||||
"gvisor.dev/gvisor/pkg/fdnotifier"
|
||||
"gvisor.dev/gvisor/pkg/hostarch"
|
||||
"gvisor.dev/gvisor/pkg/sentry/contexttest"
|
||||
"gvisor.dev/gvisor/pkg/sentry/fs"
|
||||
"gvisor.dev/gvisor/pkg/syserror"
|
||||
"gvisor.dev/gvisor/pkg/usermem"
|
||||
|
||||
"gvisor.dev/gvisor/pkg/hostarch"
|
||||
)
|
||||
|
||||
func singlePipeFD() (int, error) {
|
||||
@@ -214,7 +214,7 @@ func TestPipeRequest(t *testing.T) {
|
||||
{
|
||||
desc: "Fsync on pipe returns EINVAL",
|
||||
context: &Fsync{},
|
||||
err: unix.EINVAL,
|
||||
err: linuxerr.EINVAL,
|
||||
},
|
||||
{
|
||||
desc: "Seek on pipe returns ESPIPE",
|
||||
|
||||
@@ -18,6 +18,7 @@ import (
|
||||
"io"
|
||||
|
||||
"gvisor.dev/gvisor/pkg/context"
|
||||
"gvisor.dev/gvisor/pkg/errors/linuxerr"
|
||||
"gvisor.dev/gvisor/pkg/refs"
|
||||
"gvisor.dev/gvisor/pkg/sentry/arch"
|
||||
"gvisor.dev/gvisor/pkg/sentry/memmap"
|
||||
@@ -417,7 +418,7 @@ func (f *overlayFileOperations) FifoSize(ctx context.Context, overlayFile *File)
|
||||
err = f.onTop(ctx, overlayFile, func(file *File, ops FileOperations) error {
|
||||
sz, ok := ops.(FifoSizer)
|
||||
if !ok {
|
||||
return syserror.EINVAL
|
||||
return linuxerr.EINVAL
|
||||
}
|
||||
rv, err = sz.FifoSize(ctx, file)
|
||||
return err
|
||||
@@ -432,11 +433,11 @@ func (f *overlayFileOperations) SetFifoSize(size int64) (rv int64, err error) {
|
||||
|
||||
if f.upper == nil {
|
||||
// Named pipes cannot be copied up and changes to the lower are prohibited.
|
||||
return 0, syserror.EINVAL
|
||||
return 0, linuxerr.EINVAL
|
||||
}
|
||||
sz, ok := f.upper.FileOperations.(FifoSizer)
|
||||
if !ok {
|
||||
return 0, syserror.EINVAL
|
||||
return 0, linuxerr.EINVAL
|
||||
}
|
||||
return sz.SetFifoSize(size)
|
||||
}
|
||||
|
||||
@@ -76,6 +76,7 @@ go_library(
|
||||
deps = [
|
||||
"//pkg/abi/linux",
|
||||
"//pkg/context",
|
||||
"//pkg/errors/linuxerr",
|
||||
"//pkg/hostarch",
|
||||
"//pkg/log",
|
||||
"//pkg/safemem",
|
||||
|
||||
@@ -18,6 +18,7 @@ import (
|
||||
"io"
|
||||
|
||||
"gvisor.dev/gvisor/pkg/context"
|
||||
"gvisor.dev/gvisor/pkg/errors/linuxerr"
|
||||
"gvisor.dev/gvisor/pkg/sentry/arch"
|
||||
"gvisor.dev/gvisor/pkg/sentry/fs"
|
||||
"gvisor.dev/gvisor/pkg/sentry/memmap"
|
||||
@@ -63,12 +64,12 @@ func SeekWithDirCursor(ctx context.Context, file *fs.File, whence fs.SeekWhence,
|
||||
switch inode.StableAttr.Type {
|
||||
case fs.RegularFile, fs.SpecialFile, fs.BlockDevice:
|
||||
if offset < 0 {
|
||||
return current, syserror.EINVAL
|
||||
return current, linuxerr.EINVAL
|
||||
}
|
||||
return offset, nil
|
||||
case fs.Directory, fs.SpecialDirectory:
|
||||
if offset != 0 {
|
||||
return current, syserror.EINVAL
|
||||
return current, linuxerr.EINVAL
|
||||
}
|
||||
// SEEK_SET to 0 moves the directory "cursor" to the beginning.
|
||||
if dirCursor != nil {
|
||||
@@ -76,22 +77,22 @@ func SeekWithDirCursor(ctx context.Context, file *fs.File, whence fs.SeekWhence,
|
||||
}
|
||||
return 0, nil
|
||||
default:
|
||||
return current, syserror.EINVAL
|
||||
return current, linuxerr.EINVAL
|
||||
}
|
||||
case fs.SeekCurrent:
|
||||
switch inode.StableAttr.Type {
|
||||
case fs.RegularFile, fs.SpecialFile, fs.BlockDevice:
|
||||
if current+offset < 0 {
|
||||
return current, syserror.EINVAL
|
||||
return current, linuxerr.EINVAL
|
||||
}
|
||||
return current + offset, nil
|
||||
case fs.Directory, fs.SpecialDirectory:
|
||||
if offset != 0 {
|
||||
return current, syserror.EINVAL
|
||||
return current, linuxerr.EINVAL
|
||||
}
|
||||
return current, nil
|
||||
default:
|
||||
return current, syserror.EINVAL
|
||||
return current, linuxerr.EINVAL
|
||||
}
|
||||
case fs.SeekEnd:
|
||||
switch inode.StableAttr.Type {
|
||||
@@ -103,14 +104,14 @@ func SeekWithDirCursor(ctx context.Context, file *fs.File, whence fs.SeekWhence,
|
||||
}
|
||||
sz := uattr.Size
|
||||
if sz+offset < 0 {
|
||||
return current, syserror.EINVAL
|
||||
return current, linuxerr.EINVAL
|
||||
}
|
||||
return sz + offset, nil
|
||||
// FIXME(b/34778850): This is not universally correct.
|
||||
// Remove SpecialDirectory.
|
||||
case fs.SpecialDirectory:
|
||||
if offset != 0 {
|
||||
return current, syserror.EINVAL
|
||||
return current, linuxerr.EINVAL
|
||||
}
|
||||
// SEEK_END to 0 moves the directory "cursor" to the end.
|
||||
//
|
||||
@@ -121,12 +122,12 @@ func SeekWithDirCursor(ctx context.Context, file *fs.File, whence fs.SeekWhence,
|
||||
// futile (EOF will always be the result).
|
||||
return fs.FileMaxOffset, nil
|
||||
default:
|
||||
return current, syserror.EINVAL
|
||||
return current, linuxerr.EINVAL
|
||||
}
|
||||
}
|
||||
|
||||
// Not a valid seek request.
|
||||
return current, syserror.EINVAL
|
||||
return current, linuxerr.EINVAL
|
||||
}
|
||||
|
||||
// FileGenericSeek implements fs.FileOperations.Seek for files that use a
|
||||
@@ -152,7 +153,7 @@ type FileNoSeek struct{}
|
||||
|
||||
// Seek implements fs.FileOperations.Seek.
|
||||
func (FileNoSeek) Seek(context.Context, *fs.File, fs.SeekWhence, int64) (int64, error) {
|
||||
return 0, syserror.EINVAL
|
||||
return 0, linuxerr.EINVAL
|
||||
}
|
||||
|
||||
// FilePipeSeek implements fs.FileOperations.Seek and can be used for files
|
||||
@@ -178,7 +179,7 @@ type FileNoFsync struct{}
|
||||
|
||||
// Fsync implements fs.FileOperations.Fsync.
|
||||
func (FileNoFsync) Fsync(context.Context, *fs.File, int64, int64, fs.SyncType) error {
|
||||
return syserror.EINVAL
|
||||
return linuxerr.EINVAL
|
||||
}
|
||||
|
||||
// FileNoopFsync implements fs.FileOperations.Fsync for files that don't need
|
||||
@@ -345,7 +346,7 @@ func NewFileStaticContentReader(b []byte) FileStaticContentReader {
|
||||
// Read implements fs.FileOperations.Read.
|
||||
func (scr *FileStaticContentReader) Read(ctx context.Context, _ *fs.File, dst usermem.IOSequence, offset int64) (int64, error) {
|
||||
if offset < 0 {
|
||||
return 0, syserror.EINVAL
|
||||
return 0, linuxerr.EINVAL
|
||||
}
|
||||
if offset >= int64(len(scr.content)) {
|
||||
return 0, nil
|
||||
@@ -367,7 +368,7 @@ type FileNoRead struct{}
|
||||
|
||||
// Read implements fs.FileOperations.Read.
|
||||
func (FileNoRead) Read(context.Context, *fs.File, usermem.IOSequence, int64) (int64, error) {
|
||||
return 0, syserror.EINVAL
|
||||
return 0, linuxerr.EINVAL
|
||||
}
|
||||
|
||||
// FileNoWrite implements fs.FileOperations.Write to return EINVAL.
|
||||
@@ -375,7 +376,7 @@ type FileNoWrite struct{}
|
||||
|
||||
// Write implements fs.FileOperations.Write.
|
||||
func (FileNoWrite) Write(context.Context, *fs.File, usermem.IOSequence, int64) (int64, error) {
|
||||
return 0, syserror.EINVAL
|
||||
return 0, linuxerr.EINVAL
|
||||
}
|
||||
|
||||
// FileNoopRead implement fs.FileOperations.Read as a noop.
|
||||
|
||||
@@ -17,6 +17,7 @@ package fsutil
|
||||
import (
|
||||
"gvisor.dev/gvisor/pkg/abi/linux"
|
||||
"gvisor.dev/gvisor/pkg/context"
|
||||
"gvisor.dev/gvisor/pkg/errors/linuxerr"
|
||||
"gvisor.dev/gvisor/pkg/sentry/fs"
|
||||
ktime "gvisor.dev/gvisor/pkg/sentry/kernel/time"
|
||||
"gvisor.dev/gvisor/pkg/sentry/memmap"
|
||||
@@ -376,7 +377,7 @@ func (InodeNotDirectory) RemoveDirectory(context.Context, *fs.Inode, string) err
|
||||
|
||||
// Rename implements fs.FileOperations.Rename.
|
||||
func (InodeNotDirectory) Rename(context.Context, *fs.Inode, *fs.Inode, string, *fs.Inode, string, bool) error {
|
||||
return syserror.EINVAL
|
||||
return linuxerr.EINVAL
|
||||
}
|
||||
|
||||
// InodeNotSocket can be used by Inodes that are not sockets.
|
||||
@@ -392,7 +393,7 @@ type InodeNotTruncatable struct{}
|
||||
|
||||
// Truncate implements fs.InodeOperations.Truncate.
|
||||
func (InodeNotTruncatable) Truncate(context.Context, *fs.Inode, int64) error {
|
||||
return syserror.EINVAL
|
||||
return linuxerr.EINVAL
|
||||
}
|
||||
|
||||
// InodeIsDirTruncate implements fs.InodeOperations.Truncate for directories.
|
||||
@@ -416,7 +417,7 @@ type InodeNotRenameable struct{}
|
||||
|
||||
// Rename implements fs.InodeOperations.Rename.
|
||||
func (InodeNotRenameable) Rename(context.Context, *fs.Inode, *fs.Inode, string, *fs.Inode, string, bool) error {
|
||||
return syserror.EINVAL
|
||||
return linuxerr.EINVAL
|
||||
}
|
||||
|
||||
// InodeNotOpenable can be used by Inodes that cannot be opened.
|
||||
|
||||
@@ -212,7 +212,7 @@ func (t *TTYFileOperations) Ioctl(ctx context.Context, _ *fs.File, io usermem.IO
|
||||
|
||||
// pgID must be non-negative.
|
||||
if pgID < 0 {
|
||||
return 0, syserror.EINVAL
|
||||
return 0, linuxerr.EINVAL
|
||||
}
|
||||
|
||||
// Process group with pgID must exist in this PID namespace.
|
||||
|
||||
@@ -20,6 +20,7 @@ import (
|
||||
|
||||
"gvisor.dev/gvisor/pkg/abi/linux"
|
||||
"gvisor.dev/gvisor/pkg/context"
|
||||
"gvisor.dev/gvisor/pkg/errors/linuxerr"
|
||||
"gvisor.dev/gvisor/pkg/hostarch"
|
||||
"gvisor.dev/gvisor/pkg/sentry/arch"
|
||||
"gvisor.dev/gvisor/pkg/sentry/memmap"
|
||||
@@ -132,7 +133,7 @@ func (*Inotify) Write(context.Context, *File, usermem.IOSequence, int64) (int64,
|
||||
// Read implements FileOperations.Read.
|
||||
func (i *Inotify) Read(ctx context.Context, _ *File, dst usermem.IOSequence, _ int64) (int64, error) {
|
||||
if dst.NumBytes() < inotifyEventBaseSize {
|
||||
return 0, syserror.EINVAL
|
||||
return 0, linuxerr.EINVAL
|
||||
}
|
||||
|
||||
i.evMu.Lock()
|
||||
@@ -156,7 +157,7 @@ func (i *Inotify) Read(ctx context.Context, _ *File, dst usermem.IOSequence, _ i
|
||||
// write some events out.
|
||||
return writeLen, nil
|
||||
}
|
||||
return 0, syserror.EINVAL
|
||||
return 0, linuxerr.EINVAL
|
||||
}
|
||||
|
||||
// Linux always dequeues an available event as long as there's enough
|
||||
@@ -183,7 +184,7 @@ func (*Inotify) WriteTo(context.Context, *File, io.Writer, int64, bool) (int64,
|
||||
|
||||
// Fsync implements FileOperations.Fsync.
|
||||
func (*Inotify) Fsync(context.Context, *File, int64, int64, SyncType) error {
|
||||
return syserror.EINVAL
|
||||
return linuxerr.EINVAL
|
||||
}
|
||||
|
||||
// ReadFrom implements FileOperations.ReadFrom.
|
||||
@@ -329,7 +330,7 @@ func (i *Inotify) RmWatch(ctx context.Context, wd int32) error {
|
||||
watch, ok := i.watches[wd]
|
||||
if !ok {
|
||||
i.mu.Unlock()
|
||||
return syserror.EINVAL
|
||||
return linuxerr.EINVAL
|
||||
}
|
||||
|
||||
// Remove the watch from this instance.
|
||||
|
||||
@@ -16,6 +16,7 @@ package fs
|
||||
|
||||
import (
|
||||
"gvisor.dev/gvisor/pkg/context"
|
||||
"gvisor.dev/gvisor/pkg/errors/linuxerr"
|
||||
"gvisor.dev/gvisor/pkg/syserror"
|
||||
)
|
||||
|
||||
@@ -109,7 +110,7 @@ func (n *MockInodeOperations) SetPermissions(context.Context, *Inode, FilePermis
|
||||
|
||||
// SetOwner implements fs.InodeOperations.SetOwner.
|
||||
func (*MockInodeOperations) SetOwner(context.Context, *Inode, FileOwner) error {
|
||||
return syserror.EINVAL
|
||||
return linuxerr.EINVAL
|
||||
}
|
||||
|
||||
// SetTimestamps implements fs.InodeOperations.SetTimestamps.
|
||||
|
||||
@@ -20,6 +20,7 @@ import (
|
||||
|
||||
"golang.org/x/sys/unix"
|
||||
"gvisor.dev/gvisor/pkg/context"
|
||||
"gvisor.dev/gvisor/pkg/errors/linuxerr"
|
||||
"gvisor.dev/gvisor/pkg/refs"
|
||||
"gvisor.dev/gvisor/pkg/sentry/kernel/auth"
|
||||
"gvisor.dev/gvisor/pkg/sync"
|
||||
@@ -357,7 +358,7 @@ func (mns *MountNamespace) Unmount(ctx context.Context, node *Dirent, detachOnly
|
||||
orig, ok := mns.mounts[node]
|
||||
if !ok {
|
||||
// node is not a mount point.
|
||||
return syserror.EINVAL
|
||||
return linuxerr.EINVAL
|
||||
}
|
||||
|
||||
if orig.previous == nil {
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user