diff options
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-snapshot-utils.c | 38 | 
1 files changed, 25 insertions, 13 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-snapshot-utils.c b/xlators/mgmt/glusterd/src/glusterd-snapshot-utils.c index 3f9e51e50cf..d1fb849f0f0 100644 --- a/xlators/mgmt/glusterd/src/glusterd-snapshot-utils.c +++ b/xlators/mgmt/glusterd/src/glusterd-snapshot-utils.c @@ -3723,6 +3723,14 @@ glusterd_copy_nfs_ganesha_file (glusterd_volinfo_t *src_vol,          GF_VALIDATE_OR_GOTO (this->name, src_vol, out);          GF_VALIDATE_OR_GOTO (this->name, dest_vol, out); +        if (glusterd_check_ganesha_export(src_vol) == _gf_false) { +                gf_msg_debug (this->name, 0, "%s is not exported via " +                              "NFS-Ganesha. Skipping copy of export conf.", +                              src_vol->volname); +                ret = 0; +                goto out; +        } +          if (src_vol->is_snap_volume) {                  GLUSTERD_GET_SNAP_DIR (snap_dir, src_vol->snapshot, priv);                  ret = snprintf (src_path, PATH_MAX, "%s/export.%s.conf", @@ -3736,19 +3744,15 @@ glusterd_copy_nfs_ganesha_file (glusterd_volinfo_t *src_vol,          ret = sys_lstat (src_path, &stbuf);          if (ret) { -                /* * -                * If export file is not present, volume is not exported -                * via ganesha. So it is not necessary to copy that during -                * snapshot. -                */ -                if (errno == ENOENT) { -                        ret = 0; -                        gf_msg_debug (this->name, 0, "%s not found", src_path); -                } else -                        gf_msg (this->name, GF_LOG_WARNING, errno, -                                GD_MSG_FILE_OP_FAILED, -                                "Stat on %s failed with %s", -                                src_path, strerror (errno)); +                /* +                 * This code path is hit, only when the src_vol is being * +                 * exported via NFS-Ganesha. So if the conf file is not  * +                 * available, we fail the snapshot operation.            * +                 */ +                gf_msg (this->name, GF_LOG_ERROR, errno, +                        GD_MSG_FILE_OP_FAILED, +                        "Stat on %s failed with %s", +                        src_path, strerror (errno));                  goto out;          } @@ -3779,6 +3783,14 @@ glusterd_copy_nfs_ganesha_file (glusterd_volinfo_t *src_vol,                  src = fopen (src_path, "r");                  dest = fopen (dest_path, "w"); +                if (!src || !dest) { +                        gf_msg (this->name, GF_LOG_ERROR, 0, +                                GD_MSG_FILE_OP_FAILED, +                                "Failed to open %s", +                                dest ? src_path : dest_path); +                        goto out; +                } +                  /* *                   * if the source volume is snapshot, the export conf file                   * consists of orginal volname  | 
