From: Trond Myklebust <trond.myklebust@xxxxxxxxxxxxxxx> cache_write() will set errno if it returns -1, so that callers can handle errors appropriately, however dump_to_cache() needs to do so too. Signed-off-by: Trond Myklebust <trond.myklebust@xxxxxxxxxxxxxxx> --- utils/mountd/cache.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/utils/mountd/cache.c b/utils/mountd/cache.c index 94e9e44b46b9..0f323226b12a 100644 --- a/utils/mountd/cache.c +++ b/utils/mountd/cache.c @@ -936,12 +936,13 @@ static void write_secinfo(char **bp, int *blen, struct exportent *ep, int flag_m } -static int dump_to_cache(int f, char *buf, int buflen, char *domain, +static int dump_to_cache(int f, char *buf, int blen, char *domain, char *path, struct exportent *exp, int ttl) { char *bp = buf; - int blen = buflen; time_t now = time(0); + size_t buflen; + ssize_t err; if (ttl <= 1) ttl = DEFAULT_TTL; @@ -974,8 +975,18 @@ static int dump_to_cache(int f, char *buf, int buflen, char *domain, } else qword_adduint(&bp, &blen, now + ttl); qword_addeol(&bp, &blen); - if (blen <= 0) return -1; - if (cache_write(f, buf, bp - buf) != bp - buf) return -1; + if (blen <= 0) { + errno = ENOBUFS; + return -1; + } + buflen = bp - buf; + err = cache_write(f, buf, buflen); + if (err < 0) + return err; + if ((size_t)err != buflen) { + errno = ENOSPC; + return -1; + } return 0; } -- 2.25.2