Skip to content

Commit 28bb217

Browse files
authored
map errors to NFS errors (#145)
1 parent 7070f5a commit 28bb217

2 files changed

Lines changed: 20 additions & 2 deletions

File tree

errors.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"encoding/binary"
66
"errors"
77
"fmt"
8+
"syscall"
89
)
910

1011
// RPCError provides the error interface for errors thrown by
@@ -228,3 +229,20 @@ var (
228229
wccDataErrorBody = [8]byte{}
229230
wccDataErrorFormatter = errFormatterWithBody(wccDataErrorBody[:])
230231
)
232+
233+
// statusFromWriteError maps write errors to NFS status codes
234+
func statusFromWriteError(err error) NFSStatus {
235+
if err == nil {
236+
return NFSStatusOk
237+
}
238+
if errors.Is(err, syscall.ENOSPC) {
239+
return NFSStatusNoSPC
240+
}
241+
if errors.Is(err, syscall.EDQUOT) {
242+
return NFSStatusDQuot
243+
}
244+
if errors.Is(err, syscall.EFBIG) {
245+
return NFSStatusFBig
246+
}
247+
return NFSStatusIO
248+
}

nfs_onwrite.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,11 +80,11 @@ func onWrite(ctx context.Context, w *response, userHandle Handler) error {
8080
writtenCount, err := file.Write(req.Data[:end])
8181
if err != nil {
8282
Log.Errorf("Error writing: %v", err)
83-
return &NFSStatusError{NFSStatusIO, err}
83+
return &NFSStatusError{statusFromWriteError(err), err}
8484
}
8585
if err := file.Close(); err != nil {
8686
Log.Errorf("error closing: %v", err)
87-
return &NFSStatusError{NFSStatusIO, err}
87+
return &NFSStatusError{statusFromWriteError(err), err}
8888
}
8989

9090
writer := bytes.NewBuffer([]byte{})

0 commit comments

Comments
 (0)