• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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  
14  #define IS_ERR_VALUE(x) ((x) >= (uintptr_t)-MAX_ERRNO)
15  
ERR_PTR(uintptr_t error)16  static inline void *ERR_PTR(uintptr_t error)
17  {
18  	return (void *) error;
19  }
20  
PTR_ERR(const void * ptr)21  static inline uintptr_t PTR_ERR(const void *ptr)
22  {
23  	return (uintptr_t) ptr;
24  }
25  
IS_ERR(const void * ptr)26  static inline uintptr_t IS_ERR(const void *ptr)
27  {
28  	return IS_ERR_VALUE((uintptr_t)ptr);
29  }
30  
IS_ERR_OR_NULL(const void * ptr)31  static inline uintptr_t IS_ERR_OR_NULL(const void *ptr)
32  {
33  	return !ptr || IS_ERR_VALUE((uintptr_t)ptr);
34  }
35  
PTR_ERR_OR_ZERO(const void * ptr)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
45