diff options
| author | Raghavendra Bhat <raghavendra@redhat.com> | 2012-10-10 15:18:06 +0530 | 
|---|---|---|
| committer | Anand Avati <avati@redhat.com> | 2012-10-11 18:08:20 -0700 | 
| commit | e1e5326c22b6b64784a7562ce7ef462841f39609 (patch) | |
| tree | c9504c0a0d0e593893abdce8d935cac2aae9fef1 | |
| parent | e7f14ad073956b08b37d7b102afab57a08dfabac (diff) | |
storage/posix: return -1 if lstat call returns non zero value apart from -1
* If lstat() call in posix_{pstat, istat} returns non zero return value
  other than -1, then treat lstat() call to have been failed and return -1
  itself. This might happen if there is some bug in the backend filesystem.
Change-Id: Ie23787f6c838f14f92edadad71b83471e3d22289
BUG: 864401
Signed-off-by: Raghavendra Bhat <raghavendra@redhat.com>
Reviewed-on: http://review.gluster.org/4054
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Anand Avati <avati@redhat.com>
| -rw-r--r-- | xlators/storage/posix/src/posix-helpers.c | 40 | 
1 files changed, 30 insertions, 10 deletions
diff --git a/xlators/storage/posix/src/posix-helpers.c b/xlators/storage/posix/src/posix-helpers.c index 0e291cb9dbe..c4f93100faa 100644 --- a/xlators/storage/posix/src/posix-helpers.c +++ b/xlators/storage/posix/src/posix-helpers.c @@ -347,11 +347,21 @@ posix_istat (xlator_t *this, uuid_t gfid, const char *basename,          ret = lstat (real_path, &lstatbuf); -        if (ret == -1) { -                if (errno != ENOENT && errno != ELOOP) -                        gf_log (this->name, GF_LOG_WARNING, -                                "lstat failed on %s (%s)", -                                real_path, strerror (errno)); +        if (ret != 0) { +                if (ret == -1) { +                        if (errno != ENOENT && errno != ELOOP) +                                gf_log (this->name, GF_LOG_WARNING, +                                        "lstat failed on %s (%s)", +                                        real_path, strerror (errno)); +                } else { +                        // may be some backend filesystem issue +                        gf_log (this->name, GF_LOG_ERROR, "lstat failed on " +                                "%s and return value is %d instead of -1. " +                                "Please see dmesg output to check whether the " +                                "failure is due to backend filesystem issue", +                                real_path, ret); +                        ret = -1; +                }                  goto out;          } @@ -395,11 +405,21 @@ posix_pstat (xlator_t *this, uuid_t gfid, const char *path,          ret = lstat (path, &lstatbuf); -        if (ret == -1) { -                if (errno != ENOENT) -                        gf_log (this->name, GF_LOG_WARNING, -                                "lstat failed on %s (%s)", -                                path, strerror (errno)); +        if (ret != 0) { +                if (ret == -1) { +                        if (errno != ENOENT) +                                gf_log (this->name, GF_LOG_WARNING, +                                        "lstat failed on %s (%s)", +                                        path, strerror (errno)); +                } else { +                        // may be some backend filesytem issue +                        gf_log (this->name, GF_LOG_ERROR, "lstat failed on " +                                "%s and return value is %d instead of -1. " +                                "Please see dmesg output to check whether the " +                                "failure is due to backend filesystem issue", +                                path, ret); +                        ret = -1; +                }                  goto out;          }  | 
