From 038d8f994d66eeb79734c03ecd631a12d5433221 Mon Sep 17 00:00:00 2001 From: Pranith Kumar K Date: Tue, 11 Jul 2017 18:58:04 +0530 Subject: libglusterfs: Handle FS errors gracefully Problem: FS sometimes doesn't give the expected return values. We need our common functions to guard against this. Example BUG: https://bugzilla.redhat.com/show_bug.cgi?id=864401 Fix: When the return value is not as per specification, change the return value to -1 and errno to EIO BUG: 1469487 Change-Id: I14739ab2e5ae225b1a91438b87f8928af56f2934 Signed-off-by: Pranith Kumar K --- xlators/storage/posix/src/posix-messages.h | 13 +++++++++++-- xlators/storage/posix/src/posix.c | 4 ++++ 2 files changed, 15 insertions(+), 2 deletions(-) (limited to 'xlators/storage') diff --git a/xlators/storage/posix/src/posix-messages.h b/xlators/storage/posix/src/posix-messages.h index fbae4d8d83a..7d0ff0282bf 100644 --- a/xlators/storage/posix/src/posix-messages.h +++ b/xlators/storage/posix/src/posix-messages.h @@ -45,7 +45,8 @@ */ #define POSIX_COMP_BASE GLFS_MSGID_COMP_POSIX -#define GLFS_NUM_MESSAGES 112 + +#define GLFS_NUM_MESSAGES 113 #define GLFS_MSGID_END (POSIX_COMP_BASE + GLFS_NUM_MESSAGES + 1) /* Messaged with message IDs */ #define glfs_msg_start_x POSIX_COMP_BASE, "Invalid: Start of messages" @@ -954,9 +955,17 @@ * */ - #define P_MSG_DISK_SPACE_CHECK_FAILED (POSIX_COMP_BASE + 112) +/*! + * @messageid + * @diagnosis + * @recommendedaction + * + */ + +#define P_MSG_FALLOCATE_FAILED (POSIX_COMP_BASE + 113) + /*! * @messageid * @diagnosis diff --git a/xlators/storage/posix/src/posix.c b/xlators/storage/posix/src/posix.c index 479d5c04b29..91e32fc1201 100644 --- a/xlators/storage/posix/src/posix.c +++ b/xlators/storage/posix/src/posix.c @@ -836,6 +836,10 @@ posix_do_fallocate (call_frame_t *frame, xlator_t *this, fd_t *fd, ret = sys_fallocate (pfd->fd, flags, offset, len); if (ret == -1) { ret = -errno; + gf_msg (this->name, GF_LOG_ERROR, -ret, P_MSG_FALLOCATE_FAILED, + "fallocate failed on %s offset: %jd, " + "len:%zu, flags: %d", uuid_utoa (fd->inode->gfid), + offset, len, flags); goto out; } -- cgit