mirror of
https://github.com/netbirdio/gvisor.git
synced 2026-05-22 17:12:49 -07:00
Add VFS.NewDisconnectedMount().
Analogous to Linux's kern_mount(). PiperOrigin-RevId: 297259580
This commit is contained in:
@@ -139,6 +139,23 @@ func (vfs *VirtualFilesystem) NewMountNamespace(ctx context.Context, creds *auth
|
||||
return mntns, nil
|
||||
}
|
||||
|
||||
// NewDisconnectedMount returns a Mount representing fs with the given root
|
||||
// (which may be nil). The new Mount is not associated with any MountNamespace
|
||||
// and is not connected to any other Mounts. References are taken on fs and
|
||||
// root.
|
||||
func (vfs *VirtualFilesystem) NewDisconnectedMount(fs *Filesystem, root *Dentry, opts *MountOptions) (*Mount, error) {
|
||||
fs.IncRef()
|
||||
if root != nil {
|
||||
root.IncRef()
|
||||
}
|
||||
return &Mount{
|
||||
vfs: vfs,
|
||||
fs: fs,
|
||||
root: root,
|
||||
refs: 1,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// MountAt creates and mounts a Filesystem configured by the given arguments.
|
||||
func (vfs *VirtualFilesystem) MountAt(ctx context.Context, creds *auth.Credentials, source string, target *PathOperation, fsTypeName string, opts *MountOptions) error {
|
||||
rft := vfs.getFilesystemType(fsTypeName)
|
||||
|
||||
+11
-5
@@ -126,17 +126,23 @@ func (vfs *VirtualFilesystem) Init() error {
|
||||
// Construct vfs.anonMount.
|
||||
anonfsDevMinor, err := vfs.GetAnonBlockDevMinor()
|
||||
if err != nil {
|
||||
return err
|
||||
// This shouldn't be possible since anonBlockDevMinorNext was
|
||||
// initialized to 1 above (no device numbers have been allocated yet).
|
||||
panic(fmt.Sprintf("VirtualFilesystem.Init: device number allocation for anonfs failed: %v", err))
|
||||
}
|
||||
anonfs := anonFilesystem{
|
||||
devMinor: anonfsDevMinor,
|
||||
}
|
||||
anonfs.vfsfs.Init(vfs, &anonfs)
|
||||
vfs.anonMount = &Mount{
|
||||
vfs: vfs,
|
||||
fs: &anonfs.vfsfs,
|
||||
refs: 1,
|
||||
defer anonfs.vfsfs.DecRef()
|
||||
anonMount, err := vfs.NewDisconnectedMount(&anonfs.vfsfs, nil, &MountOptions{})
|
||||
if err != nil {
|
||||
// We should not be passing any MountOptions that would cause
|
||||
// construction of this mount to fail.
|
||||
panic(fmt.Sprintf("VirtualFilesystem.Init: anonfs mount failed: %v", err))
|
||||
}
|
||||
vfs.anonMount = anonMount
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user