summaryrefslogtreecommitdiffhomepage
path: root/pkg/sentry/fsimpl/fuse/directory.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/sentry/fsimpl/fuse/directory.go')
-rw-r--r--pkg/sentry/fsimpl/fuse/directory.go105
1 files changed, 0 insertions, 105 deletions
diff --git a/pkg/sentry/fsimpl/fuse/directory.go b/pkg/sentry/fsimpl/fuse/directory.go
deleted file mode 100644
index 798c4a6f3..000000000
--- a/pkg/sentry/fsimpl/fuse/directory.go
+++ /dev/null
@@ -1,105 +0,0 @@
-// Copyright 2020 The gVisor Authors.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package fuse
-
-import (
- "sync/atomic"
-
- "gvisor.dev/gvisor/pkg/abi/linux"
- "gvisor.dev/gvisor/pkg/context"
- "gvisor.dev/gvisor/pkg/sentry/kernel"
- "gvisor.dev/gvisor/pkg/sentry/kernel/auth"
- "gvisor.dev/gvisor/pkg/sentry/vfs"
- "gvisor.dev/gvisor/pkg/syserror"
- "gvisor.dev/gvisor/pkg/usermem"
-)
-
-type directoryFD struct {
- fileDescription
-}
-
-// Allocate implements directoryFD.Allocate.
-func (directoryFD) Allocate(ctx context.Context, mode, offset, length uint64) error {
- return syserror.EISDIR
-}
-
-// PRead implements FileDescriptionImpl.PRead.
-func (directoryFD) PRead(ctx context.Context, dst usermem.IOSequence, offset int64, opts vfs.ReadOptions) (int64, error) {
- return 0, syserror.EISDIR
-}
-
-// Read implements FileDescriptionImpl.Read.
-func (directoryFD) Read(ctx context.Context, dst usermem.IOSequence, opts vfs.ReadOptions) (int64, error) {
- return 0, syserror.EISDIR
-}
-
-// PWrite implements FileDescriptionImpl.PWrite.
-func (directoryFD) PWrite(ctx context.Context, src usermem.IOSequence, offset int64, opts vfs.WriteOptions) (int64, error) {
- return 0, syserror.EISDIR
-}
-
-// Write implements FileDescriptionImpl.Write.
-func (directoryFD) Write(ctx context.Context, src usermem.IOSequence, opts vfs.WriteOptions) (int64, error) {
- return 0, syserror.EISDIR
-}
-
-// IterDirents implements FileDescriptionImpl.IterDirents.
-func (dir *directoryFD) IterDirents(ctx context.Context, callback vfs.IterDirentsCallback) error {
- fusefs := dir.inode().fs
- task, creds := kernel.TaskFromContext(ctx), auth.CredentialsFromContext(ctx)
-
- in := linux.FUSEReadIn{
- Fh: dir.Fh,
- Offset: uint64(atomic.LoadInt64(&dir.off)),
- Size: linux.FUSE_PAGE_SIZE,
- Flags: dir.statusFlags(),
- }
-
- // TODO(gVisor.dev/issue/3404): Support FUSE_READDIRPLUS.
- req, err := fusefs.conn.NewRequest(creds, uint32(task.ThreadID()), dir.inode().nodeID, linux.FUSE_READDIR, &in)
- if err != nil {
- return err
- }
-
- res, err := fusefs.conn.Call(task, req)
- if err != nil {
- return err
- }
- if err := res.Error(); err != nil {
- return err
- }
-
- var out linux.FUSEDirents
- if err := res.UnmarshalPayload(&out); err != nil {
- return err
- }
-
- for _, fuseDirent := range out.Dirents {
- nextOff := int64(fuseDirent.Meta.Off)
- dirent := vfs.Dirent{
- Name: fuseDirent.Name,
- Type: uint8(fuseDirent.Meta.Type),
- Ino: fuseDirent.Meta.Ino,
- NextOff: nextOff,
- }
-
- if err := callback.Handle(dirent); err != nil {
- return err
- }
- atomic.StoreInt64(&dir.off, nextOff)
- }
-
- return nil
-}