summaryrefslogtreecommitdiff
path: root/cmd/btrfs-mount/subvol_fuse.go
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/btrfs-mount/subvol_fuse.go')
-rw-r--r--cmd/btrfs-mount/subvol_fuse.go18
1 files changed, 8 insertions, 10 deletions
diff --git a/cmd/btrfs-mount/subvol_fuse.go b/cmd/btrfs-mount/subvol_fuse.go
index 8227ee2..7500e0b 100644
--- a/cmd/btrfs-mount/subvol_fuse.go
+++ b/cmd/btrfs-mount/subvol_fuse.go
@@ -19,7 +19,7 @@ type dirState struct {
}
type fileState struct {
- InodeItem btrfsitem.Inode
+ File *file
}
type subvolumeFUSE struct {
@@ -29,8 +29,6 @@ type subvolumeFUSE struct {
fileHandles util.SyncMap[fuseops.HandleID, *fileState]
}
-func (sv *subvolumeFUSE) init() {}
-
func (sv *subvolumeFUSE) newHandle() fuseops.HandleID {
return fuseops.HandleID(atomic.AddUint64(&sv.lastHandle, 1))
}
@@ -93,14 +91,14 @@ func (sv *Subvolume) LookUpInode(_ context.Context, op *fuseops.LookUpInodeOp) e
if entry.Location.ItemType != btrfsitem.INODE_ITEM_KEY {
return fmt.Errorf("child %q is not an inode: %w", op.Name, syscall.ENOSYS)
}
- inodeItem, err := sv.loadInode(entry.Location.ObjectID)
+ bareInode, err := sv.loadBareInode(entry.Location.ObjectID)
if err != nil {
return err
}
op.Entry = fuseops.ChildInodeEntry{
Child: fuseops.InodeID(entry.Location.ObjectID),
- Generation: fuseops.GenerationNumber(inodeItem.Sequence),
- Attributes: inodeItemToFUSE(inodeItem),
+ Generation: fuseops.GenerationNumber(bareInode.InodeItem.Sequence),
+ Attributes: inodeItemToFUSE(*bareInode.InodeItem),
}
return nil
}
@@ -114,12 +112,12 @@ func (sv *Subvolume) GetInodeAttributes(_ context.Context, op *fuseops.GetInodeA
op.Inode = fuseops.InodeID(inode)
}
- inodeItem, err := sv.loadInode(btrfs.ObjID(op.Inode))
+ bareInode, err := sv.loadBareInode(btrfs.ObjID(op.Inode))
if err != nil {
return err
}
- op.Attributes = inodeItemToFUSE(inodeItem)
+ op.Attributes = inodeItemToFUSE(*bareInode.InodeItem)
return nil
}
@@ -186,13 +184,13 @@ func (sv *Subvolume) ReleaseDirHandle(_ context.Context, op *fuseops.ReleaseDirH
}
func (sv *Subvolume) OpenFile(_ context.Context, op *fuseops.OpenFileOp) error {
- inodeItem, err := sv.loadInode(btrfs.ObjID(op.Inode))
+ file, err := sv.loadFile(btrfs.ObjID(op.Inode))
if err != nil {
return err
}
handle := sv.newHandle()
sv.fileHandles.Store(handle, &fileState{
- InodeItem: inodeItem,
+ File: file,
})
op.Handle = handle
op.KeepPageCache = true