[lkml]   [2006]   [Jun]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    Patch in this message
    SubjectIS_ERR Threshold Value

    from include/asm-mips/errno.h
    #define EDQUOT 1133 /* Quota exceeded */

    I noticed that the errno value for EDQUOT on MIPS is considerably larger
    than all others. This can lead to a situation where functions using
    ERR_PTR() to return error codes in pointers cannot return this error
    code without IS_ERR() thinking that the pointer is valid. In my case,
    it caused an alignment exception in the XFS open call when quota has
    been exceeded in the linux-mips 2.6.14 kernel. I think that the XFS
    code has changed enough that this bug isn't in newer versions, though I
    haven't done a thorough investigation.

    I've supplied a patch that addresses this situation by changing the
    threshold used by IS_ERR if EMAXERRNO is defined and greater than 1000.
    Perhaps permanently raising the threshold value to something >1133 is

    Looking forward to your feedback.

    Erik Frederiksen
    Firmware Design Engineer Co-op
    PMC-Sierra Saskatoon

    diff -Nau [ab]/include/linux/err.h
    --- a/include/linux/err.h 2005-10-30 13:14:22.000000000 -0600
    +++ b/include/linux/err.h 2006-06-28 10:38:43.000000000 -0600
    @@ -12,8 +12,23 @@
    * This should be a per-architecture thing, to allow different
    * error and pointer decisions.
    + *
    + * Updated by Erik Frederiksen (
    + * errno values on MIPS go up to 1133 for EDQUOT. The threshold
    + * is adjusted so that returning large errnos in a pointer
    + * does not result in a valid pointer according to IS_ERR.
    -#define IS_ERR_VALUE(x) unlikely((x) > (unsigned long)-1000L)
    +#define ERR_PTR_THRESHOLD 1000
    +#define IS_ERR_VALUE(x) \
    + unlikely((x) > (unsigned long)-(long)ERR_PTR_THRESHOLD )
    +#ifdef EMAXERRNO
    +# undef IS_ERR_VALUE
    +# define IS_ERR_VALUE(x) \
    + unlikely((x) >= (unsigned long)-(long)EMAXERRNO )
    +# endif

    static inline void *ERR_PTR(long error)

    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to
    More majordomo info at
    Please read the FAQ at

     \ /
      Last update: 2006-06-28 22:59    [W:0.021 / U:9.052 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site