summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorN Balachandran <nbalacha@redhat.com>2018-02-05 13:39:22 +0530
committerjiffin tony Thottan <jthottan@redhat.com>2018-02-09 08:52:00 +0000
commit1818a3eb5225da5edaa362ddf56474ea72e5091a (patch)
treea73e98bb40f2cc7f6447d4088220d95af02ffc62
parentb0544a8f7257660e9c9a24284f262a5a384ee6cd (diff)
cluster/dht: Cleanup on fallocate failure
It looks like fallocate leaves a non-empty file behind in case of some failures. We now truncate the file to 0 bytes on failure in __dht_rebalance_create_dst_file. > Change-Id: Ia4ad7b94bb3624a301fcc87d9e36c4dc751edb59 > BUG: 1541916 > Signed-off-by: N Balachandran <nbalacha@redhat.com> Change-Id: Ia4ad7b94bb3624a301fcc87d9e36c4dc751edb59 BUG: 1542601 Signed-off-by: N Balachandran <nbalacha@redhat.com>
-rw-r--r--xlators/cluster/dht/src/dht-rebalance.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/xlators/cluster/dht/src/dht-rebalance.c b/xlators/cluster/dht/src/dht-rebalance.c
index bed57ac47cd..20f27240e91 100644
--- a/xlators/cluster/dht/src/dht-rebalance.c
+++ b/xlators/cluster/dht/src/dht-rebalance.c
@@ -668,6 +668,7 @@ __dht_rebalance_create_dst_file (xlator_t *this, xlator_t *to, xlator_t *from,
int *fop_errno)
{
int ret = -1;
+ int ret2 = -1;
fd_t *fd = NULL;
struct iatt new_stbuf = {0,};
struct iatt check_stbuf= {0,};
@@ -803,7 +804,7 @@ __dht_rebalance_create_dst_file (xlator_t *this, xlator_t *to, xlator_t *from,
if (-ret == ENOENT) {
gf_msg (this->name, GF_LOG_ERROR, -ret,
- DHT_MSG_MIGRATE_FILE_FAILED, "%s: file does not exists"
+ DHT_MSG_MIGRATE_FILE_FAILED, "%s: file does not exist"
"on %s", loc->path, to->name);
*fop_errno = -ret;
ret = -1;
@@ -835,7 +836,22 @@ __dht_rebalance_create_dst_file (xlator_t *this, xlator_t *to, xlator_t *from,
DHT_MSG_MIGRATE_FILE_FAILED,
"fallocate failed for %s on %s",
loc->path, to->name);
+
*fop_errno = -ret;
+
+ /* fallocate does not release the space
+ * in some cases
+ */
+ ret2 = syncop_ftruncate (to, fd, 0,
+ NULL, NULL);
+ if (ret2 < 0) {
+ gf_msg (this->name,
+ GF_LOG_WARNING, -ret2,
+ DHT_MSG_MIGRATE_FILE_FAILED,
+ "ftruncate failed for "
+ "%s on %s",
+ loc->path, to->name);
+ }
goto out;
}
}