mirror of
https://github.com/netbirdio/gvisor.git
synced 2026-05-22 17:12:49 -07:00
Changes missing in last submit
Updates #1487 Updates #1623 PiperOrigin-RevId: 292040835
This commit is contained in:
committed by
gVisor bot
parent
431ff52768
commit
3d046fef06
@@ -15,9 +15,9 @@
|
||||
package kernel
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"math"
|
||||
"strings"
|
||||
"sync/atomic"
|
||||
"syscall"
|
||||
|
||||
@@ -221,24 +221,24 @@ func (f *FDTable) forEach(fn func(fd int32, file *fs.File, fileVFS2 *vfs.FileDes
|
||||
|
||||
// String is a stringer for FDTable.
|
||||
func (f *FDTable) String() string {
|
||||
var b bytes.Buffer
|
||||
var buf strings.Builder
|
||||
f.forEach(func(fd int32, file *fs.File, fileVFS2 *vfs.FileDescription, flags FDFlags) {
|
||||
switch {
|
||||
case file != nil:
|
||||
n, _ := file.Dirent.FullName(nil /* root */)
|
||||
b.WriteString(fmt.Sprintf("\tfd:%d => name %s\n", fd, n))
|
||||
fmt.Fprintf(&buf, "\tfd:%d => name %s\n", fd, n)
|
||||
|
||||
case fileVFS2 != nil:
|
||||
fs := fileVFS2.VirtualDentry().Mount().Filesystem().VirtualFilesystem()
|
||||
// TODO(gvisor.dev/issue/1623): We have no context nor root. Will this work?
|
||||
name, err := fs.PathnameWithDeleted(context.Background(), vfs.VirtualDentry{}, fileVFS2.VirtualDentry())
|
||||
vfsObj := fileVFS2.Mount().Filesystem().VirtualFilesystem()
|
||||
name, err := vfsObj.PathnameWithDeleted(context.Background(), vfs.VirtualDentry{}, fileVFS2.VirtualDentry())
|
||||
if err != nil {
|
||||
b.WriteString(fmt.Sprintf("<err: %v>\n", err))
|
||||
fmt.Fprintf(&buf, "<err: %v>\n", err)
|
||||
return
|
||||
}
|
||||
b.WriteString(fmt.Sprintf("\tfd:%d => name %s\n", fd, name))
|
||||
fmt.Fprintf(&buf, "\tfd:%d => name %s\n", fd, name)
|
||||
}
|
||||
})
|
||||
return b.String()
|
||||
return buf.String()
|
||||
}
|
||||
|
||||
// NewFDs allocates new FDs guaranteed to be the lowest number available
|
||||
|
||||
@@ -29,7 +29,7 @@ import (
|
||||
)
|
||||
|
||||
const (
|
||||
// EventMaskRead contains events that can be triggerd on reads.
|
||||
// EventMaskRead contains events that can be triggered on reads.
|
||||
EventMaskRead = waiter.EventIn | waiter.EventHUp | waiter.EventErr
|
||||
)
|
||||
|
||||
|
||||
@@ -24,6 +24,11 @@ import (
|
||||
"gvisor.dev/gvisor/pkg/waiter"
|
||||
)
|
||||
|
||||
const (
|
||||
// EventMaskRead contains events that can be triggered on reads.
|
||||
EventMaskRead = waiter.EventIn | waiter.EventHUp | waiter.EventErr
|
||||
)
|
||||
|
||||
// Read implements linux syscall read(2). Note that we try to get a buffer that
|
||||
// is exactly the size requested because some applications like qemu expect
|
||||
// they can do large reads all at once. Bug for bug. Same for other read
|
||||
@@ -39,11 +44,6 @@ func Read(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallC
|
||||
}
|
||||
defer file.DecRef()
|
||||
|
||||
// Check that the file is readable.
|
||||
if !file.IsReadable() {
|
||||
return 0, nil, syserror.EBADF
|
||||
}
|
||||
|
||||
// Check that the size is legitimate.
|
||||
si := int(size)
|
||||
if si < 0 {
|
||||
@@ -70,8 +70,8 @@ func read(t *kernel.Task, file *vfs.FileDescription, dst usermem.IOSequence, opt
|
||||
}
|
||||
|
||||
// Register for notifications.
|
||||
_, ch := waiter.NewChannelEntry(nil)
|
||||
// file.EventRegister(&w, EventMaskRead)
|
||||
w, ch := waiter.NewChannelEntry(nil)
|
||||
file.EventRegister(&w, EventMaskRead)
|
||||
|
||||
total := n
|
||||
for {
|
||||
@@ -89,7 +89,7 @@ func read(t *kernel.Task, file *vfs.FileDescription, dst usermem.IOSequence, opt
|
||||
break
|
||||
}
|
||||
}
|
||||
//file.EventUnregister(&w)
|
||||
file.EventUnregister(&w)
|
||||
|
||||
return total, err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user