$! is the last error from syscall/library call (like
errno in C). Fuse functions should return standard error codes in case of errors, and they should be less than zero because positive number can mean a file descriptor or comething else. Thus,
-$! is returned as it is (minus) error code from the last system or library call which caused the error.
Sorry if my advice was wrong.