From 28ea43ab35143f38cf11e84e5ed0dfe942092ca4 Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Tue, 26 Feb 2019 13:01:53 +1100 Subject: [PATCH] Handle EDQUOT and ENOSPC errors (cherry picked from commit 435ae2f29a87034ddcaa6abb2dcca47e024aa62f) --- CHANGES | 3 +++ lib/isc/include/isc/result.h | 6 +++++- lib/isc/result.c | 8 ++++++++ lib/isc/unix/errno2result.c | 6 ++++++ lib/isc/win32/errno2result.c | 2 ++ 5 files changed, 24 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index 3a82ed2b42..5d6759b103 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,6 @@ +5178. [bug] Handle EDQUOT (disk quota) and ENOSPC (disk full) + errors when writing files. [GL #902] + 5176. [tests] Remove a dependency on libxml in statschannel system test. [GL #926] diff --git a/lib/isc/include/isc/result.h b/lib/isc/include/isc/result.h index 246aefba51..0fd4971d8b 100644 --- a/lib/isc/include/isc/result.h +++ b/lib/isc/include/isc/result.h @@ -83,9 +83,13 @@ #define ISC_R_UNSET 61 /*%< unset */ #define ISC_R_MULTIPLE 62 /*%< multiple */ #define ISC_R_WOULDBLOCK 63 /*%< would block */ +#define ISC_R_COMPLETE 64 /*%< complete */ +#define ISC_R_CRYPTOFAILURE 65 /*%< cryptography library failure */ +#define ISC_R_DISCQUOTA 66 /*%< disc quota */ +#define ISC_R_DISCFULL 67 /*%< disc full */ /*% Not a result code: the number of results. */ -#define ISC_R_NRESULTS 64 +#define ISC_R_NRESULTS 68 ISC_LANG_BEGINDECLS diff --git a/lib/isc/result.c b/lib/isc/result.c index a707c32a28..abb6ed26a6 100644 --- a/lib/isc/result.c +++ b/lib/isc/result.c @@ -99,6 +99,10 @@ static const char *description[ISC_R_NRESULTS] = { "unset", /*%< 61 */ "multiple", /*%< 62 */ "would block", /*%< 63 */ + "complete", /*%< 64 */ + "crypto failure", /*%< 65 */ + "disc quota", /*%< 66 */ + "disc full", /*%< 67 */ }; static const char *identifier[ISC_R_NRESULTS] = { @@ -166,6 +170,10 @@ static const char *identifier[ISC_R_NRESULTS] = { "ISC_R_UNSET", "ISC_R_MULTIPLE", "ISC_R_WOULDBLOCK", + "ISC_R_COMPLETE", + "ISC_R_CRYPTOFAILURE", + "ISC_R_DISCQUOTA", + "ISC_R_DISCFULL", }; #define ISC_RESULT_RESULTSET 2 diff --git a/lib/isc/unix/errno2result.c b/lib/isc/unix/errno2result.c index 2f12bcc8bc..32502e046c 100644 --- a/lib/isc/unix/errno2result.c +++ b/lib/isc/unix/errno2result.c @@ -55,6 +55,12 @@ isc___errno2result(int posixerrno, bool dolog, case ENFILE: case EMFILE: return (ISC_R_TOOMANYOPENFILES); +#ifdef EDQUOT + case EDQUOT: + return (ISC_R_DISCQUOTA); +#endif + case ENOSPC: + return (ISC_R_DISCFULL); #ifdef EOVERFLOW case EOVERFLOW: return (ISC_R_RANGE); diff --git a/lib/isc/win32/errno2result.c b/lib/isc/win32/errno2result.c index 83dbb4e4e3..1123247037 100644 --- a/lib/isc/win32/errno2result.c +++ b/lib/isc/win32/errno2result.c @@ -62,6 +62,8 @@ isc__errno2resultx(int posixerrno, bool dolog, case EMFILE: case WSAEMFILE: return (ISC_R_TOOMANYOPENFILES); + case ENOSPC: + return (ISC_R_DISCFULL); case ERROR_CANCELLED: return (ISC_R_CANCELED); case ERROR_CONNECTION_REFUSED: