From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-4.0 required=3.0 tests=ALL_TRUSTED,BAYES_00 shortcircuit=no autolearn=ham autolearn_force=no version=3.4.1 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id 95A031F6AC for ; Mon, 9 Jul 2018 07:37:52 +0000 (UTC) From: Eric Wong To: cmogstored-public@bogomips.org Subject: [PATCH] http_get.c: log filesystem-level errors from sendfile Date: Mon, 9 Jul 2018 07:37:52 +0000 Message-Id: <20180709073752.21514-1-e@80x24.org> List-Id: Socket errors are too common to log (especially from malicous clients), but filesystem errors are rare and important. --- http_get.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/http_get.c b/http_get.c index 23140de..154d8c5 100644 --- a/http_get.c +++ b/http_get.c @@ -260,6 +260,25 @@ forbidden: } while(0)); } +static void sendfile_error(struct mog_fd *file_mfd, int sferr) +{ + struct mog_file *file = &file_mfd->as.file; + struct stat st; + + if (!fstat(file_mfd->fd, &st)) { + errno = sferr; + syslog(LOG_ERR, +"sendfile on (dev=%lu,ino=%lu) failed at offset=%lld: %m", + (unsigned long)st.st_dev, (unsigned long)st.st_ino, + (long long)file->foff); + } + else { + syslog(LOG_ERR, +"sendfile failed at offset=%lld: %s (fstat error: %m)", + (long long)file->foff, strerror(sferr)); + } +} + enum mog_next mog_http_get_in_progress(struct mog_fd *mfd) { struct mog_http *http = &mfd->as.http; @@ -289,6 +308,12 @@ retry: switch (errno) { case_EAGAIN: return MOG_NEXT_WAIT_WR; case EINTR: goto retry; + case EPIPE: + case ENOTCONN: + case ECONNRESET: + break; + default: + sendfile_error(file_mfd, errno); } http->_p.persistent = 0; } else { /* w == 0 */ -- EW