diff options
| author | N Balachandran <nbalacha@redhat.com> | 2018-02-05 13:39:22 +0530 | 
|---|---|---|
| committer | jiffin tony Thottan <jthottan@redhat.com> | 2018-02-09 08:52:00 +0000 | 
| commit | 1818a3eb5225da5edaa362ddf56474ea72e5091a (patch) | |
| tree | a73e98bb40f2cc7f6447d4088220d95af02ffc62 | |
| parent | b0544a8f7257660e9c9a24284f262a5a384ee6cd (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.c | 18 | 
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;                                  }                          }  | 
