Commit | Line | Data |
---|---|---|
002fe734 JA |
1 | #ifndef FIO_ERR_H |
2 | #define FIO_ERR_H | |
3 | ||
4 | /* | |
5 | * Kernel pointers have redundant information, so we can use a | |
6 | * scheme where we can return either an error code or a dentry | |
7 | * pointer with the same return value. | |
8 | * | |
9 | * This should be a per-architecture thing, to allow different | |
10 | * error and pointer decisions. | |
11 | */ | |
12 | #define MAX_ERRNO 4095 | |
13 | ||
e0739a72 | 14 | #define IS_ERR_VALUE(x) ((x) >= (uintptr_t)-MAX_ERRNO) |
002fe734 | 15 | |
e0739a72 | 16 | static inline void *ERR_PTR(uintptr_t error) |
002fe734 JA |
17 | { |
18 | return (void *) error; | |
19 | } | |
20 | ||
e0739a72 | 21 | static inline uintptr_t PTR_ERR(const void *ptr) |
002fe734 | 22 | { |
e0739a72 | 23 | return (uintptr_t) ptr; |
002fe734 JA |
24 | } |
25 | ||
e0739a72 | 26 | static inline uintptr_t IS_ERR(const void *ptr) |
002fe734 | 27 | { |
e0739a72 | 28 | return IS_ERR_VALUE((uintptr_t)ptr); |
002fe734 JA |
29 | } |
30 | ||
e0739a72 | 31 | static inline uintptr_t IS_ERR_OR_NULL(const void *ptr) |
002fe734 | 32 | { |
e0739a72 | 33 | return !ptr || IS_ERR_VALUE((uintptr_t)ptr); |
002fe734 JA |
34 | } |
35 | ||
36 | static inline int PTR_ERR_OR_ZERO(const void *ptr) | |
37 | { | |
38 | if (IS_ERR(ptr)) | |
39 | return PTR_ERR(ptr); | |
40 | else | |
41 | return 0; | |
42 | } | |
43 | ||
44 | #endif |