mount: Correctly return context.Canceled for interrupted syscalls

bazil/fuse expects us to return context.Canceled to signal that a
syscall was successfully interrupted. Returning a wrapped version of
that error however causes the fuse library to signal an EIO (input/output
error). Thus unwrap context.Canceled errors before returning them.
This commit is contained in:
Michael Eischer
2022-08-19 20:26:35 +02:00
parent f7808245aa
commit a0c1ae9f90
4 changed files with 27 additions and 5 deletions

View File

@@ -58,7 +58,7 @@ func (d *SnapshotsDir) ReadDirAll(ctx context.Context) ([]fuse.Dirent, error) {
// update snapshots
meta, err := d.dirStruct.UpdatePrefix(ctx, d.prefix)
if err != nil {
return nil, err
return nil, unwrapCtxCanceled(err)
} else if meta == nil {
return nil, fuse.ENOENT
}
@@ -97,7 +97,7 @@ func (d *SnapshotsDir) Lookup(ctx context.Context, name string) (fs.Node, error)
meta, err := d.dirStruct.UpdatePrefix(ctx, d.prefix)
if err != nil {
return nil, err
return nil, unwrapCtxCanceled(err)
} else if meta == nil {
return nil, fuse.ENOENT
}