Linux MIPS Architecture development
 help / color / mirror / Atom feed
* errno value for EDQUOT on MIPS
@ 2006-06-28 16:40 Erik Frederiksen
  2006-06-28 18:12 ` Ralf Baechle
  0 siblings, 1 reply; 2+ messages in thread
From: Erik Frederiksen @ 2006-06-28 16:40 UTC (permalink / raw)
  To: linux-mips

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

Hi everyone.  I'm kind of confused as to why the value for EDQUOT is so
large on MIPS.  It seems like no other architectures have errnos that go
that high.

The reason I'm interested is that functions that use 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.  This takes
place 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'm not sure about that.  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.  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 (erik_frederiksen@pmc-sierra.com)
+ * 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
+# if EMAXERRNO >= ERR_PTR_THRESHOLD
+#  undef IS_ERR_VALUE
+#  define IS_ERR_VALUE(x) \
+       unlikely((x) >= (unsigned long)-(long)EMAXERRNO )
+# endif
+#endif
  
 static inline void *ERR_PTR(long error)
 {

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2006-06-28 18:12 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-06-28 16:40 errno value for EDQUOT on MIPS Erik Frederiksen
2006-06-28 18:12 ` Ralf Baechle

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox