@@ -45,6 +45,45 @@ const (
45
45
_OFD_SETLKW = 38
46
46
)
47
47
48
+ var (
49
+ syscallStatusENOENT = makeSyscallErrStatus (syscall .ENOENT )
50
+ syscallStatusEPERM = makeSyscallErrStatus (syscall .EPERM )
51
+ syscallStatusEEXIST = makeSyscallErrStatus (syscall .EEXIST )
52
+ syscallStatusENOTEMPTY = makeSyscallErrStatus (syscall .ENOTEMPTY )
53
+ syscallStatusEINVAL = makeSyscallErrStatus (syscall .EINVAL )
54
+ )
55
+
56
+ // makeSyscallErrStatus creates a gRPC status error that includes the given syscall error code.
57
+ func makeSyscallErrStatus (sysErr error ) error {
58
+ s := gstatus .New (codes .Unknown , fmt .Sprintf ("syscall error: %s" , sysErr ))
59
+ s , err := s .WithDetails (syscallErrProto (sysErr ))
60
+ // should never happen
61
+ if err != nil {
62
+ alert .UnexpectedEvent ("could_not_make_syscall_err" , "err: %s" , err )
63
+ }
64
+ return s .Err ()
65
+ }
66
+
67
+ // syscallErrStatus returns a gRPC status error that includes the given syscall error code.
68
+ func syscallErrStatus (sysErr error ) error {
69
+ // Return predefined types for common errors.
70
+ if errno , ok := sysErr .(syscall.Errno ); ok {
71
+ switch errno {
72
+ case syscall .ENOENT :
73
+ return syscallStatusENOENT
74
+ case syscall .EPERM :
75
+ return syscallStatusEPERM
76
+ case syscall .EEXIST :
77
+ return syscallStatusEEXIST
78
+ case syscall .ENOTEMPTY :
79
+ return syscallStatusENOTEMPTY
80
+ case syscall .EINVAL :
81
+ return syscallStatusEINVAL
82
+ }
83
+ }
84
+ return makeSyscallErrStatus (sysErr )
85
+ }
86
+
48
87
type fileHandle struct {
49
88
node * fsNode
50
89
@@ -439,17 +478,6 @@ func syscallErrProto(sysErr error) *vfspb.SyscallError {
439
478
return & vfspb.SyscallError {Errno : uint32 (errno )}
440
479
}
441
480
442
- // syscallErrStatus creates a gRPC status error that includes the given syscall error code.
443
- func syscallErrStatus (sysErr error ) error {
444
- s := gstatus .New (codes .Unknown , fmt .Sprintf ("syscall error: %s" , sysErr ))
445
- s , err := s .WithDetails (syscallErrProto (sysErr ))
446
- // should never happen
447
- if err != nil {
448
- alert .UnexpectedEvent ("could_not_make_syscall_err" , "err: %s" , err )
449
- }
450
- return s .Err ()
451
- }
452
-
453
481
func (p * Server ) lookupNode (id uint64 ) (* fsNode , error ) {
454
482
p .mu .Lock ()
455
483
node , ok := p .nodes [id ]
0 commit comments