diff --git a/backend/posix/with_otmpfile.go b/backend/posix/with_otmpfile.go index beb626c..751c61b 100644 --- a/backend/posix/with_otmpfile.go +++ b/backend/posix/with_otmpfile.go @@ -70,11 +70,17 @@ func (p *Posix) openTmpFile(dir, bucket, obj string, size int64, acct auth.Accou // O_TMPFILE not supported, try fallback err = backend.MkdirAll(dir, uid, gid, doChown, p.newDirPerm) if err != nil { + if errors.Is(err, syscall.EROFS) { + return nil, s3err.GetAPIError(s3err.ErrMethodNotAllowed) + } return nil, fmt.Errorf("make temp dir: %w", err) } f, err := os.CreateTemp(dir, fmt.Sprintf("%x.", sha256.Sum256([]byte(obj)))) if err != nil { + if errors.Is(err, syscall.EROFS) { + return nil, s3err.GetAPIError(s3err.ErrMethodNotAllowed) + } return nil, err } tmp := &tmpfile{ diff --git a/backend/scoutfs/scoutfs_compat.go b/backend/scoutfs/scoutfs_compat.go index 7aeff65..044acc7 100644 --- a/backend/scoutfs/scoutfs_compat.go +++ b/backend/scoutfs/scoutfs_compat.go @@ -23,6 +23,7 @@ import ( "os" "path/filepath" "strconv" + "syscall" "golang.org/x/sys/unix" @@ -31,6 +32,7 @@ import ( "github.com/versity/versitygw/backend" "github.com/versity/versitygw/backend/meta" "github.com/versity/versitygw/backend/posix" + "github.com/versity/versitygw/s3err" ) func New(rootdir string, opts ScoutfsOpts) (*ScoutFS, error) { @@ -90,6 +92,9 @@ func (s *ScoutFS) openTmpFile(dir, bucket, obj string, size int64, acct auth.Acc // file descriptor into the namespace. fd, err := unix.Open(dir, unix.O_RDWR|unix.O_TMPFILE|unix.O_CLOEXEC, defaultFilePerm) if err != nil { + if errors.Is(err, syscall.EROFS) { + return nil, s3err.GetAPIError(s3err.ErrMethodNotAllowed) + } return nil, err }