mirror of
https://github.com/netbirdio/gvisor.git
synced 2026-05-22 17:12:49 -07:00
[vfs] Capitalize x in the {Get/Set/Remove/List}xattr functions.
PiperOrigin-RevId: 330554450
This commit is contained in:
@@ -270,7 +270,7 @@ func (i *Inode) GetXattr(ctx context.Context, name string, size uint64) (string,
|
||||
// SetXattr calls i.InodeOperations.SetXattr with i as the Inode.
|
||||
func (i *Inode) SetXattr(ctx context.Context, d *Dirent, name, value string, flags uint32) error {
|
||||
if i.overlay != nil {
|
||||
return overlaySetxattr(ctx, i.overlay, d, name, value, flags)
|
||||
return overlaySetXattr(ctx, i.overlay, d, name, value, flags)
|
||||
}
|
||||
return i.InodeOperations.SetXattr(ctx, i, name, value, flags)
|
||||
}
|
||||
|
||||
@@ -552,7 +552,7 @@ func overlayGetXattr(ctx context.Context, o *overlayEntry, name string, size uin
|
||||
return s, err
|
||||
}
|
||||
|
||||
func overlaySetxattr(ctx context.Context, o *overlayEntry, d *Dirent, name, value string, flags uint32) error {
|
||||
func overlaySetXattr(ctx context.Context, o *overlayEntry, d *Dirent, name, value string, flags uint32) error {
|
||||
// Don't allow changes to overlay xattrs through a setxattr syscall.
|
||||
if isXattrOverlay(name) {
|
||||
return syserror.EPERM
|
||||
|
||||
@@ -504,8 +504,8 @@ func (fs *filesystem) BoundEndpointAt(ctx context.Context, rp *vfs.ResolvingPath
|
||||
return nil, syserror.ECONNREFUSED
|
||||
}
|
||||
|
||||
// ListxattrAt implements vfs.FilesystemImpl.ListxattrAt.
|
||||
func (fs *filesystem) ListxattrAt(ctx context.Context, rp *vfs.ResolvingPath, size uint64) ([]string, error) {
|
||||
// ListXattrAt implements vfs.FilesystemImpl.ListXattrAt.
|
||||
func (fs *filesystem) ListXattrAt(ctx context.Context, rp *vfs.ResolvingPath, size uint64) ([]string, error) {
|
||||
_, _, err := fs.walk(ctx, rp, false)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@@ -513,8 +513,8 @@ func (fs *filesystem) ListxattrAt(ctx context.Context, rp *vfs.ResolvingPath, si
|
||||
return nil, syserror.ENOTSUP
|
||||
}
|
||||
|
||||
// GetxattrAt implements vfs.FilesystemImpl.GetxattrAt.
|
||||
func (fs *filesystem) GetxattrAt(ctx context.Context, rp *vfs.ResolvingPath, opts vfs.GetxattrOptions) (string, error) {
|
||||
// GetXattrAt implements vfs.FilesystemImpl.GetXattrAt.
|
||||
func (fs *filesystem) GetXattrAt(ctx context.Context, rp *vfs.ResolvingPath, opts vfs.GetXattrOptions) (string, error) {
|
||||
_, _, err := fs.walk(ctx, rp, false)
|
||||
if err != nil {
|
||||
return "", err
|
||||
@@ -522,8 +522,8 @@ func (fs *filesystem) GetxattrAt(ctx context.Context, rp *vfs.ResolvingPath, opt
|
||||
return "", syserror.ENOTSUP
|
||||
}
|
||||
|
||||
// SetxattrAt implements vfs.FilesystemImpl.SetxattrAt.
|
||||
func (fs *filesystem) SetxattrAt(ctx context.Context, rp *vfs.ResolvingPath, opts vfs.SetxattrOptions) error {
|
||||
// SetXattrAt implements vfs.FilesystemImpl.SetXattrAt.
|
||||
func (fs *filesystem) SetXattrAt(ctx context.Context, rp *vfs.ResolvingPath, opts vfs.SetXattrOptions) error {
|
||||
_, _, err := fs.walk(ctx, rp, false)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -531,8 +531,8 @@ func (fs *filesystem) SetxattrAt(ctx context.Context, rp *vfs.ResolvingPath, opt
|
||||
return syserror.ENOTSUP
|
||||
}
|
||||
|
||||
// RemovexattrAt implements vfs.FilesystemImpl.RemovexattrAt.
|
||||
func (fs *filesystem) RemovexattrAt(ctx context.Context, rp *vfs.ResolvingPath, name string) error {
|
||||
// RemoveXattrAt implements vfs.FilesystemImpl.RemoveXattrAt.
|
||||
func (fs *filesystem) RemoveXattrAt(ctx context.Context, rp *vfs.ResolvingPath, name string) error {
|
||||
_, _, err := fs.walk(ctx, rp, false)
|
||||
if err != nil {
|
||||
return err
|
||||
|
||||
@@ -1519,8 +1519,8 @@ func (fs *filesystem) BoundEndpointAt(ctx context.Context, rp *vfs.ResolvingPath
|
||||
return nil, syserror.ECONNREFUSED
|
||||
}
|
||||
|
||||
// ListxattrAt implements vfs.FilesystemImpl.ListxattrAt.
|
||||
func (fs *filesystem) ListxattrAt(ctx context.Context, rp *vfs.ResolvingPath, size uint64) ([]string, error) {
|
||||
// ListXattrAt implements vfs.FilesystemImpl.ListXattrAt.
|
||||
func (fs *filesystem) ListXattrAt(ctx context.Context, rp *vfs.ResolvingPath, size uint64) ([]string, error) {
|
||||
var ds *[]*dentry
|
||||
fs.renameMu.RLock()
|
||||
defer fs.renameMuRUnlockAndCheckCaching(ctx, &ds)
|
||||
@@ -1528,11 +1528,11 @@ func (fs *filesystem) ListxattrAt(ctx context.Context, rp *vfs.ResolvingPath, si
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return d.listxattr(ctx, rp.Credentials(), size)
|
||||
return d.listXattr(ctx, rp.Credentials(), size)
|
||||
}
|
||||
|
||||
// GetxattrAt implements vfs.FilesystemImpl.GetxattrAt.
|
||||
func (fs *filesystem) GetxattrAt(ctx context.Context, rp *vfs.ResolvingPath, opts vfs.GetxattrOptions) (string, error) {
|
||||
// GetXattrAt implements vfs.FilesystemImpl.GetXattrAt.
|
||||
func (fs *filesystem) GetXattrAt(ctx context.Context, rp *vfs.ResolvingPath, opts vfs.GetXattrOptions) (string, error) {
|
||||
var ds *[]*dentry
|
||||
fs.renameMu.RLock()
|
||||
defer fs.renameMuRUnlockAndCheckCaching(ctx, &ds)
|
||||
@@ -1540,11 +1540,11 @@ func (fs *filesystem) GetxattrAt(ctx context.Context, rp *vfs.ResolvingPath, opt
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return d.getxattr(ctx, rp.Credentials(), &opts)
|
||||
return d.getXattr(ctx, rp.Credentials(), &opts)
|
||||
}
|
||||
|
||||
// SetxattrAt implements vfs.FilesystemImpl.SetxattrAt.
|
||||
func (fs *filesystem) SetxattrAt(ctx context.Context, rp *vfs.ResolvingPath, opts vfs.SetxattrOptions) error {
|
||||
// SetXattrAt implements vfs.FilesystemImpl.SetXattrAt.
|
||||
func (fs *filesystem) SetXattrAt(ctx context.Context, rp *vfs.ResolvingPath, opts vfs.SetXattrOptions) error {
|
||||
var ds *[]*dentry
|
||||
fs.renameMu.RLock()
|
||||
d, err := fs.resolveLocked(ctx, rp, &ds)
|
||||
@@ -1552,7 +1552,7 @@ func (fs *filesystem) SetxattrAt(ctx context.Context, rp *vfs.ResolvingPath, opt
|
||||
fs.renameMuRUnlockAndCheckCaching(ctx, &ds)
|
||||
return err
|
||||
}
|
||||
if err := d.setxattr(ctx, rp.Credentials(), &opts); err != nil {
|
||||
if err := d.setXattr(ctx, rp.Credentials(), &opts); err != nil {
|
||||
fs.renameMuRUnlockAndCheckCaching(ctx, &ds)
|
||||
return err
|
||||
}
|
||||
@@ -1562,8 +1562,8 @@ func (fs *filesystem) SetxattrAt(ctx context.Context, rp *vfs.ResolvingPath, opt
|
||||
return nil
|
||||
}
|
||||
|
||||
// RemovexattrAt implements vfs.FilesystemImpl.RemovexattrAt.
|
||||
func (fs *filesystem) RemovexattrAt(ctx context.Context, rp *vfs.ResolvingPath, name string) error {
|
||||
// RemoveXattrAt implements vfs.FilesystemImpl.RemoveXattrAt.
|
||||
func (fs *filesystem) RemoveXattrAt(ctx context.Context, rp *vfs.ResolvingPath, name string) error {
|
||||
var ds *[]*dentry
|
||||
fs.renameMu.RLock()
|
||||
d, err := fs.resolveLocked(ctx, rp, &ds)
|
||||
@@ -1571,7 +1571,7 @@ func (fs *filesystem) RemovexattrAt(ctx context.Context, rp *vfs.ResolvingPath,
|
||||
fs.renameMuRUnlockAndCheckCaching(ctx, &ds)
|
||||
return err
|
||||
}
|
||||
if err := d.removexattr(ctx, rp.Credentials(), name); err != nil {
|
||||
if err := d.removeXattr(ctx, rp.Credentials(), name); err != nil {
|
||||
fs.renameMuRUnlockAndCheckCaching(ctx, &ds)
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -1372,7 +1372,7 @@ func (d *dentry) setDeleted() {
|
||||
atomic.StoreUint32(&d.deleted, 1)
|
||||
}
|
||||
|
||||
func (d *dentry) listxattr(ctx context.Context, creds *auth.Credentials, size uint64) ([]string, error) {
|
||||
func (d *dentry) listXattr(ctx context.Context, creds *auth.Credentials, size uint64) ([]string, error) {
|
||||
if d.file.isNil() || !d.userXattrSupported() {
|
||||
return nil, nil
|
||||
}
|
||||
@@ -1390,7 +1390,7 @@ func (d *dentry) listxattr(ctx context.Context, creds *auth.Credentials, size ui
|
||||
return xattrs, nil
|
||||
}
|
||||
|
||||
func (d *dentry) getxattr(ctx context.Context, creds *auth.Credentials, opts *vfs.GetxattrOptions) (string, error) {
|
||||
func (d *dentry) getXattr(ctx context.Context, creds *auth.Credentials, opts *vfs.GetXattrOptions) (string, error) {
|
||||
if d.file.isNil() {
|
||||
return "", syserror.ENODATA
|
||||
}
|
||||
@@ -1400,7 +1400,7 @@ func (d *dentry) getxattr(ctx context.Context, creds *auth.Credentials, opts *vf
|
||||
return d.file.getXattr(ctx, opts.Name, opts.Size)
|
||||
}
|
||||
|
||||
func (d *dentry) setxattr(ctx context.Context, creds *auth.Credentials, opts *vfs.SetxattrOptions) error {
|
||||
func (d *dentry) setXattr(ctx context.Context, creds *auth.Credentials, opts *vfs.SetXattrOptions) error {
|
||||
if d.file.isNil() {
|
||||
return syserror.EPERM
|
||||
}
|
||||
@@ -1410,7 +1410,7 @@ func (d *dentry) setxattr(ctx context.Context, creds *auth.Credentials, opts *vf
|
||||
return d.file.setXattr(ctx, opts.Name, opts.Value, opts.Flags)
|
||||
}
|
||||
|
||||
func (d *dentry) removexattr(ctx context.Context, creds *auth.Credentials, name string) error {
|
||||
func (d *dentry) removeXattr(ctx context.Context, creds *auth.Credentials, name string) error {
|
||||
if d.file.isNil() {
|
||||
return syserror.EPERM
|
||||
}
|
||||
@@ -1668,30 +1668,30 @@ func (fd *fileDescription) SetStat(ctx context.Context, opts vfs.SetStatOptions)
|
||||
return nil
|
||||
}
|
||||
|
||||
// Listxattr implements vfs.FileDescriptionImpl.Listxattr.
|
||||
func (fd *fileDescription) Listxattr(ctx context.Context, size uint64) ([]string, error) {
|
||||
return fd.dentry().listxattr(ctx, auth.CredentialsFromContext(ctx), size)
|
||||
// ListXattr implements vfs.FileDescriptionImpl.ListXattr.
|
||||
func (fd *fileDescription) ListXattr(ctx context.Context, size uint64) ([]string, error) {
|
||||
return fd.dentry().listXattr(ctx, auth.CredentialsFromContext(ctx), size)
|
||||
}
|
||||
|
||||
// Getxattr implements vfs.FileDescriptionImpl.Getxattr.
|
||||
func (fd *fileDescription) Getxattr(ctx context.Context, opts vfs.GetxattrOptions) (string, error) {
|
||||
return fd.dentry().getxattr(ctx, auth.CredentialsFromContext(ctx), &opts)
|
||||
// GetXattr implements vfs.FileDescriptionImpl.GetXattr.
|
||||
func (fd *fileDescription) GetXattr(ctx context.Context, opts vfs.GetXattrOptions) (string, error) {
|
||||
return fd.dentry().getXattr(ctx, auth.CredentialsFromContext(ctx), &opts)
|
||||
}
|
||||
|
||||
// Setxattr implements vfs.FileDescriptionImpl.Setxattr.
|
||||
func (fd *fileDescription) Setxattr(ctx context.Context, opts vfs.SetxattrOptions) error {
|
||||
// SetXattr implements vfs.FileDescriptionImpl.SetXattr.
|
||||
func (fd *fileDescription) SetXattr(ctx context.Context, opts vfs.SetXattrOptions) error {
|
||||
d := fd.dentry()
|
||||
if err := d.setxattr(ctx, auth.CredentialsFromContext(ctx), &opts); err != nil {
|
||||
if err := d.setXattr(ctx, auth.CredentialsFromContext(ctx), &opts); err != nil {
|
||||
return err
|
||||
}
|
||||
d.InotifyWithParent(ctx, linux.IN_ATTRIB, 0, vfs.InodeEvent)
|
||||
return nil
|
||||
}
|
||||
|
||||
// Removexattr implements vfs.FileDescriptionImpl.Removexattr.
|
||||
func (fd *fileDescription) Removexattr(ctx context.Context, name string) error {
|
||||
// RemoveXattr implements vfs.FileDescriptionImpl.RemoveXattr.
|
||||
func (fd *fileDescription) RemoveXattr(ctx context.Context, name string) error {
|
||||
d := fd.dentry()
|
||||
if err := d.removexattr(ctx, auth.CredentialsFromContext(ctx), name); err != nil {
|
||||
if err := d.removeXattr(ctx, auth.CredentialsFromContext(ctx), name); err != nil {
|
||||
return err
|
||||
}
|
||||
d.InotifyWithParent(ctx, linux.IN_ATTRIB, 0, vfs.InodeEvent)
|
||||
|
||||
@@ -810,8 +810,8 @@ func (fs *Filesystem) BoundEndpointAt(ctx context.Context, rp *vfs.ResolvingPath
|
||||
return nil, syserror.ECONNREFUSED
|
||||
}
|
||||
|
||||
// ListxattrAt implements vfs.FilesystemImpl.ListxattrAt.
|
||||
func (fs *Filesystem) ListxattrAt(ctx context.Context, rp *vfs.ResolvingPath, size uint64) ([]string, error) {
|
||||
// ListXattrAt implements vfs.FilesystemImpl.ListXattrAt.
|
||||
func (fs *Filesystem) ListXattrAt(ctx context.Context, rp *vfs.ResolvingPath, size uint64) ([]string, error) {
|
||||
fs.mu.RLock()
|
||||
_, _, err := fs.walkExistingLocked(ctx, rp)
|
||||
fs.mu.RUnlock()
|
||||
@@ -823,8 +823,8 @@ func (fs *Filesystem) ListxattrAt(ctx context.Context, rp *vfs.ResolvingPath, si
|
||||
return nil, syserror.ENOTSUP
|
||||
}
|
||||
|
||||
// GetxattrAt implements vfs.FilesystemImpl.GetxattrAt.
|
||||
func (fs *Filesystem) GetxattrAt(ctx context.Context, rp *vfs.ResolvingPath, opts vfs.GetxattrOptions) (string, error) {
|
||||
// GetXattrAt implements vfs.FilesystemImpl.GetXattrAt.
|
||||
func (fs *Filesystem) GetXattrAt(ctx context.Context, rp *vfs.ResolvingPath, opts vfs.GetXattrOptions) (string, error) {
|
||||
fs.mu.RLock()
|
||||
_, _, err := fs.walkExistingLocked(ctx, rp)
|
||||
fs.mu.RUnlock()
|
||||
@@ -836,8 +836,8 @@ func (fs *Filesystem) GetxattrAt(ctx context.Context, rp *vfs.ResolvingPath, opt
|
||||
return "", syserror.ENOTSUP
|
||||
}
|
||||
|
||||
// SetxattrAt implements vfs.FilesystemImpl.SetxattrAt.
|
||||
func (fs *Filesystem) SetxattrAt(ctx context.Context, rp *vfs.ResolvingPath, opts vfs.SetxattrOptions) error {
|
||||
// SetXattrAt implements vfs.FilesystemImpl.SetXattrAt.
|
||||
func (fs *Filesystem) SetXattrAt(ctx context.Context, rp *vfs.ResolvingPath, opts vfs.SetXattrOptions) error {
|
||||
fs.mu.RLock()
|
||||
_, _, err := fs.walkExistingLocked(ctx, rp)
|
||||
fs.mu.RUnlock()
|
||||
@@ -849,8 +849,8 @@ func (fs *Filesystem) SetxattrAt(ctx context.Context, rp *vfs.ResolvingPath, opt
|
||||
return syserror.ENOTSUP
|
||||
}
|
||||
|
||||
// RemovexattrAt implements vfs.FilesystemImpl.RemovexattrAt.
|
||||
func (fs *Filesystem) RemovexattrAt(ctx context.Context, rp *vfs.ResolvingPath, name string) error {
|
||||
// RemoveXattrAt implements vfs.FilesystemImpl.RemoveXattrAt.
|
||||
func (fs *Filesystem) RemoveXattrAt(ctx context.Context, rp *vfs.ResolvingPath, name string) error {
|
||||
fs.mu.RLock()
|
||||
_, _, err := fs.walkExistingLocked(ctx, rp)
|
||||
fs.mu.RUnlock()
|
||||
|
||||
@@ -278,13 +278,13 @@ func (d *dentry) copyXattrsLocked(ctx context.Context) error {
|
||||
lowerPop := &vfs.PathOperation{Root: d.lowerVDs[0], Start: d.lowerVDs[0]}
|
||||
upperPop := &vfs.PathOperation{Root: d.upperVD, Start: d.upperVD}
|
||||
|
||||
lowerXattrs, err := vfsObj.ListxattrAt(ctx, d.fs.creds, lowerPop, 0)
|
||||
lowerXattrs, err := vfsObj.ListXattrAt(ctx, d.fs.creds, lowerPop, 0)
|
||||
if err != nil {
|
||||
if err == syserror.EOPNOTSUPP {
|
||||
// There are no guarantees as to the contents of lowerXattrs.
|
||||
return nil
|
||||
}
|
||||
ctx.Warningf("failed to copy up xattrs because ListxattrAt failed: %v", err)
|
||||
ctx.Warningf("failed to copy up xattrs because ListXattrAt failed: %v", err)
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -294,14 +294,14 @@ func (d *dentry) copyXattrsLocked(ctx context.Context) error {
|
||||
continue
|
||||
}
|
||||
|
||||
value, err := vfsObj.GetxattrAt(ctx, d.fs.creds, lowerPop, &vfs.GetxattrOptions{Name: name, Size: 0})
|
||||
value, err := vfsObj.GetXattrAt(ctx, d.fs.creds, lowerPop, &vfs.GetXattrOptions{Name: name, Size: 0})
|
||||
if err != nil {
|
||||
ctx.Warningf("failed to copy up xattrs because GetxattrAt failed: %v", err)
|
||||
ctx.Warningf("failed to copy up xattrs because GetXattrAt failed: %v", err)
|
||||
return err
|
||||
}
|
||||
|
||||
if err := vfsObj.SetxattrAt(ctx, d.fs.creds, upperPop, &vfs.SetxattrOptions{Name: name, Value: value}); err != nil {
|
||||
ctx.Warningf("failed to copy up xattrs because SetxattrAt failed: %v", err)
|
||||
if err := vfsObj.SetXattrAt(ctx, d.fs.creds, upperPop, &vfs.SetXattrOptions{Name: name, Value: value}); err != nil {
|
||||
ctx.Warningf("failed to copy up xattrs because SetXattrAt failed: %v", err)
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
@@ -273,10 +273,10 @@ func (fs *filesystem) lookupLocked(ctx context.Context, parent *dentry, name str
|
||||
|
||||
// Directories are merged with directories from lower layers if they
|
||||
// are not explicitly opaque.
|
||||
opaqueVal, err := vfsObj.GetxattrAt(ctx, fs.creds, &vfs.PathOperation{
|
||||
opaqueVal, err := vfsObj.GetXattrAt(ctx, fs.creds, &vfs.PathOperation{
|
||||
Root: childVD,
|
||||
Start: childVD,
|
||||
}, &vfs.GetxattrOptions{
|
||||
}, &vfs.GetXattrOptions{
|
||||
Name: _OVL_XATTR_OPAQUE,
|
||||
Size: 1,
|
||||
})
|
||||
@@ -671,7 +671,7 @@ func (fs *filesystem) MkdirAt(ctx context.Context, rp *vfs.ResolvingPath, opts v
|
||||
// There may be directories on lower layers (previously hidden by
|
||||
// the whiteout) that the new directory should not be merged with.
|
||||
// Mark it opaque to prevent merging.
|
||||
if err := vfsObj.SetxattrAt(ctx, fs.creds, &pop, &vfs.SetxattrOptions{
|
||||
if err := vfsObj.SetXattrAt(ctx, fs.creds, &pop, &vfs.SetXattrOptions{
|
||||
Name: _OVL_XATTR_OPAQUE,
|
||||
Value: "y",
|
||||
}); err != nil {
|
||||
@@ -1359,8 +1359,8 @@ func isOverlayXattr(name string) bool {
|
||||
return strings.HasPrefix(name, _OVL_XATTR_PREFIX)
|
||||
}
|
||||
|
||||
// ListxattrAt implements vfs.FilesystemImpl.ListxattrAt.
|
||||
func (fs *filesystem) ListxattrAt(ctx context.Context, rp *vfs.ResolvingPath, size uint64) ([]string, error) {
|
||||
// ListXattrAt implements vfs.FilesystemImpl.ListXattrAt.
|
||||
func (fs *filesystem) ListXattrAt(ctx context.Context, rp *vfs.ResolvingPath, size uint64) ([]string, error) {
|
||||
var ds *[]*dentry
|
||||
fs.renameMu.RLock()
|
||||
defer fs.renameMuRUnlockAndCheckDrop(ctx, &ds)
|
||||
@@ -1375,7 +1375,7 @@ func (fs *filesystem) ListxattrAt(ctx context.Context, rp *vfs.ResolvingPath, si
|
||||
func (fs *filesystem) listXattr(ctx context.Context, d *dentry, size uint64) ([]string, error) {
|
||||
vfsObj := d.fs.vfsfs.VirtualFilesystem()
|
||||
top := d.topLayer()
|
||||
names, err := vfsObj.ListxattrAt(ctx, fs.creds, &vfs.PathOperation{Root: top, Start: top}, size)
|
||||
names, err := vfsObj.ListXattrAt(ctx, fs.creds, &vfs.PathOperation{Root: top, Start: top}, size)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -1391,8 +1391,8 @@ func (fs *filesystem) listXattr(ctx context.Context, d *dentry, size uint64) ([]
|
||||
return names[:n], err
|
||||
}
|
||||
|
||||
// GetxattrAt implements vfs.FilesystemImpl.GetxattrAt.
|
||||
func (fs *filesystem) GetxattrAt(ctx context.Context, rp *vfs.ResolvingPath, opts vfs.GetxattrOptions) (string, error) {
|
||||
// GetXattrAt implements vfs.FilesystemImpl.GetXattrAt.
|
||||
func (fs *filesystem) GetXattrAt(ctx context.Context, rp *vfs.ResolvingPath, opts vfs.GetXattrOptions) (string, error) {
|
||||
var ds *[]*dentry
|
||||
fs.renameMu.RLock()
|
||||
defer fs.renameMuRUnlockAndCheckDrop(ctx, &ds)
|
||||
@@ -1404,7 +1404,7 @@ func (fs *filesystem) GetxattrAt(ctx context.Context, rp *vfs.ResolvingPath, opt
|
||||
return fs.getXattr(ctx, d, rp.Credentials(), &opts)
|
||||
}
|
||||
|
||||
func (fs *filesystem) getXattr(ctx context.Context, d *dentry, creds *auth.Credentials, opts *vfs.GetxattrOptions) (string, error) {
|
||||
func (fs *filesystem) getXattr(ctx context.Context, d *dentry, creds *auth.Credentials, opts *vfs.GetXattrOptions) (string, error) {
|
||||
if err := d.checkXattrPermissions(creds, opts.Name, vfs.MayRead); err != nil {
|
||||
return "", err
|
||||
}
|
||||
@@ -1418,11 +1418,11 @@ func (fs *filesystem) getXattr(ctx context.Context, d *dentry, creds *auth.Crede
|
||||
// Analogous to fs/overlayfs/super.c:ovl_other_xattr_get().
|
||||
vfsObj := d.fs.vfsfs.VirtualFilesystem()
|
||||
top := d.topLayer()
|
||||
return vfsObj.GetxattrAt(ctx, fs.creds, &vfs.PathOperation{Root: top, Start: top}, opts)
|
||||
return vfsObj.GetXattrAt(ctx, fs.creds, &vfs.PathOperation{Root: top, Start: top}, opts)
|
||||
}
|
||||
|
||||
// SetxattrAt implements vfs.FilesystemImpl.SetxattrAt.
|
||||
func (fs *filesystem) SetxattrAt(ctx context.Context, rp *vfs.ResolvingPath, opts vfs.SetxattrOptions) error {
|
||||
// SetXattrAt implements vfs.FilesystemImpl.SetXattrAt.
|
||||
func (fs *filesystem) SetXattrAt(ctx context.Context, rp *vfs.ResolvingPath, opts vfs.SetXattrOptions) error {
|
||||
var ds *[]*dentry
|
||||
fs.renameMu.RLock()
|
||||
defer fs.renameMuRUnlockAndCheckDrop(ctx, &ds)
|
||||
@@ -1435,7 +1435,7 @@ func (fs *filesystem) SetxattrAt(ctx context.Context, rp *vfs.ResolvingPath, opt
|
||||
}
|
||||
|
||||
// Precondition: fs.renameMu must be locked.
|
||||
func (fs *filesystem) setXattrLocked(ctx context.Context, d *dentry, mnt *vfs.Mount, creds *auth.Credentials, opts *vfs.SetxattrOptions) error {
|
||||
func (fs *filesystem) setXattrLocked(ctx context.Context, d *dentry, mnt *vfs.Mount, creds *auth.Credentials, opts *vfs.SetXattrOptions) error {
|
||||
if err := d.checkXattrPermissions(creds, opts.Name, vfs.MayWrite); err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -1455,11 +1455,11 @@ func (fs *filesystem) setXattrLocked(ctx context.Context, d *dentry, mnt *vfs.Mo
|
||||
return err
|
||||
}
|
||||
vfsObj := d.fs.vfsfs.VirtualFilesystem()
|
||||
return vfsObj.SetxattrAt(ctx, fs.creds, &vfs.PathOperation{Root: d.upperVD, Start: d.upperVD}, opts)
|
||||
return vfsObj.SetXattrAt(ctx, fs.creds, &vfs.PathOperation{Root: d.upperVD, Start: d.upperVD}, opts)
|
||||
}
|
||||
|
||||
// RemovexattrAt implements vfs.FilesystemImpl.RemovexattrAt.
|
||||
func (fs *filesystem) RemovexattrAt(ctx context.Context, rp *vfs.ResolvingPath, name string) error {
|
||||
// RemoveXattrAt implements vfs.FilesystemImpl.RemoveXattrAt.
|
||||
func (fs *filesystem) RemoveXattrAt(ctx context.Context, rp *vfs.ResolvingPath, name string) error {
|
||||
var ds *[]*dentry
|
||||
fs.renameMu.RLock()
|
||||
defer fs.renameMuRUnlockAndCheckDrop(ctx, &ds)
|
||||
@@ -1477,7 +1477,7 @@ func (fs *filesystem) removeXattrLocked(ctx context.Context, d *dentry, mnt *vfs
|
||||
return err
|
||||
}
|
||||
|
||||
// Like SetxattrAt, return EOPNOTSUPP when removing an overlay attribute.
|
||||
// Like SetXattrAt, return EOPNOTSUPP when removing an overlay attribute.
|
||||
// Linux passes the remove request to xattr_handler->set.
|
||||
// See fs/xattr.c:vfs_removexattr().
|
||||
if isOverlayXattr(name) {
|
||||
@@ -1492,7 +1492,7 @@ func (fs *filesystem) removeXattrLocked(ctx context.Context, d *dentry, mnt *vfs
|
||||
return err
|
||||
}
|
||||
vfsObj := d.fs.vfsfs.VirtualFilesystem()
|
||||
return vfsObj.RemovexattrAt(ctx, fs.creds, &vfs.PathOperation{Root: d.upperVD, Start: d.upperVD}, name)
|
||||
return vfsObj.RemoveXattrAt(ctx, fs.creds, &vfs.PathOperation{Root: d.upperVD, Start: d.upperVD}, name)
|
||||
}
|
||||
|
||||
// PrependPath implements vfs.FilesystemImpl.PrependPath.
|
||||
|
||||
@@ -632,26 +632,26 @@ func (fd *fileDescription) dentry() *dentry {
|
||||
return fd.vfsfd.Dentry().Impl().(*dentry)
|
||||
}
|
||||
|
||||
// Listxattr implements vfs.FileDescriptionImpl.Listxattr.
|
||||
func (fd *fileDescription) Listxattr(ctx context.Context, size uint64) ([]string, error) {
|
||||
// ListXattr implements vfs.FileDescriptionImpl.ListXattr.
|
||||
func (fd *fileDescription) ListXattr(ctx context.Context, size uint64) ([]string, error) {
|
||||
return fd.filesystem().listXattr(ctx, fd.dentry(), size)
|
||||
}
|
||||
|
||||
// Getxattr implements vfs.FileDescriptionImpl.Getxattr.
|
||||
func (fd *fileDescription) Getxattr(ctx context.Context, opts vfs.GetxattrOptions) (string, error) {
|
||||
// GetXattr implements vfs.FileDescriptionImpl.GetXattr.
|
||||
func (fd *fileDescription) GetXattr(ctx context.Context, opts vfs.GetXattrOptions) (string, error) {
|
||||
return fd.filesystem().getXattr(ctx, fd.dentry(), auth.CredentialsFromContext(ctx), &opts)
|
||||
}
|
||||
|
||||
// Setxattr implements vfs.FileDescriptionImpl.Setxattr.
|
||||
func (fd *fileDescription) Setxattr(ctx context.Context, opts vfs.SetxattrOptions) error {
|
||||
// SetXattr implements vfs.FileDescriptionImpl.SetXattr.
|
||||
func (fd *fileDescription) SetXattr(ctx context.Context, opts vfs.SetXattrOptions) error {
|
||||
fs := fd.filesystem()
|
||||
fs.renameMu.RLock()
|
||||
defer fs.renameMu.RUnlock()
|
||||
return fs.setXattrLocked(ctx, fd.dentry(), fd.vfsfd.Mount(), auth.CredentialsFromContext(ctx), &opts)
|
||||
}
|
||||
|
||||
// Removexattr implements vfs.FileDescriptionImpl.Removexattr.
|
||||
func (fd *fileDescription) Removexattr(ctx context.Context, name string) error {
|
||||
// RemoveXattr implements vfs.FileDescriptionImpl.RemoveXattr.
|
||||
func (fd *fileDescription) RemoveXattr(ctx context.Context, name string) error {
|
||||
fs := fd.filesystem()
|
||||
fs.renameMu.RLock()
|
||||
defer fs.renameMu.RUnlock()
|
||||
|
||||
@@ -792,37 +792,37 @@ func (fs *filesystem) BoundEndpointAt(ctx context.Context, rp *vfs.ResolvingPath
|
||||
}
|
||||
}
|
||||
|
||||
// ListxattrAt implements vfs.FilesystemImpl.ListxattrAt.
|
||||
func (fs *filesystem) ListxattrAt(ctx context.Context, rp *vfs.ResolvingPath, size uint64) ([]string, error) {
|
||||
// ListXattrAt implements vfs.FilesystemImpl.ListXattrAt.
|
||||
func (fs *filesystem) ListXattrAt(ctx context.Context, rp *vfs.ResolvingPath, size uint64) ([]string, error) {
|
||||
fs.mu.RLock()
|
||||
defer fs.mu.RUnlock()
|
||||
d, err := resolveLocked(ctx, rp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return d.inode.listxattr(size)
|
||||
return d.inode.listXattr(size)
|
||||
}
|
||||
|
||||
// GetxattrAt implements vfs.FilesystemImpl.GetxattrAt.
|
||||
func (fs *filesystem) GetxattrAt(ctx context.Context, rp *vfs.ResolvingPath, opts vfs.GetxattrOptions) (string, error) {
|
||||
// GetXattrAt implements vfs.FilesystemImpl.GetXattrAt.
|
||||
func (fs *filesystem) GetXattrAt(ctx context.Context, rp *vfs.ResolvingPath, opts vfs.GetXattrOptions) (string, error) {
|
||||
fs.mu.RLock()
|
||||
defer fs.mu.RUnlock()
|
||||
d, err := resolveLocked(ctx, rp)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return d.inode.getxattr(rp.Credentials(), &opts)
|
||||
return d.inode.getXattr(rp.Credentials(), &opts)
|
||||
}
|
||||
|
||||
// SetxattrAt implements vfs.FilesystemImpl.SetxattrAt.
|
||||
func (fs *filesystem) SetxattrAt(ctx context.Context, rp *vfs.ResolvingPath, opts vfs.SetxattrOptions) error {
|
||||
// SetXattrAt implements vfs.FilesystemImpl.SetXattrAt.
|
||||
func (fs *filesystem) SetXattrAt(ctx context.Context, rp *vfs.ResolvingPath, opts vfs.SetXattrOptions) error {
|
||||
fs.mu.RLock()
|
||||
d, err := resolveLocked(ctx, rp)
|
||||
if err != nil {
|
||||
fs.mu.RUnlock()
|
||||
return err
|
||||
}
|
||||
if err := d.inode.setxattr(rp.Credentials(), &opts); err != nil {
|
||||
if err := d.inode.setXattr(rp.Credentials(), &opts); err != nil {
|
||||
fs.mu.RUnlock()
|
||||
return err
|
||||
}
|
||||
@@ -832,15 +832,15 @@ func (fs *filesystem) SetxattrAt(ctx context.Context, rp *vfs.ResolvingPath, opt
|
||||
return nil
|
||||
}
|
||||
|
||||
// RemovexattrAt implements vfs.FilesystemImpl.RemovexattrAt.
|
||||
func (fs *filesystem) RemovexattrAt(ctx context.Context, rp *vfs.ResolvingPath, name string) error {
|
||||
// RemoveXattrAt implements vfs.FilesystemImpl.RemoveXattrAt.
|
||||
func (fs *filesystem) RemoveXattrAt(ctx context.Context, rp *vfs.ResolvingPath, name string) error {
|
||||
fs.mu.RLock()
|
||||
d, err := resolveLocked(ctx, rp)
|
||||
if err != nil {
|
||||
fs.mu.RUnlock()
|
||||
return err
|
||||
}
|
||||
if err := d.inode.removexattr(rp.Credentials(), name); err != nil {
|
||||
if err := d.inode.removeXattr(rp.Credentials(), name); err != nil {
|
||||
fs.mu.RUnlock()
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -626,29 +626,29 @@ func (i *inode) touchCMtimeLocked() {
|
||||
atomic.StoreInt64(&i.ctime, now)
|
||||
}
|
||||
|
||||
func (i *inode) listxattr(size uint64) ([]string, error) {
|
||||
return i.xattrs.Listxattr(size)
|
||||
func (i *inode) listXattr(size uint64) ([]string, error) {
|
||||
return i.xattrs.ListXattr(size)
|
||||
}
|
||||
|
||||
func (i *inode) getxattr(creds *auth.Credentials, opts *vfs.GetxattrOptions) (string, error) {
|
||||
func (i *inode) getXattr(creds *auth.Credentials, opts *vfs.GetXattrOptions) (string, error) {
|
||||
if err := i.checkXattrPermissions(creds, opts.Name, vfs.MayRead); err != nil {
|
||||
return "", err
|
||||
}
|
||||
return i.xattrs.Getxattr(opts)
|
||||
return i.xattrs.GetXattr(opts)
|
||||
}
|
||||
|
||||
func (i *inode) setxattr(creds *auth.Credentials, opts *vfs.SetxattrOptions) error {
|
||||
func (i *inode) setXattr(creds *auth.Credentials, opts *vfs.SetXattrOptions) error {
|
||||
if err := i.checkXattrPermissions(creds, opts.Name, vfs.MayWrite); err != nil {
|
||||
return err
|
||||
}
|
||||
return i.xattrs.Setxattr(opts)
|
||||
return i.xattrs.SetXattr(opts)
|
||||
}
|
||||
|
||||
func (i *inode) removexattr(creds *auth.Credentials, name string) error {
|
||||
func (i *inode) removeXattr(creds *auth.Credentials, name string) error {
|
||||
if err := i.checkXattrPermissions(creds, name, vfs.MayWrite); err != nil {
|
||||
return err
|
||||
}
|
||||
return i.xattrs.Removexattr(name)
|
||||
return i.xattrs.RemoveXattr(name)
|
||||
}
|
||||
|
||||
func (i *inode) checkXattrPermissions(creds *auth.Credentials, name string, ats vfs.AccessTypes) error {
|
||||
@@ -712,20 +712,20 @@ func (fd *fileDescription) StatFS(ctx context.Context) (linux.Statfs, error) {
|
||||
return globalStatfs, nil
|
||||
}
|
||||
|
||||
// Listxattr implements vfs.FileDescriptionImpl.Listxattr.
|
||||
func (fd *fileDescription) Listxattr(ctx context.Context, size uint64) ([]string, error) {
|
||||
return fd.inode().listxattr(size)
|
||||
// ListXattr implements vfs.FileDescriptionImpl.ListXattr.
|
||||
func (fd *fileDescription) ListXattr(ctx context.Context, size uint64) ([]string, error) {
|
||||
return fd.inode().listXattr(size)
|
||||
}
|
||||
|
||||
// Getxattr implements vfs.FileDescriptionImpl.Getxattr.
|
||||
func (fd *fileDescription) Getxattr(ctx context.Context, opts vfs.GetxattrOptions) (string, error) {
|
||||
return fd.inode().getxattr(auth.CredentialsFromContext(ctx), &opts)
|
||||
// GetXattr implements vfs.FileDescriptionImpl.GetXattr.
|
||||
func (fd *fileDescription) GetXattr(ctx context.Context, opts vfs.GetXattrOptions) (string, error) {
|
||||
return fd.inode().getXattr(auth.CredentialsFromContext(ctx), &opts)
|
||||
}
|
||||
|
||||
// Setxattr implements vfs.FileDescriptionImpl.Setxattr.
|
||||
func (fd *fileDescription) Setxattr(ctx context.Context, opts vfs.SetxattrOptions) error {
|
||||
// SetXattr implements vfs.FileDescriptionImpl.SetXattr.
|
||||
func (fd *fileDescription) SetXattr(ctx context.Context, opts vfs.SetXattrOptions) error {
|
||||
d := fd.dentry()
|
||||
if err := d.inode.setxattr(auth.CredentialsFromContext(ctx), &opts); err != nil {
|
||||
if err := d.inode.setXattr(auth.CredentialsFromContext(ctx), &opts); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -734,10 +734,10 @@ func (fd *fileDescription) Setxattr(ctx context.Context, opts vfs.SetxattrOption
|
||||
return nil
|
||||
}
|
||||
|
||||
// Removexattr implements vfs.FileDescriptionImpl.Removexattr.
|
||||
func (fd *fileDescription) Removexattr(ctx context.Context, name string) error {
|
||||
// RemoveXattr implements vfs.FileDescriptionImpl.RemoveXattr.
|
||||
func (fd *fileDescription) RemoveXattr(ctx context.Context, name string) error {
|
||||
d := fd.dentry()
|
||||
if err := d.inode.removexattr(auth.CredentialsFromContext(ctx), name); err != nil {
|
||||
if err := d.inode.removeXattr(auth.CredentialsFromContext(ctx), name); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
|
||||
@@ -179,10 +179,10 @@ func (fs *filesystem) verifyChild(ctx context.Context, parent *dentry, child *de
|
||||
// corresponding Merkle tree file.
|
||||
// This is the offset of the root hash for child in its parent's Merkle
|
||||
// tree file.
|
||||
off, err := vfsObj.GetxattrAt(ctx, fs.creds, &vfs.PathOperation{
|
||||
off, err := vfsObj.GetXattrAt(ctx, fs.creds, &vfs.PathOperation{
|
||||
Root: child.lowerMerkleVD,
|
||||
Start: child.lowerMerkleVD,
|
||||
}, &vfs.GetxattrOptions{
|
||||
}, &vfs.GetXattrOptions{
|
||||
Name: merkleOffsetInParentXattr,
|
||||
// Offset is a 32 bit integer.
|
||||
Size: sizeOfInt32,
|
||||
@@ -233,7 +233,7 @@ func (fs *filesystem) verifyChild(ctx context.Context, parent *dentry, child *de
|
||||
// dataSize is the size of raw data for the Merkle tree. For a file,
|
||||
// dataSize is the size of the whole file. For a directory, dataSize is
|
||||
// the size of all its children's root hashes.
|
||||
dataSize, err := parentMerkleFD.Getxattr(ctx, &vfs.GetxattrOptions{
|
||||
dataSize, err := parentMerkleFD.GetXattr(ctx, &vfs.GetXattrOptions{
|
||||
Name: merkleSizeXattr,
|
||||
Size: sizeOfInt32,
|
||||
})
|
||||
@@ -660,8 +660,8 @@ func (fs *filesystem) BoundEndpointAt(ctx context.Context, rp *vfs.ResolvingPath
|
||||
return nil, syserror.ECONNREFUSED
|
||||
}
|
||||
|
||||
// ListxattrAt implements vfs.FilesystemImpl.ListxattrAt.
|
||||
func (fs *filesystem) ListxattrAt(ctx context.Context, rp *vfs.ResolvingPath, size uint64) ([]string, error) {
|
||||
// ListXattrAt implements vfs.FilesystemImpl.ListXattrAt.
|
||||
func (fs *filesystem) ListXattrAt(ctx context.Context, rp *vfs.ResolvingPath, size uint64) ([]string, error) {
|
||||
var ds *[]*dentry
|
||||
fs.renameMu.RLock()
|
||||
defer fs.renameMuRUnlockAndCheckDrop(ctx, &ds)
|
||||
@@ -670,14 +670,14 @@ func (fs *filesystem) ListxattrAt(ctx context.Context, rp *vfs.ResolvingPath, si
|
||||
return nil, err
|
||||
}
|
||||
lowerVD := d.lowerVD
|
||||
return fs.vfsfs.VirtualFilesystem().ListxattrAt(ctx, d.fs.creds, &vfs.PathOperation{
|
||||
return fs.vfsfs.VirtualFilesystem().ListXattrAt(ctx, d.fs.creds, &vfs.PathOperation{
|
||||
Root: lowerVD,
|
||||
Start: lowerVD,
|
||||
}, size)
|
||||
}
|
||||
|
||||
// GetxattrAt implements vfs.FilesystemImpl.GetxattrAt.
|
||||
func (fs *filesystem) GetxattrAt(ctx context.Context, rp *vfs.ResolvingPath, opts vfs.GetxattrOptions) (string, error) {
|
||||
// GetXattrAt implements vfs.FilesystemImpl.GetXattrAt.
|
||||
func (fs *filesystem) GetXattrAt(ctx context.Context, rp *vfs.ResolvingPath, opts vfs.GetXattrOptions) (string, error) {
|
||||
var ds *[]*dentry
|
||||
fs.renameMu.RLock()
|
||||
defer fs.renameMuRUnlockAndCheckDrop(ctx, &ds)
|
||||
@@ -686,20 +686,20 @@ func (fs *filesystem) GetxattrAt(ctx context.Context, rp *vfs.ResolvingPath, opt
|
||||
return "", err
|
||||
}
|
||||
lowerVD := d.lowerVD
|
||||
return fs.vfsfs.VirtualFilesystem().GetxattrAt(ctx, d.fs.creds, &vfs.PathOperation{
|
||||
return fs.vfsfs.VirtualFilesystem().GetXattrAt(ctx, d.fs.creds, &vfs.PathOperation{
|
||||
Root: lowerVD,
|
||||
Start: lowerVD,
|
||||
}, &opts)
|
||||
}
|
||||
|
||||
// SetxattrAt implements vfs.FilesystemImpl.SetxattrAt.
|
||||
func (fs *filesystem) SetxattrAt(ctx context.Context, rp *vfs.ResolvingPath, opts vfs.SetxattrOptions) error {
|
||||
// SetXattrAt implements vfs.FilesystemImpl.SetXattrAt.
|
||||
func (fs *filesystem) SetXattrAt(ctx context.Context, rp *vfs.ResolvingPath, opts vfs.SetXattrOptions) error {
|
||||
// Verity file system is read-only.
|
||||
return syserror.EROFS
|
||||
}
|
||||
|
||||
// RemovexattrAt implements vfs.FilesystemImpl.RemovexattrAt.
|
||||
func (fs *filesystem) RemovexattrAt(ctx context.Context, rp *vfs.ResolvingPath, name string) error {
|
||||
// RemoveXattrAt implements vfs.FilesystemImpl.RemoveXattrAt.
|
||||
func (fs *filesystem) RemoveXattrAt(ctx context.Context, rp *vfs.ResolvingPath, name string) error {
|
||||
// Verity file system is read-only.
|
||||
return syserror.EROFS
|
||||
}
|
||||
|
||||
@@ -93,16 +93,16 @@ func Override() {
|
||||
s.Table[165] = syscalls.Supported("mount", Mount)
|
||||
s.Table[166] = syscalls.Supported("umount2", Umount2)
|
||||
s.Table[187] = syscalls.Supported("readahead", Readahead)
|
||||
s.Table[188] = syscalls.Supported("setxattr", Setxattr)
|
||||
s.Table[188] = syscalls.Supported("setxattr", SetXattr)
|
||||
s.Table[189] = syscalls.Supported("lsetxattr", Lsetxattr)
|
||||
s.Table[190] = syscalls.Supported("fsetxattr", Fsetxattr)
|
||||
s.Table[191] = syscalls.Supported("getxattr", Getxattr)
|
||||
s.Table[191] = syscalls.Supported("getxattr", GetXattr)
|
||||
s.Table[192] = syscalls.Supported("lgetxattr", Lgetxattr)
|
||||
s.Table[193] = syscalls.Supported("fgetxattr", Fgetxattr)
|
||||
s.Table[194] = syscalls.Supported("listxattr", Listxattr)
|
||||
s.Table[194] = syscalls.Supported("listxattr", ListXattr)
|
||||
s.Table[195] = syscalls.Supported("llistxattr", Llistxattr)
|
||||
s.Table[196] = syscalls.Supported("flistxattr", Flistxattr)
|
||||
s.Table[197] = syscalls.Supported("removexattr", Removexattr)
|
||||
s.Table[197] = syscalls.Supported("removexattr", RemoveXattr)
|
||||
s.Table[198] = syscalls.Supported("lremovexattr", Lremovexattr)
|
||||
s.Table[199] = syscalls.Supported("fremovexattr", Fremovexattr)
|
||||
s.Table[209] = syscalls.PartiallySupported("io_submit", IoSubmit, "Generally supported with exceptions. User ring optimizations are not implemented.", []string{"gvisor.dev/issue/204"})
|
||||
@@ -163,16 +163,16 @@ func Override() {
|
||||
|
||||
// Override ARM64.
|
||||
s = linux.ARM64
|
||||
s.Table[5] = syscalls.Supported("setxattr", Setxattr)
|
||||
s.Table[5] = syscalls.Supported("setxattr", SetXattr)
|
||||
s.Table[6] = syscalls.Supported("lsetxattr", Lsetxattr)
|
||||
s.Table[7] = syscalls.Supported("fsetxattr", Fsetxattr)
|
||||
s.Table[8] = syscalls.Supported("getxattr", Getxattr)
|
||||
s.Table[8] = syscalls.Supported("getxattr", GetXattr)
|
||||
s.Table[9] = syscalls.Supported("lgetxattr", Lgetxattr)
|
||||
s.Table[10] = syscalls.Supported("fgetxattr", Fgetxattr)
|
||||
s.Table[11] = syscalls.Supported("listxattr", Listxattr)
|
||||
s.Table[11] = syscalls.Supported("listxattr", ListXattr)
|
||||
s.Table[12] = syscalls.Supported("llistxattr", Llistxattr)
|
||||
s.Table[13] = syscalls.Supported("flistxattr", Flistxattr)
|
||||
s.Table[14] = syscalls.Supported("removexattr", Removexattr)
|
||||
s.Table[14] = syscalls.Supported("removexattr", RemoveXattr)
|
||||
s.Table[15] = syscalls.Supported("lremovexattr", Lremovexattr)
|
||||
s.Table[16] = syscalls.Supported("fremovexattr", Fremovexattr)
|
||||
s.Table[17] = syscalls.Supported("getcwd", Getcwd)
|
||||
|
||||
@@ -26,8 +26,8 @@ import (
|
||||
"gvisor.dev/gvisor/pkg/usermem"
|
||||
)
|
||||
|
||||
// Listxattr implements Linux syscall listxattr(2).
|
||||
func Listxattr(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
// ListXattr implements Linux syscall listxattr(2).
|
||||
func ListXattr(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
return listxattr(t, args, followFinalSymlink)
|
||||
}
|
||||
|
||||
@@ -51,7 +51,7 @@ func listxattr(t *kernel.Task, args arch.SyscallArguments, shouldFollowFinalSyml
|
||||
}
|
||||
defer tpop.Release(t)
|
||||
|
||||
names, err := t.Kernel().VFS().ListxattrAt(t, t.Credentials(), &tpop.pop, uint64(size))
|
||||
names, err := t.Kernel().VFS().ListXattrAt(t, t.Credentials(), &tpop.pop, uint64(size))
|
||||
if err != nil {
|
||||
return 0, nil, err
|
||||
}
|
||||
@@ -74,7 +74,7 @@ func Flistxattr(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.Sy
|
||||
}
|
||||
defer file.DecRef(t)
|
||||
|
||||
names, err := file.Listxattr(t, uint64(size))
|
||||
names, err := file.ListXattr(t, uint64(size))
|
||||
if err != nil {
|
||||
return 0, nil, err
|
||||
}
|
||||
@@ -85,8 +85,8 @@ func Flistxattr(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.Sy
|
||||
return uintptr(n), nil, nil
|
||||
}
|
||||
|
||||
// Getxattr implements Linux syscall getxattr(2).
|
||||
func Getxattr(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
// GetXattr implements Linux syscall getxattr(2).
|
||||
func GetXattr(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
return getxattr(t, args, followFinalSymlink)
|
||||
}
|
||||
|
||||
@@ -116,7 +116,7 @@ func getxattr(t *kernel.Task, args arch.SyscallArguments, shouldFollowFinalSymli
|
||||
return 0, nil, err
|
||||
}
|
||||
|
||||
value, err := t.Kernel().VFS().GetxattrAt(t, t.Credentials(), &tpop.pop, &vfs.GetxattrOptions{
|
||||
value, err := t.Kernel().VFS().GetXattrAt(t, t.Credentials(), &tpop.pop, &vfs.GetXattrOptions{
|
||||
Name: name,
|
||||
Size: uint64(size),
|
||||
})
|
||||
@@ -148,7 +148,7 @@ func Fgetxattr(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.Sys
|
||||
return 0, nil, err
|
||||
}
|
||||
|
||||
value, err := file.Getxattr(t, &vfs.GetxattrOptions{Name: name, Size: uint64(size)})
|
||||
value, err := file.GetXattr(t, &vfs.GetXattrOptions{Name: name, Size: uint64(size)})
|
||||
if err != nil {
|
||||
return 0, nil, err
|
||||
}
|
||||
@@ -159,8 +159,8 @@ func Fgetxattr(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.Sys
|
||||
return uintptr(n), nil, nil
|
||||
}
|
||||
|
||||
// Setxattr implements Linux syscall setxattr(2).
|
||||
func Setxattr(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
// SetXattr implements Linux syscall setxattr(2).
|
||||
func SetXattr(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
return 0, nil, setxattr(t, args, followFinalSymlink)
|
||||
}
|
||||
|
||||
@@ -199,7 +199,7 @@ func setxattr(t *kernel.Task, args arch.SyscallArguments, shouldFollowFinalSymli
|
||||
return err
|
||||
}
|
||||
|
||||
return t.Kernel().VFS().SetxattrAt(t, t.Credentials(), &tpop.pop, &vfs.SetxattrOptions{
|
||||
return t.Kernel().VFS().SetXattrAt(t, t.Credentials(), &tpop.pop, &vfs.SetXattrOptions{
|
||||
Name: name,
|
||||
Value: value,
|
||||
Flags: uint32(flags),
|
||||
@@ -233,15 +233,15 @@ func Fsetxattr(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.Sys
|
||||
return 0, nil, err
|
||||
}
|
||||
|
||||
return 0, nil, file.Setxattr(t, &vfs.SetxattrOptions{
|
||||
return 0, nil, file.SetXattr(t, &vfs.SetXattrOptions{
|
||||
Name: name,
|
||||
Value: value,
|
||||
Flags: uint32(flags),
|
||||
})
|
||||
}
|
||||
|
||||
// Removexattr implements Linux syscall removexattr(2).
|
||||
func Removexattr(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
// RemoveXattr implements Linux syscall removexattr(2).
|
||||
func RemoveXattr(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
return 0, nil, removexattr(t, args, followFinalSymlink)
|
||||
}
|
||||
|
||||
@@ -269,7 +269,7 @@ func removexattr(t *kernel.Task, args arch.SyscallArguments, shouldFollowFinalSy
|
||||
return err
|
||||
}
|
||||
|
||||
return t.Kernel().VFS().RemovexattrAt(t, t.Credentials(), &tpop.pop, name)
|
||||
return t.Kernel().VFS().RemoveXattrAt(t, t.Credentials(), &tpop.pop, name)
|
||||
}
|
||||
|
||||
// Fremovexattr implements Linux syscall fremovexattr(2).
|
||||
@@ -288,7 +288,7 @@ func Fremovexattr(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.
|
||||
return 0, nil, err
|
||||
}
|
||||
|
||||
return 0, nil, file.Removexattr(t, name)
|
||||
return 0, nil, file.RemoveXattr(t, name)
|
||||
}
|
||||
|
||||
func copyInXattrName(t *kernel.Task, nameAddr usermem.Addr) (string, error) {
|
||||
|
||||
@@ -245,32 +245,32 @@ func (fs *anonFilesystem) BoundEndpointAt(ctx context.Context, rp *ResolvingPath
|
||||
return nil, syserror.ECONNREFUSED
|
||||
}
|
||||
|
||||
// ListxattrAt implements FilesystemImpl.ListxattrAt.
|
||||
func (fs *anonFilesystem) ListxattrAt(ctx context.Context, rp *ResolvingPath, size uint64) ([]string, error) {
|
||||
// ListXattrAt implements FilesystemImpl.ListXattrAt.
|
||||
func (fs *anonFilesystem) ListXattrAt(ctx context.Context, rp *ResolvingPath, size uint64) ([]string, error) {
|
||||
if !rp.Done() {
|
||||
return nil, syserror.ENOTDIR
|
||||
}
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
// GetxattrAt implements FilesystemImpl.GetxattrAt.
|
||||
func (fs *anonFilesystem) GetxattrAt(ctx context.Context, rp *ResolvingPath, opts GetxattrOptions) (string, error) {
|
||||
// GetXattrAt implements FilesystemImpl.GetXattrAt.
|
||||
func (fs *anonFilesystem) GetXattrAt(ctx context.Context, rp *ResolvingPath, opts GetXattrOptions) (string, error) {
|
||||
if !rp.Done() {
|
||||
return "", syserror.ENOTDIR
|
||||
}
|
||||
return "", syserror.ENOTSUP
|
||||
}
|
||||
|
||||
// SetxattrAt implements FilesystemImpl.SetxattrAt.
|
||||
func (fs *anonFilesystem) SetxattrAt(ctx context.Context, rp *ResolvingPath, opts SetxattrOptions) error {
|
||||
// SetXattrAt implements FilesystemImpl.SetXattrAt.
|
||||
func (fs *anonFilesystem) SetXattrAt(ctx context.Context, rp *ResolvingPath, opts SetXattrOptions) error {
|
||||
if !rp.Done() {
|
||||
return syserror.ENOTDIR
|
||||
}
|
||||
return syserror.EPERM
|
||||
}
|
||||
|
||||
// RemovexattrAt implements FilesystemImpl.RemovexattrAt.
|
||||
func (fs *anonFilesystem) RemovexattrAt(ctx context.Context, rp *ResolvingPath, name string) error {
|
||||
// RemoveXattrAt implements FilesystemImpl.RemoveXattrAt.
|
||||
func (fs *anonFilesystem) RemoveXattrAt(ctx context.Context, rp *ResolvingPath, name string) error {
|
||||
if !rp.Done() {
|
||||
return syserror.ENOTDIR
|
||||
}
|
||||
|
||||
@@ -101,7 +101,7 @@ type FileDescriptionOptions struct {
|
||||
|
||||
// If UseDentryMetadata is true, calls to FileDescription methods that
|
||||
// interact with file and filesystem metadata (Stat, SetStat, StatFS,
|
||||
// Listxattr, Getxattr, Setxattr, Removexattr) are implemented by calling
|
||||
// ListXattr, GetXattr, SetXattr, RemoveXattr) are implemented by calling
|
||||
// the corresponding FilesystemImpl methods instead of the corresponding
|
||||
// FileDescriptionImpl methods.
|
||||
//
|
||||
@@ -420,19 +420,19 @@ type FileDescriptionImpl interface {
|
||||
// Ioctl implements the ioctl(2) syscall.
|
||||
Ioctl(ctx context.Context, uio usermem.IO, args arch.SyscallArguments) (uintptr, error)
|
||||
|
||||
// Listxattr returns all extended attribute names for the file.
|
||||
Listxattr(ctx context.Context, size uint64) ([]string, error)
|
||||
// ListXattr returns all extended attribute names for the file.
|
||||
ListXattr(ctx context.Context, size uint64) ([]string, error)
|
||||
|
||||
// Getxattr returns the value associated with the given extended attribute
|
||||
// GetXattr returns the value associated with the given extended attribute
|
||||
// for the file.
|
||||
Getxattr(ctx context.Context, opts GetxattrOptions) (string, error)
|
||||
GetXattr(ctx context.Context, opts GetXattrOptions) (string, error)
|
||||
|
||||
// Setxattr changes the value associated with the given extended attribute
|
||||
// SetXattr changes the value associated with the given extended attribute
|
||||
// for the file.
|
||||
Setxattr(ctx context.Context, opts SetxattrOptions) error
|
||||
SetXattr(ctx context.Context, opts SetXattrOptions) error
|
||||
|
||||
// Removexattr removes the given extended attribute from the file.
|
||||
Removexattr(ctx context.Context, name string) error
|
||||
// RemoveXattr removes the given extended attribute from the file.
|
||||
RemoveXattr(ctx context.Context, name string) error
|
||||
|
||||
// LockBSD tries to acquire a BSD-style advisory file lock.
|
||||
LockBSD(ctx context.Context, uid lock.UniqueID, t lock.LockType, block lock.Blocker) error
|
||||
@@ -635,25 +635,25 @@ func (fd *FileDescription) Ioctl(ctx context.Context, uio usermem.IO, args arch.
|
||||
return fd.impl.Ioctl(ctx, uio, args)
|
||||
}
|
||||
|
||||
// Listxattr returns all extended attribute names for the file represented by
|
||||
// ListXattr returns all extended attribute names for the file represented by
|
||||
// fd.
|
||||
//
|
||||
// If the size of the list (including a NUL terminating byte after every entry)
|
||||
// would exceed size, ERANGE may be returned. Note that implementations
|
||||
// are free to ignore size entirely and return without error). In all cases,
|
||||
// if size is 0, the list should be returned without error, regardless of size.
|
||||
func (fd *FileDescription) Listxattr(ctx context.Context, size uint64) ([]string, error) {
|
||||
func (fd *FileDescription) ListXattr(ctx context.Context, size uint64) ([]string, error) {
|
||||
if fd.opts.UseDentryMetadata {
|
||||
vfsObj := fd.vd.mount.vfs
|
||||
rp := vfsObj.getResolvingPath(auth.CredentialsFromContext(ctx), &PathOperation{
|
||||
Root: fd.vd,
|
||||
Start: fd.vd,
|
||||
})
|
||||
names, err := fd.vd.mount.fs.impl.ListxattrAt(ctx, rp, size)
|
||||
names, err := fd.vd.mount.fs.impl.ListXattrAt(ctx, rp, size)
|
||||
vfsObj.putResolvingPath(ctx, rp)
|
||||
return names, err
|
||||
}
|
||||
names, err := fd.impl.Listxattr(ctx, size)
|
||||
names, err := fd.impl.ListXattr(ctx, size)
|
||||
if err == syserror.ENOTSUP {
|
||||
// Linux doesn't actually return ENOTSUP in this case; instead,
|
||||
// fs/xattr.c:vfs_listxattr() falls back to allowing the security
|
||||
@@ -664,57 +664,57 @@ func (fd *FileDescription) Listxattr(ctx context.Context, size uint64) ([]string
|
||||
return names, err
|
||||
}
|
||||
|
||||
// Getxattr returns the value associated with the given extended attribute for
|
||||
// GetXattr returns the value associated with the given extended attribute for
|
||||
// the file represented by fd.
|
||||
//
|
||||
// If the size of the return value exceeds opts.Size, ERANGE may be returned
|
||||
// (note that implementations are free to ignore opts.Size entirely and return
|
||||
// without error). In all cases, if opts.Size is 0, the value should be
|
||||
// returned without error, regardless of size.
|
||||
func (fd *FileDescription) Getxattr(ctx context.Context, opts *GetxattrOptions) (string, error) {
|
||||
func (fd *FileDescription) GetXattr(ctx context.Context, opts *GetXattrOptions) (string, error) {
|
||||
if fd.opts.UseDentryMetadata {
|
||||
vfsObj := fd.vd.mount.vfs
|
||||
rp := vfsObj.getResolvingPath(auth.CredentialsFromContext(ctx), &PathOperation{
|
||||
Root: fd.vd,
|
||||
Start: fd.vd,
|
||||
})
|
||||
val, err := fd.vd.mount.fs.impl.GetxattrAt(ctx, rp, *opts)
|
||||
val, err := fd.vd.mount.fs.impl.GetXattrAt(ctx, rp, *opts)
|
||||
vfsObj.putResolvingPath(ctx, rp)
|
||||
return val, err
|
||||
}
|
||||
return fd.impl.Getxattr(ctx, *opts)
|
||||
return fd.impl.GetXattr(ctx, *opts)
|
||||
}
|
||||
|
||||
// Setxattr changes the value associated with the given extended attribute for
|
||||
// SetXattr changes the value associated with the given extended attribute for
|
||||
// the file represented by fd.
|
||||
func (fd *FileDescription) Setxattr(ctx context.Context, opts *SetxattrOptions) error {
|
||||
func (fd *FileDescription) SetXattr(ctx context.Context, opts *SetXattrOptions) error {
|
||||
if fd.opts.UseDentryMetadata {
|
||||
vfsObj := fd.vd.mount.vfs
|
||||
rp := vfsObj.getResolvingPath(auth.CredentialsFromContext(ctx), &PathOperation{
|
||||
Root: fd.vd,
|
||||
Start: fd.vd,
|
||||
})
|
||||
err := fd.vd.mount.fs.impl.SetxattrAt(ctx, rp, *opts)
|
||||
err := fd.vd.mount.fs.impl.SetXattrAt(ctx, rp, *opts)
|
||||
vfsObj.putResolvingPath(ctx, rp)
|
||||
return err
|
||||
}
|
||||
return fd.impl.Setxattr(ctx, *opts)
|
||||
return fd.impl.SetXattr(ctx, *opts)
|
||||
}
|
||||
|
||||
// Removexattr removes the given extended attribute from the file represented
|
||||
// RemoveXattr removes the given extended attribute from the file represented
|
||||
// by fd.
|
||||
func (fd *FileDescription) Removexattr(ctx context.Context, name string) error {
|
||||
func (fd *FileDescription) RemoveXattr(ctx context.Context, name string) error {
|
||||
if fd.opts.UseDentryMetadata {
|
||||
vfsObj := fd.vd.mount.vfs
|
||||
rp := vfsObj.getResolvingPath(auth.CredentialsFromContext(ctx), &PathOperation{
|
||||
Root: fd.vd,
|
||||
Start: fd.vd,
|
||||
})
|
||||
err := fd.vd.mount.fs.impl.RemovexattrAt(ctx, rp, name)
|
||||
err := fd.vd.mount.fs.impl.RemoveXattrAt(ctx, rp, name)
|
||||
vfsObj.putResolvingPath(ctx, rp)
|
||||
return err
|
||||
}
|
||||
return fd.impl.Removexattr(ctx, name)
|
||||
return fd.impl.RemoveXattr(ctx, name)
|
||||
}
|
||||
|
||||
// SyncFS instructs the filesystem containing fd to execute the semantics of
|
||||
|
||||
@@ -134,28 +134,28 @@ func (FileDescriptionDefaultImpl) Ioctl(ctx context.Context, uio usermem.IO, arg
|
||||
return 0, syserror.ENOTTY
|
||||
}
|
||||
|
||||
// Listxattr implements FileDescriptionImpl.Listxattr analogously to
|
||||
// ListXattr implements FileDescriptionImpl.ListXattr analogously to
|
||||
// inode_operations::listxattr == NULL in Linux.
|
||||
func (FileDescriptionDefaultImpl) Listxattr(ctx context.Context, size uint64) ([]string, error) {
|
||||
// This isn't exactly accurate; see FileDescription.Listxattr.
|
||||
func (FileDescriptionDefaultImpl) ListXattr(ctx context.Context, size uint64) ([]string, error) {
|
||||
// This isn't exactly accurate; see FileDescription.ListXattr.
|
||||
return nil, syserror.ENOTSUP
|
||||
}
|
||||
|
||||
// Getxattr implements FileDescriptionImpl.Getxattr analogously to
|
||||
// GetXattr implements FileDescriptionImpl.GetXattr analogously to
|
||||
// inode::i_opflags & IOP_XATTR == 0 in Linux.
|
||||
func (FileDescriptionDefaultImpl) Getxattr(ctx context.Context, opts GetxattrOptions) (string, error) {
|
||||
func (FileDescriptionDefaultImpl) GetXattr(ctx context.Context, opts GetXattrOptions) (string, error) {
|
||||
return "", syserror.ENOTSUP
|
||||
}
|
||||
|
||||
// Setxattr implements FileDescriptionImpl.Setxattr analogously to
|
||||
// SetXattr implements FileDescriptionImpl.SetXattr analogously to
|
||||
// inode::i_opflags & IOP_XATTR == 0 in Linux.
|
||||
func (FileDescriptionDefaultImpl) Setxattr(ctx context.Context, opts SetxattrOptions) error {
|
||||
func (FileDescriptionDefaultImpl) SetXattr(ctx context.Context, opts SetXattrOptions) error {
|
||||
return syserror.ENOTSUP
|
||||
}
|
||||
|
||||
// Removexattr implements FileDescriptionImpl.Removexattr analogously to
|
||||
// RemoveXattr implements FileDescriptionImpl.RemoveXattr analogously to
|
||||
// inode::i_opflags & IOP_XATTR == 0 in Linux.
|
||||
func (FileDescriptionDefaultImpl) Removexattr(ctx context.Context, name string) error {
|
||||
func (FileDescriptionDefaultImpl) RemoveXattr(ctx context.Context, name string) error {
|
||||
return syserror.ENOTSUP
|
||||
}
|
||||
|
||||
|
||||
@@ -416,26 +416,26 @@ type FilesystemImpl interface {
|
||||
// ResolvingPath.Resolve*(), then !rp.Done().
|
||||
UnlinkAt(ctx context.Context, rp *ResolvingPath) error
|
||||
|
||||
// ListxattrAt returns all extended attribute names for the file at rp.
|
||||
// ListXattrAt returns all extended attribute names for the file at rp.
|
||||
//
|
||||
// Errors:
|
||||
//
|
||||
// - If extended attributes are not supported by the filesystem,
|
||||
// ListxattrAt returns ENOTSUP.
|
||||
// ListXattrAt returns ENOTSUP.
|
||||
//
|
||||
// - If the size of the list (including a NUL terminating byte after every
|
||||
// entry) would exceed size, ERANGE may be returned. Note that
|
||||
// implementations are free to ignore size entirely and return without
|
||||
// error). In all cases, if size is 0, the list should be returned without
|
||||
// error, regardless of size.
|
||||
ListxattrAt(ctx context.Context, rp *ResolvingPath, size uint64) ([]string, error)
|
||||
ListXattrAt(ctx context.Context, rp *ResolvingPath, size uint64) ([]string, error)
|
||||
|
||||
// GetxattrAt returns the value associated with the given extended
|
||||
// GetXattrAt returns the value associated with the given extended
|
||||
// attribute for the file at rp.
|
||||
//
|
||||
// Errors:
|
||||
//
|
||||
// - If extended attributes are not supported by the filesystem, GetxattrAt
|
||||
// - If extended attributes are not supported by the filesystem, GetXattrAt
|
||||
// returns ENOTSUP.
|
||||
//
|
||||
// - If an extended attribute named opts.Name does not exist, ENODATA is
|
||||
@@ -445,30 +445,30 @@ type FilesystemImpl interface {
|
||||
// returned (note that implementations are free to ignore opts.Size entirely
|
||||
// and return without error). In all cases, if opts.Size is 0, the value
|
||||
// should be returned without error, regardless of size.
|
||||
GetxattrAt(ctx context.Context, rp *ResolvingPath, opts GetxattrOptions) (string, error)
|
||||
GetXattrAt(ctx context.Context, rp *ResolvingPath, opts GetXattrOptions) (string, error)
|
||||
|
||||
// SetxattrAt changes the value associated with the given extended
|
||||
// SetXattrAt changes the value associated with the given extended
|
||||
// attribute for the file at rp.
|
||||
//
|
||||
// Errors:
|
||||
//
|
||||
// - If extended attributes are not supported by the filesystem, SetxattrAt
|
||||
// - If extended attributes are not supported by the filesystem, SetXattrAt
|
||||
// returns ENOTSUP.
|
||||
//
|
||||
// - If XATTR_CREATE is set in opts.Flag and opts.Name already exists,
|
||||
// EEXIST is returned. If XATTR_REPLACE is set and opts.Name does not exist,
|
||||
// ENODATA is returned.
|
||||
SetxattrAt(ctx context.Context, rp *ResolvingPath, opts SetxattrOptions) error
|
||||
SetXattrAt(ctx context.Context, rp *ResolvingPath, opts SetXattrOptions) error
|
||||
|
||||
// RemovexattrAt removes the given extended attribute from the file at rp.
|
||||
// RemoveXattrAt removes the given extended attribute from the file at rp.
|
||||
//
|
||||
// Errors:
|
||||
//
|
||||
// - If extended attributes are not supported by the filesystem,
|
||||
// RemovexattrAt returns ENOTSUP.
|
||||
// RemoveXattrAt returns ENOTSUP.
|
||||
//
|
||||
// - If name does not exist, ENODATA is returned.
|
||||
RemovexattrAt(ctx context.Context, rp *ResolvingPath, name string) error
|
||||
RemoveXattrAt(ctx context.Context, rp *ResolvingPath, name string) error
|
||||
|
||||
// BoundEndpointAt returns the Unix socket endpoint bound at the path rp.
|
||||
//
|
||||
|
||||
@@ -33,8 +33,8 @@ type SimpleExtendedAttributes struct {
|
||||
xattrs map[string]string
|
||||
}
|
||||
|
||||
// Getxattr returns the value at 'name'.
|
||||
func (x *SimpleExtendedAttributes) Getxattr(opts *vfs.GetxattrOptions) (string, error) {
|
||||
// GetXattr returns the value at 'name'.
|
||||
func (x *SimpleExtendedAttributes) GetXattr(opts *vfs.GetXattrOptions) (string, error) {
|
||||
x.mu.RLock()
|
||||
value, ok := x.xattrs[opts.Name]
|
||||
x.mu.RUnlock()
|
||||
@@ -49,8 +49,8 @@ func (x *SimpleExtendedAttributes) Getxattr(opts *vfs.GetxattrOptions) (string,
|
||||
return value, nil
|
||||
}
|
||||
|
||||
// Setxattr sets 'value' at 'name'.
|
||||
func (x *SimpleExtendedAttributes) Setxattr(opts *vfs.SetxattrOptions) error {
|
||||
// SetXattr sets 'value' at 'name'.
|
||||
func (x *SimpleExtendedAttributes) SetXattr(opts *vfs.SetXattrOptions) error {
|
||||
x.mu.Lock()
|
||||
defer x.mu.Unlock()
|
||||
if x.xattrs == nil {
|
||||
@@ -72,8 +72,8 @@ func (x *SimpleExtendedAttributes) Setxattr(opts *vfs.SetxattrOptions) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// Listxattr returns all names in xattrs.
|
||||
func (x *SimpleExtendedAttributes) Listxattr(size uint64) ([]string, error) {
|
||||
// ListXattr returns all names in xattrs.
|
||||
func (x *SimpleExtendedAttributes) ListXattr(size uint64) ([]string, error) {
|
||||
// Keep track of the size of the buffer needed in listxattr(2) for the list.
|
||||
listSize := 0
|
||||
x.mu.RLock()
|
||||
@@ -90,8 +90,8 @@ func (x *SimpleExtendedAttributes) Listxattr(size uint64) ([]string, error) {
|
||||
return names, nil
|
||||
}
|
||||
|
||||
// Removexattr removes the xattr at 'name'.
|
||||
func (x *SimpleExtendedAttributes) Removexattr(name string) error {
|
||||
// RemoveXattr removes the xattr at 'name'.
|
||||
func (x *SimpleExtendedAttributes) RemoveXattr(name string) error {
|
||||
x.mu.Lock()
|
||||
defer x.mu.Unlock()
|
||||
if _, ok := x.xattrs[name]; !ok {
|
||||
|
||||
@@ -190,10 +190,10 @@ type BoundEndpointOptions struct {
|
||||
Addr string
|
||||
}
|
||||
|
||||
// GetxattrOptions contains options to VirtualFilesystem.GetxattrAt(),
|
||||
// FilesystemImpl.GetxattrAt(), FileDescription.Getxattr(), and
|
||||
// FileDescriptionImpl.Getxattr().
|
||||
type GetxattrOptions struct {
|
||||
// GetXattrOptions contains options to VirtualFilesystem.GetXattrAt(),
|
||||
// FilesystemImpl.GetXattrAt(), FileDescription.GetXattr(), and
|
||||
// FileDescriptionImpl.GetXattr().
|
||||
type GetXattrOptions struct {
|
||||
// Name is the name of the extended attribute to retrieve.
|
||||
Name string
|
||||
|
||||
@@ -204,10 +204,10 @@ type GetxattrOptions struct {
|
||||
Size uint64
|
||||
}
|
||||
|
||||
// SetxattrOptions contains options to VirtualFilesystem.SetxattrAt(),
|
||||
// FilesystemImpl.SetxattrAt(), FileDescription.Setxattr(), and
|
||||
// FileDescriptionImpl.Setxattr().
|
||||
type SetxattrOptions struct {
|
||||
// SetXattrOptions contains options to VirtualFilesystem.SetXattrAt(),
|
||||
// FilesystemImpl.SetXattrAt(), FileDescription.SetXattr(), and
|
||||
// FileDescriptionImpl.SetXattr().
|
||||
type SetXattrOptions struct {
|
||||
// Name is the name of the extended attribute being mutated.
|
||||
Name string
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user