diff options
| author | vmallika <vmallika@redhat.com> | 2014-11-13 15:13:39 +0530 | 
|---|---|---|
| committer | Raghavendra Bhat <raghavendra@redhat.com> | 2014-12-22 04:19:04 -0800 | 
| commit | fc67bb6e45da96aee381ca804d79c94d4e3a59a6 (patch) | |
| tree | 7a193f5d697af5aeabdfd8321d0ffd9637410d76 /xlators/features/snapview-server/src/snapview-server-helpers.c | |
| parent | f9b4ef19d9e80ab4723e947a04c1c094843a0b6f (diff) | |
uss/gluster: creating file/directories inside .snaps should fail with EROFS.
When an attempt is made to create file/directories inside .snaps, it
fails with wrong error message as "Stale file handle". It should fail
with "Read-only file system"
Change-Id: I3a812a0afc4762cbb71ab180b9394c866e576a66
BUG: 1175730
Signed-off-by: vmallika <vmallika@redhat.com>
Reviewed-on: http://review.gluster.org/9039
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Vijay Bellur <vbellur@redhat.com>
Signed-off-by: Sachin Pandit <spandit@redhat.com>
Reviewed-on: http://review.gluster.org/9300
Reviewed-by: Raghavendra Bhat <raghavendra@redhat.com>
Diffstat (limited to 'xlators/features/snapview-server/src/snapview-server-helpers.c')
| -rw-r--r-- | xlators/features/snapview-server/src/snapview-server-helpers.c | 19 | 
1 files changed, 14 insertions, 5 deletions
diff --git a/xlators/features/snapview-server/src/snapview-server-helpers.c b/xlators/features/snapview-server/src/snapview-server-helpers.c index fdabc00a9b5..a8183e35d01 100644 --- a/xlators/features/snapview-server/src/snapview-server-helpers.c +++ b/xlators/features/snapview-server/src/snapview-server-helpers.c @@ -426,10 +426,12 @@ __svs_get_snap_dirent (xlator_t *this, const char *name)  }  glfs_t * -__svs_initialise_snapshot_volume (xlator_t *this, const char *name) +__svs_initialise_snapshot_volume (xlator_t *this, const char *name, +                                  int32_t *op_errno)  {          svs_private_t      *priv                = NULL;          int32_t             ret                 = -1; +        int32_t             local_errno         = ESTALE;          snap_dirent_t      *dirent              = NULL;          char                volname[PATH_MAX]   = {0, };          glfs_t             *fs                  = NULL; @@ -446,6 +448,7 @@ __svs_initialise_snapshot_volume (xlator_t *this, const char *name)          if (!dirent) {                  gf_log (this->name, GF_LOG_ERROR, "snap entry for "                          "name %s not found", name); +                local_errno = ENOENT;                  goto out;          } @@ -464,6 +467,7 @@ __svs_initialise_snapshot_volume (xlator_t *this, const char *name)                  gf_log (this->name, GF_LOG_ERROR,                          "glfs instance for snap volume %s "                          "failed", dirent->name); +                local_errno = ENOMEM;                  goto out;          } @@ -497,8 +501,12 @@ __svs_initialise_snapshot_volume (xlator_t *this, const char *name)          ret = 0;  out: -        if (ret && fs) { -                glfs_fini (fs); +        if (ret) { +                if (op_errno) +                        *op_errno = local_errno; + +                if (fs) +                        glfs_fini (fs);                  fs = NULL;          } @@ -510,7 +518,8 @@ out:  }  glfs_t * -svs_initialise_snapshot_volume (xlator_t *this, const char *name) +svs_initialise_snapshot_volume (xlator_t *this, const char *name, +                                int32_t *op_errno)  {          glfs_t             *fs   = NULL;          svs_private_t      *priv = NULL; @@ -523,7 +532,7 @@ svs_initialise_snapshot_volume (xlator_t *this, const char *name)          LOCK (&priv->snaplist_lock);          { -                fs = __svs_initialise_snapshot_volume (this, name); +                fs = __svs_initialise_snapshot_volume (this, name, op_errno);          }          UNLOCK (&priv->snaplist_lock);  | 
