Fix vfs2 proc/self/fd dirent iteration.
Make proc/self/fd iteration work properly. Also, the comment on kernfs.Inode.IterDirents did not accurately reflect how parameters should be used/were used in kernfs.Inode impls other than fdDir. Updates #2923. PiperOrigin-RevId: 317370325
This commit is contained in:
parent
7db196c4db
commit
8655fb7248
|
@ -425,10 +425,10 @@ type inodeDynamicLookup interface {
|
|||
// IterDirents is used to iterate over dynamically created entries. It invokes
|
||||
// cb on each entry in the directory represented by the FileDescription.
|
||||
// 'offset' is the offset for the entire IterDirents call, which may include
|
||||
// results from the caller. 'relOffset' is the offset inside the entries
|
||||
// returned by this IterDirents invocation. In other words,
|
||||
// 'offset+relOffset+1' is the value that should be set in vfs.Dirent.NextOff,
|
||||
// while 'relOffset' is the place where iteration should start from.
|
||||
// results from the caller (e.g. "." and ".."). 'relOffset' is the offset
|
||||
// inside the entries returned by this IterDirents invocation. In other words,
|
||||
// 'offset' should be used to calculate each vfs.Dirent.NextOff as well as
|
||||
// the return value, while 'relOffset' is the place to start iteration.
|
||||
IterDirents(ctx context.Context, callback vfs.IterDirentsCallback, offset, relOffset int64) (newOffset int64, err error)
|
||||
}
|
||||
|
||||
|
|
|
@ -64,7 +64,7 @@ type fdDir struct {
|
|||
}
|
||||
|
||||
// IterDirents implements kernfs.inodeDynamicLookup.
|
||||
func (i *fdDir) IterDirents(ctx context.Context, cb vfs.IterDirentsCallback, absOffset, relOffset int64) (int64, error) {
|
||||
func (i *fdDir) IterDirents(ctx context.Context, cb vfs.IterDirentsCallback, offset, relOffset int64) (int64, error) {
|
||||
var fds []int32
|
||||
i.task.WithMuLocked(func(t *kernel.Task) {
|
||||
if fdTable := t.FDTable(); fdTable != nil {
|
||||
|
@ -72,7 +72,6 @@ func (i *fdDir) IterDirents(ctx context.Context, cb vfs.IterDirentsCallback, abs
|
|||
}
|
||||
})
|
||||
|
||||
offset := absOffset + relOffset
|
||||
typ := uint8(linux.DT_REG)
|
||||
if i.produceSymlink {
|
||||
typ = linux.DT_LNK
|
||||
|
|
Loading…
Reference in New Issue