Print this page
NEX-15119 Commvault Certification fail incremental backup
Reviewed by: Yuri Pankov <yuri.pankov@nexenta.com>
Reviewed by: Roman Strashkin <roman.strashkin@nexenta.com>
NEX-15119 Commvault Certification fail incremental backup
Reviewed by: Yuri Pankov <yuri.pankov@nexenta.com>
Reviewed by: Roman Strashkin <roman.strashkin@nexenta.com>
NEX-13374 NDMP should be able to backup unmounted ZFS filesystems
Reviewed by: Yuri Pankov <yuri.pankov@nexenta.com>
Reviewed by: Evan Layton <evan.layton@nexenta.com>
NEX-9532 NDMP: readdir errors when file/directory has special characters
Reviewed by: Peer Dampmann <peer.dampmann@nexenta.com>
Reviewed by: Alexander Eremin <alexander.eremin@nexenta.com>
Reviewed by: Yuri Pankov <yuri.pankov@nexenta.com>
NEX-5801 Snapshots left over after failed backups
Reviewed by: Rick Mesta <rick.mesta@nexenta.com>
Reviewed by: Evan Layton <evan.layton@nexenta.com>
Reviewed by: Sanjay Nadkarni <sanjay.nadkarni@nexenta.com>
Reviewed by: Yuri Pankov <yuri.pankov@nexenta.com>
Revert "NEX-5801 Snapshots left over after failed backups"
This reverts commit f182fb95f09036db71fbfc6f0a6b90469b761f21.
NEX-5801 Snapshots left over after failed backups
Reviewed by: Rick Mesta <rick.mesta@nexenta.com>
Reviewed by: Evan Layton <evan.layton@nexenta.com>
Reviewed by: Sanjay Nadkarni <sanjay.nadkarni@nexenta.com>
NEX-2911 NDMP logging should use syslog and is too chatty
SUP-898 nscd is extremely slow when a local file is missing
Reviewed by: Alek Pinchuk <alek.pinchuk@nexenta.com>
Reviewed by: Josef Sipek <josef.sipek@nexenta.com>
NEX-2500 Conflict between NDMP backup job and 'zfs send' leads to NDMP job abort.
NEX-2492 mdb loops forever printing a stack backtrace
NEX-2430 ndmpd segfaults in get_backup_size+0x13b() lint fix
NEX-2430 ndmpd segfaults in get_backup_size+0x13b()
NEX-559 NDMP cannot backup/restore a file which spans multiple tapes
        
@@ -35,15 +35,16 @@
  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  * POSSIBILITY OF SUCH DAMAGE.
  */
 /* Copyright (c) 2007, The Storage Networking Industry Association. */
 /* Copyright (c) 1996, 1997 PDC, Network Appliance. All Rights Reserved */
-/* Copyright 2014 Nexenta Systems, Inc. All rights reserved. */
+/* Copyright 2017 Nexenta Systems, Inc. All rights reserved. */
 
 #include <sys/stat.h>
 #include <sys/types.h>
 #include <sys/time.h>
+#include <syslog.h>
 #include <ctype.h>
 #include <sys/socket.h>
 #include <sys/acl.h>
 #include <netinet/in.h>
 #include <arpa/inet.h>
@@ -112,10 +113,12 @@
 /*
  * NDMP exclusion list
  */
 char **ndmp_excl_list = NULL;
 
+extern boolean_t fs_is_checkpointed(ndmp_lbr_params_t *);
+
 /*
  * split_env
  *
  * Splits the string into list of sections separated by the
  * sep character.
@@ -234,16 +237,16 @@
  */
 static void
 prl(char **lpp)
 {
         if (!lpp) {
-                NDMP_LOG(LOG_DEBUG, "empty");
+                syslog(LOG_DEBUG, "empty");
                 return;
         }
 
         while (*lpp)
-                NDMP_LOG(LOG_DEBUG, "\"%s\"", *lpp++);
+                syslog(LOG_DEBUG, "\"%s\"", *lpp++);
 }
 
 
 /*
  * inlist
@@ -261,11 +264,11 @@
  */
 static boolean_t
 inlist(char **lpp, char *ent)
 {
         if (!lpp || !ent) {
-                NDMP_LOG(LOG_DEBUG, "empty list");
+                syslog(LOG_DEBUG, "empty list");
                 return (FALSE);
         }
 
         while (*lpp) {
                 /*
@@ -274,20 +277,20 @@
                  */
                 char *pattern = *lpp;
                 if (strncmp(pattern, "./", 2) == 0)
                         pattern += 2;
 
-                NDMP_LOG(LOG_DEBUG, "pattern %s, ent %s", pattern, ent);
+                syslog(LOG_DEBUG, "pattern %s, ent %s", pattern, ent);
 
                 if (match(pattern, ent)) {
-                        NDMP_LOG(LOG_DEBUG, "match(%s,%s)", pattern, ent);
+                        syslog(LOG_DEBUG, "match(%s,%s)", pattern, ent);
                         return (TRUE);
                 }
                 lpp++;
         }
 
-        NDMP_LOG(LOG_DEBUG, "no match");
+        syslog(LOG_DEBUG, "no match");
         return (FALSE);
 }
 
 
 /*
@@ -409,11 +412,11 @@
                  */
                 len = strlen(ep->nm3_opath);
                 if (len > 1 && ep->nm3_opath[len-2] == '/' &&
                     ep->nm3_opath[len-1] == '.') {
                         ep->nm3_opath[len-1] = '\0';
-                        NDMP_LOG(LOG_DEBUG,
+                        syslog(LOG_DEBUG,
                             "nm3_opath changed from %s. to %s",
                             ep->nm3_opath, ep->nm3_opath);
                 }
                 *lpp++ = ep->nm3_opath;
         }
@@ -484,11 +487,11 @@
                 np += strspn(np, "/");
         else
                 np = "";
 
         if (!tlm_cat_path(bp, np, pp)) {
-                NDMP_LOG(LOG_ERR, "Restore path too long %s/%s.", np, pp);
+                syslog(LOG_ERR, "Restore path too long %s/%s.", np, pp);
                 return (NULL);
         }
 
         return (bp);
 }
@@ -511,51 +514,38 @@
         ndmp_lbr_params_t *nlp;
         mem_ndmp_name_v3_t *ep;
 
         rv = NULL;
         if (!buf) {
-                NDMP_LOG(LOG_DEBUG, "buf is NULL");
+                syslog(LOG_DEBUG, "buf is NULL");
         } else if (!path) {
-                NDMP_LOG(LOG_DEBUG, "path is NULL");
+                syslog(LOG_DEBUG, "path is NULL");
         } else if ((nlp = rnp->rn_nlp) == 0) {
-                NDMP_LOG(LOG_DEBUG, "rnp->rn_nlp is NULL");
+                syslog(LOG_DEBUG, "rnp->rn_nlp is NULL");
         } else if (!nlp->nlp_params) {
-                NDMP_LOG(LOG_DEBUG, "nlp->nlp_params is NULL");
+                syslog(LOG_DEBUG, "nlp->nlp_params is NULL");
         } else
                 if (!ndmp_full_restore_path) {
                         if (idx < 0 || idx >= (int)nlp->nlp_nfiles) {
-                                NDMP_LOG(LOG_DEBUG,
+                                syslog(LOG_DEBUG,
                                     "Invalid idx %d range (0, %d)",
                                     idx, nlp->nlp_nfiles);
                         } else if (!(ep = (mem_ndmp_name_v3_t *)MOD_GETNAME(
                             nlp->nlp_params, idx))) {
-                                NDMP_LOG(LOG_DEBUG,
+                                syslog(LOG_DEBUG,
                                     "nlist entry %d is NULL", idx);
                         } else {
                                 rv = mkrsp(buf, path, ep->nm3_opath,
                                     ep->nm3_dpath);
-
-                                NDMP_LOG(LOG_DEBUG,
-                                    "idx %d org \"%s\" dst \"%s\"",
-                                    idx, ep->nm3_opath, ep->nm3_dpath);
-                                if (rv) {
-                                        NDMP_LOG(LOG_DEBUG,
-                                            "path \"%s\": \"%s\"", path, rv);
-                                } else {
-                                        NDMP_LOG(LOG_DEBUG,
-                                            "path \"%s\": NULL", path);
                                 }
-                        }
                 } else {
                         if (!tlm_cat_path(buf, nlp->nlp_restore_path, path)) {
-                                NDMP_LOG(LOG_ERR, "Path too long %s/%s.",
+                                syslog(LOG_ERR, "Path too long %s/%s.",
                                     nlp->nlp_restore_path, path);
                                 rv = NULL;
                         } else {
                                 rv = buf;
-                                NDMP_LOG(LOG_DEBUG,
-                                    "path \"%s\": \"%s\"", path, rv);
                         }
                 }
 
         return (rv);
 }
@@ -619,11 +609,11 @@
 
         if (!path)
                 return (0);
 
         rv = !fs_is_rdonly(path) && !fs_is_chkpntvol(path);
-        NDMP_LOG(LOG_DEBUG, "%d path \"%s\"", rv, path);
+        syslog(LOG_DEBUG, "%d path \"%s\"", rv, path);
         return (rv);
 
 }
 
 
@@ -788,11 +778,11 @@
 static void
 log_bk_params_v3(ndmpd_session_t *session, ndmpd_module_params_t *params,
     ndmp_lbr_params_t *nlp)
 {
         MOD_LOGV3(params, NDMP_LOG_NORMAL, "Backing up \"%s\".\n",
-            nlp->nlp_backup_path);
+            NLP_ISCHKPNTED(nlp) ? nlp->nlp_mountpoint : nlp->nlp_backup_path);
 
         if (session->ns_mover.md_data_addr.addr_type == NDMP_ADDR_LOCAL)
                 MOD_LOGV3(params, NDMP_LOG_NORMAL,
                     "Tape record size: %d.\n",
                     session->ns_mover.md_record_size);
@@ -834,14 +824,14 @@
         char *envp;
 
         envp = MOD_GETENV(params, "UPDATE");
         if (!envp) {
                 NLP_SET(nlp, NLPF_UPDATE);
-                NDMP_LOG(LOG_DEBUG,
+                syslog(LOG_DEBUG,
                     "env(UPDATE) not defined, default to TRUE");
         } else {
-                NDMP_LOG(LOG_DEBUG, "env(UPDATE): \"%s\"", envp);
+                syslog(LOG_DEBUG, "env(UPDATE): \"%s\"", envp);
                 if (IS_YORT(*envp))
                         NLP_SET(nlp, NLPF_UPDATE);
                 else
                         NLP_UNSET(nlp, NLPF_UPDATE);
         }
@@ -867,14 +857,14 @@
 {
         char *envp;
 
         envp = MOD_GETENV(params, "HIST");
         if (!envp) {
-                NDMP_LOG(LOG_DEBUG, "env(HIST) not defined");
+                syslog(LOG_DEBUG, "env(HIST) not defined");
                 NLP_UNSET(nlp, NLPF_FH);
         } else {
-                NDMP_LOG(LOG_DEBUG, "env(HIST): \"%s\"", envp);
+                syslog(LOG_DEBUG, "env(HIST): \"%s\"", envp);
                 if (IS_YORT(*envp) || IS_F(*envp))
                         NLP_SET(nlp, NLPF_FH);
                 else
                         NLP_UNSET(nlp, NLPF_FH);
 
@@ -908,14 +898,14 @@
 {
         char *envp;
 
         envp = MOD_GETENV(params, "EXCLUDE");
         if (!envp) {
-                NDMP_LOG(LOG_DEBUG, "env(EXCLUDE) not defined");
+                syslog(LOG_DEBUG, "env(EXCLUDE) not defined");
                 nlp->nlp_exl = NULL;
         } else {
-                NDMP_LOG(LOG_DEBUG, "env(EXCLUDE): \"%s\"", envp);
+                syslog(LOG_DEBUG, "env(EXCLUDE): \"%s\"", envp);
                 nlp->nlp_exl = split_env(envp, ',');
                 prl(nlp->nlp_exl);
         }
 }
 
@@ -940,14 +930,14 @@
 {
         char *envp;
 
         envp = MOD_GETENV(params, "FILES");
         if (!envp) {
-                NDMP_LOG(LOG_DEBUG, "env(FILES) not defined");
+                syslog(LOG_DEBUG, "env(FILES) not defined");
                 nlp->nlp_inc = NULL;
         } else {
-                NDMP_LOG(LOG_DEBUG, "env(FILES): \"%s\"", envp);
+                syslog(LOG_DEBUG, "env(FILES): \"%s\"", envp);
                 nlp->nlp_inc = split_env(envp, ' ');
                 prl(nlp->nlp_inc);
         }
 }
 
@@ -975,11 +965,11 @@
          * in the request that we should not send fh_info.
          * At the moment we do not support DAR on directories, so if the user
          * needs to restore a directory they should disable the DAR.
          */
         if (params->mp_operation == NDMP_DATA_OP_RECOVER && !ndmp_dar_support) {
-                NDMP_LOG(LOG_DEBUG, "Direct Access Restore Disabled");
+                syslog(LOG_INFO, "Direct Access Restore Disabled");
                 NLP_UNSET(nlp, NLPF_DIRECT);
                 MOD_LOGV3(params, NDMP_LOG_NORMAL,
                     "DAR is disabled. Running Restore without DAR");
                 return;
         }
@@ -989,27 +979,27 @@
          * back the fh_info, for some clients do not use get_backup_attrs.
          * If operation is restore we have to unset the DIRECT, for
          * some clients do not set the MOVER window.
          */
         if (params->mp_operation == NDMP_DATA_OP_BACKUP) {
-                NDMP_LOG(LOG_DEBUG, "backup default env(DIRECT): YES");
+                syslog(LOG_DEBUG, "backup default env(DIRECT): YES");
                 NLP_SET(nlp, NLPF_DIRECT);
         } else {
 
                 envp = MOD_GETENV(params, "DIRECT");
                 if (!envp) {
-                        NDMP_LOG(LOG_DEBUG, "env(DIRECT) not defined");
+                        syslog(LOG_DEBUG, "env(DIRECT) not defined");
                         NLP_UNSET(nlp, NLPF_DIRECT);
                 } else {
-                        NDMP_LOG(LOG_DEBUG, "env(DIRECT): \"%s\"", envp);
+                        syslog(LOG_DEBUG, "env(DIRECT): \"%s\"", envp);
                         if (IS_YORT(*envp)) {
                                 NLP_SET(nlp, NLPF_DIRECT);
-                                NDMP_LOG(LOG_DEBUG,
+                                syslog(LOG_DEBUG,
                                     "Direct Access Restore Enabled");
                         } else {
                                 NLP_UNSET(nlp, NLPF_DIRECT);
-                                NDMP_LOG(LOG_DEBUG,
+                                syslog(LOG_DEBUG,
                                     "Direct Access Restore Disabled");
                         }
                 }
         }
 
@@ -1085,12 +1075,10 @@
                 return (NDMP_ILLEGAL_ARGS_ERR);
         }
 
         tstamp = tok & 0xffffffff;
         seq = (tok >> 32) & 0xffffffff;
-        NDMP_LOG(LOG_DEBUG, "basedate \"%s\" %lld seq %u tstamp %u",
-            basedate, tok, seq, tstamp);
 
         if ((int)seq > ndmp_get_max_tok_seq()) {
                 rv = NDMP_ILLEGAL_ARGS_ERR;
                 MOD_LOGV3(params, NDMP_LOG_ERROR,
                     "The sequence counter of the token exceeds the "
@@ -1226,11 +1214,11 @@
                 return (get_date_token_v3(params, nlp, envp));
 
 
         envp = MOD_GETENV(params, "LEVEL");
         if (!envp) {
-                NDMP_LOG(LOG_DEBUG, "env(LEVEL) not defined, default to 0");
+                syslog(LOG_DEBUG, "env(LEVEL) not defined, default to 0");
                 NLP_SET(nlp, NLPF_LEVELBK);
                 NLP_UNSET(nlp, NLPF_LBRBK);
                 NLP_UNSET(nlp, NLPF_TOKENBK);
                 nlp->nlp_llevel = 0;
                 nlp->nlp_ldate = 0;
@@ -1308,17 +1296,15 @@
 
         nlp->nlp_tokseq++;
         tok = ((u_longlong_t)nlp->nlp_tokseq << 32) | nlp->nlp_cdate;
         (void) snprintf(val, sizeof (val), "%llu", tok);
 
-        NDMP_LOG(LOG_DEBUG, "tok: %lld %s", tok, val);
-
         if (MOD_SETENV(params, "DUMP_DATE", val) != 0) {
                 MOD_LOGV3(params, NDMP_LOG_ERROR,
                     "Could not set DUMP_DATE to %s", val);
         } else if (!nlp->nlp_dmpnm) {
-                NDMP_LOG(LOG_DEBUG, "No log file defined");
+                syslog(LOG_DEBUG, "No log file defined");
         } else if (ndmpd_append_dumptime(nlp->nlp_dmpnm, nlp->nlp_backup_path,
             nlp->nlp_tokseq, nlp->nlp_tokdate) < 0) {
                 MOD_LOGV3(params, NDMP_LOG_ERROR,
                     "Saving backup date for \"%s\" in \"%s\".\n",
                     nlp->nlp_backup_path, nlp->nlp_dmpnm);
@@ -1344,11 +1330,11 @@
 {
         if (!params || !nlp)
                 return;
 
         if (!nlp->nlp_dmpnm) {
-                NDMP_LOG(LOG_DEBUG, "No log file defined");
+                syslog(LOG_DEBUG, "No log file defined");
         } else if (ndmpd_append_dumptime(nlp->nlp_dmpnm, nlp->nlp_backup_path,
             nlp->nlp_clevel, nlp->nlp_cdate) < 0) {
                 MOD_LOGV3(params, NDMP_LOG_ERROR,
                     "Saving backup date for \"%s\" in \"%s\".\n",
                     nlp->nlp_backup_path, nlp->nlp_dmpnm);
@@ -1374,11 +1360,11 @@
 {
         if (!params || !nlp)
                 return;
 
         if (!NLP_SHOULD_UPDATE(nlp)) {
-                NDMP_LOG(LOG_DEBUG, "update not requested");
+                syslog(LOG_DEBUG, "update not requested");
         } else if (ndmpd_put_dumptime(nlp->nlp_backup_path, nlp->nlp_clevel,
             nlp->nlp_cdate) < 0) {
                 MOD_LOGV3(params, NDMP_LOG_ERROR, "Logging backup date.\n");
         }
 }
@@ -1425,34 +1411,32 @@
  *      Reader writer IPC
  *      File history callback structure
  *
  * Parameters:
  *   session (input) - pointer to the session
- *   jname (input) - name assigned to the current backup for
- *      job stats strucure
  *
  * Returns:
  *   0: on success
  *   -1: otherwise
  */
 static int
-backup_alloc_structs_v3(ndmpd_session_t *session, char *jname)
+backup_alloc_structs_v3(ndmpd_session_t *session)
 {
         int n;
         long xfer_size;
         ndmp_lbr_params_t *nlp;
         tlm_commands_t *cmds;
 
         nlp = ndmp_get_nlp(session);
         if (!nlp) {
-                NDMP_LOG(LOG_DEBUG, "nlp == NULL");
+                syslog(LOG_ERR, "nlp == NULL");
                 return (-1);
         }
 
-        nlp->nlp_jstat = tlm_new_job_stats(jname);
+        nlp->nlp_jstat = tlm_new_job_stats(nlp->nlp_job_name);
         if (!nlp->nlp_jstat) {
-                NDMP_LOG(LOG_DEBUG, "Creating job stats");
+                syslog(LOG_ERR, "Creating job stats failed");
                 return (-1);
         }
 
         cmds = &nlp->nlp_cmds;
         (void) memset(cmds, 0, sizeof (*cmds));
@@ -1466,25 +1450,25 @@
                  */
                 n = 512 * KILOBYTE / xfer_size;
                 if (n <= 0)
                         n = 1;
                 xfer_size *= n;
-                NDMP_LOG(LOG_DEBUG, "Adjusted read size: %d",
+                syslog(LOG_DEBUG, "Adjusted read size: %d",
                     xfer_size);
         }
 
         cmds->tcs_command = tlm_create_reader_writer_ipc(TRUE, xfer_size);
         if (!cmds->tcs_command) {
-                tlm_un_ref_job_stats(jname);
+                tlm_un_ref_job_stats(nlp->nlp_job_name);
                 return (-1);
         }
 
         nlp->nlp_logcallbacks = lbrlog_callbacks_init(session,
             ndmpd_fhpath_v3_cb, ndmpd_fhdir_v3_cb, ndmpd_fhnode_v3_cb);
         if (!nlp->nlp_logcallbacks) {
                 tlm_release_reader_writer_ipc(cmds->tcs_command);
-                tlm_un_ref_job_stats(jname);
+                tlm_un_ref_job_stats(nlp->nlp_job_name);
                 return (-1);
         }
         nlp->nlp_jstat->js_callbacks = (void *)(nlp->nlp_logcallbacks);
         nlp->nlp_restored = NULL;
 
@@ -1500,64 +1484,62 @@
  *      Reader writer IPC
  *      File recovery callback structure
  *
  * Parameters:
  *   session (input) - pointer to the session
- *   jname (input) - name assigned to the current backup for
- *      job stats strucure
  *
  * Returns:
  *   0: on success
  *   -1: otherwise
  */
 int
-restore_alloc_structs_v3(ndmpd_session_t *session, char *jname)
+restore_alloc_structs_v3(ndmpd_session_t *session)
 {
         long xfer_size;
         ndmp_lbr_params_t *nlp;
         tlm_commands_t *cmds;
 
         nlp = ndmp_get_nlp(session);
         if (!nlp) {
-                NDMP_LOG(LOG_DEBUG, "nlp == NULL");
+                syslog(LOG_ERR, "nlp == NULL");
                 return (-1);
         }
 
         /* this is used in ndmpd_path_restored_v3() */
         nlp->nlp_lastidx = -1;
 
-        nlp->nlp_jstat = tlm_new_job_stats(jname);
+        nlp->nlp_jstat = tlm_new_job_stats(nlp->nlp_job_name);
         if (!nlp->nlp_jstat) {
-                NDMP_LOG(LOG_DEBUG, "Creating job stats");
+                syslog(LOG_ERR, "Creating job stats failed");
                 return (-1);
         }
 
         cmds = &nlp->nlp_cmds;
         (void) memset(cmds, 0, sizeof (*cmds));
 
         xfer_size = ndmp_buffer_get_size(session);
         cmds->tcs_command = tlm_create_reader_writer_ipc(FALSE, xfer_size);
         if (!cmds->tcs_command) {
-                tlm_un_ref_job_stats(jname);
+                tlm_un_ref_job_stats(nlp->nlp_job_name);
                 return (-1);
         }
 
         nlp->nlp_logcallbacks = lbrlog_callbacks_init(session,
             ndmpd_path_restored_v3, NULL, NULL);
         if (!nlp->nlp_logcallbacks) {
                 tlm_release_reader_writer_ipc(cmds->tcs_command);
-                tlm_un_ref_job_stats(jname);
+                tlm_un_ref_job_stats(nlp->nlp_job_name);
                 return (-1);
         }
         nlp->nlp_jstat->js_callbacks = (void *)(nlp->nlp_logcallbacks);
 
         nlp->nlp_rsbm = bm_alloc(nlp->nlp_nfiles, 0);
         if (nlp->nlp_rsbm < 0) {
-                NDMP_LOG(LOG_ERR, "Out of memory.");
+                syslog(LOG_ERR, "Out of memory.");
                 lbrlog_callbacks_done(nlp->nlp_logcallbacks);
                 tlm_release_reader_writer_ipc(cmds->tcs_command);
-                tlm_un_ref_job_stats(jname);
+                tlm_un_ref_job_stats(nlp->nlp_job_name);
                 return (-1);
         }
 
         return (0);
 }
@@ -1569,57 +1551,54 @@
  * Release the resources allocated by backup_alloc_structs_v3
  * function.
  *
  * Parameters:
  *   session (input) - pointer to the session
- *   jname (input) - name assigned to the current backup for
- *      job stats strucure
  *
  * Returns:
  *   void
  */
-/*ARGSUSED*/
 static void
-free_structs_v3(ndmpd_session_t *session, char *jname)
+free_structs_v3(ndmpd_session_t *session)
 {
         ndmp_lbr_params_t *nlp;
         tlm_commands_t *cmds;
 
         nlp = ndmp_get_nlp(session);
         if (!nlp) {
-                NDMP_LOG(LOG_DEBUG, "nlp == NULL");
+                syslog(LOG_DEBUG, "nlp == NULL");
                 return;
         }
         cmds = &nlp->nlp_cmds;
         if (!cmds) {
-                NDMP_LOG(LOG_DEBUG, "cmds == NULL");
+                syslog(LOG_DEBUG, "cmds == NULL");
                 return;
         }
 
         if (nlp->nlp_logcallbacks) {
                 lbrlog_callbacks_done(nlp->nlp_logcallbacks);
                 nlp->nlp_logcallbacks = NULL;
         } else
-                NDMP_LOG(LOG_DEBUG, "FH CALLBACKS == NULL");
+                syslog(LOG_DEBUG, "FH CALLBACKS == NULL");
 
         if (cmds->tcs_command) {
                 if (cmds->tcs_command->tc_buffers != NULL)
                         tlm_release_reader_writer_ipc(cmds->tcs_command);
                 else
-                        NDMP_LOG(LOG_DEBUG, "BUFFERS == NULL");
+                        syslog(LOG_DEBUG, "BUFFERS == NULL");
                 cmds->tcs_command = NULL;
         } else
-                NDMP_LOG(LOG_DEBUG, "COMMAND == NULL");
+                syslog(LOG_DEBUG, "COMMAND == NULL");
 
         if (nlp->nlp_bkmap >= 0) {
                 (void) dbm_free(nlp->nlp_bkmap);
                 nlp->nlp_bkmap = -1;
         }
 
         if (session->ns_data.dd_operation == NDMP_DATA_OP_RECOVER) {
                 if (nlp->nlp_rsbm < 0) {
-                        NDMP_LOG(LOG_DEBUG, "nlp_rsbm < 0 %d", nlp->nlp_rsbm);
+                        syslog(LOG_DEBUG, "nlp_rsbm < 0 %d", nlp->nlp_rsbm);
                 } else {
                         (void) bm_free(nlp->nlp_rsbm);
                         nlp->nlp_rsbm = -1;
                 }
         }
@@ -1651,21 +1630,19 @@
         struct stat64 st;
         char fullpath[TLM_MAX_PATH_NAME];
         char *p;
 
         if (!bpp || !pnp || !enp) {
-                NDMP_LOG(LOG_DEBUG, "Invalid argument");
+                syslog(LOG_ERR, "Invalid argument in backup_dirv3");
                 return (-1);
         }
 
-        NDMP_LOG(LOG_DEBUG, "d(%s)", bpp->bp_tmp);
-
         if (lstat64(bpp->bp_tmp, &st) != 0)
                 return (0);
 
         if (acl_get(bpp->bp_tmp, ACL_NO_TRIVIAL, &aclp) != 0) {
-                NDMP_LOG(LOG_DEBUG, "acl_get error errno=%d", errno);
+                syslog(LOG_DEBUG, "acl_get error errno=%d", errno);
                 return (-1);
         }
         if (aclp && (acltp = acl_totext(aclp,
             ACL_APPEND_ID | ACL_SID_FMT | ACL_COMPACT_FMT)) != NULL) {
                 (void) strlcpy(bpp->bp_tlmacl->acl_info.attr_info,
@@ -1716,31 +1693,29 @@
 static int
 backup_filev3(bk_param_v3_t *bpp, fst_node_t *pnp,
     fst_node_t *enp)
 {
         char *ent;
-        longlong_t rv;
+        int rv = -1;
         longlong_t apos, bpos;
         acl_t *aclp = NULL;
         char *acltp;
         struct stat64 st;
         char fullpath[TLM_MAX_PATH_NAME];
         char *p;
 
         if (!bpp || !pnp || !enp) {
-                NDMP_LOG(LOG_DEBUG, "Invalid argument");
+                syslog(LOG_ERR, "Invalid argument in backup_filev3");
                 return (-1);
         }
 
-        NDMP_LOG(LOG_DEBUG, "f(%s)", bpp->bp_tmp);
-
         if (lstat64(bpp->bp_tmp, &st) != 0)
                 return (0);
 
         if (!S_ISLNK(bpp->bp_tlmacl->acl_attr.st_mode)) {
                 if (acl_get(bpp->bp_tmp, ACL_NO_TRIVIAL, &aclp) != 0) {
-                        NDMP_LOG(LOG_DEBUG, "acl_get error");
+                        syslog(LOG_DEBUG, "acl_get error");
                         return (-1);
                 }
 
                 if (aclp &&
                     (acltp = acl_totext(aclp,
@@ -1801,25 +1776,25 @@
 {
         int rv;
 
         if (!bpp) {
                 rv = -1;
-                NDMP_LOG(LOG_DEBUG, "Lost bpp");
+                syslog(LOG_DEBUG, "Lost bpp");
         } else if (!bpp->bp_session) {
                 rv = -1;
-                NDMP_LOG(LOG_DEBUG, "Session is NULL");
+                syslog(LOG_DEBUG, "Session is NULL");
         } else if (bpp->bp_session->ns_eof) {
                 rv = -1;
-                NDMP_LOG(LOG_INFO,
+                syslog(LOG_INFO,
                     "Connection client is closed for backup \"%s\"",
                     bpp->bp_nlp->nlp_backup_path);
         } else if (!bpp->bp_nlp) {
-                NDMP_LOG(LOG_DEBUG, "Lost nlp");
+                syslog(LOG_DEBUG, "Lost nlp");
                 return (-1);
         } else if (bpp->bp_session->ns_data.dd_abort) {
                 rv = -1;
-                NDMP_LOG(LOG_INFO, "Backup aborted \"%s\"",
+                syslog(LOG_INFO, "Backup aborted \"%s\"",
                     bpp->bp_nlp->nlp_backup_path);
         } else
                 rv = 0;
 
         return (rv);
@@ -1850,11 +1825,11 @@
         char *ent;
         boolean_t rv;
         struct stat64 *estp;
 
         if (!bpp || !pnp || !enp || !errp) {
-                NDMP_LOG(LOG_DEBUG, "Invalid argument");
+                syslog(LOG_DEBUG, "Invalid argument in shouldskip");
                 return (TRUE);
         }
 
         if (!enp->tn_path) {
                 ent = "";
@@ -1870,27 +1845,20 @@
          * get other entries in the directory of this entry.
          */
         if (!dbm_getone(bpp->bp_nlp->nlp_bkmap, (u_longlong_t)estp->st_ino)) {
                 rv = TRUE;
                 *errp = S_ISDIR(estp->st_mode) ? FST_SKIP : 0;
-                NDMP_LOG(LOG_DEBUG, "Skipping %d %s/%s",
-                    *errp, pnp->tn_path, ent);
         } else if (tlm_is_excluded(pnp->tn_path, ent, bpp->bp_excls)) {
                 rv = TRUE;
                 *errp = S_ISDIR(estp->st_mode) ? FST_SKIP : 0;
-                NDMP_LOG(LOG_DEBUG, "excl %d \"%s/%s\"",
-                    *errp, pnp->tn_path, ent);
         } else if (inexl(bpp->bp_nlp->nlp_exl, ent)) {
                 rv = TRUE;
                 *errp = S_ISDIR(estp->st_mode) ? FST_SKIP : 0;
-                NDMP_LOG(LOG_DEBUG, "out %d \"%s/%s\"",
-                    *errp, pnp->tn_path, ent);
         } else if (!S_ISDIR(estp->st_mode) &&
             !ininc(bpp->bp_nlp->nlp_inc, ent)) {
                 rv = TRUE;
                 *errp = 0;
-                NDMP_LOG(LOG_DEBUG, "!in \"%s/%s\"", pnp->tn_path, ent);
         } else
                 rv = FALSE;
 
         return (rv);
 }
@@ -1921,24 +1889,22 @@
 {
         boolean_t rv;
 
         if (!stp) {
                 rv = FALSE;
-                NDMP_LOG(LOG_DEBUG, "stp is NULL");
+                syslog(LOG_DEBUG, "stp is NULL");
         } else if (!nlp) {
                 rv = FALSE;
-                NDMP_LOG(LOG_DEBUG, "nlp is NULL");
+                syslog(LOG_DEBUG, "nlp is NULL");
         } else if (t == 0) {
                 /*
                  * if we are doing base backup then we do not need to
                  * check the time, for we should backup everything.
                  */
                 rv = TRUE;
-                NDMP_LOG(LOG_DEBUG, "Base Backup");
         } else if (S_ISDIR(stp->st_mode) && ndmp_force_bk_dirs) {
                 rv = TRUE;
-                NDMP_LOG(LOG_DEBUG, "d(%lu)", (uint_t)stp->st_ino);
         } else if (S_ISDIR(stp->st_mode) &&
             dbm_getone(nlp->nlp_bkmap, (u_longlong_t)stp->st_ino) &&
             ((NLP_ISDUMP(nlp) && ndmp_dump_path_node) ||
             (NLP_ISTAR(nlp) && ndmp_tar_path_node))) {
                 /*
@@ -1955,30 +1921,27 @@
                  * but for 'tar' format, it does not.  In provision to the
                  * NDMP-v4 spec, for 'tar' format the intermediate directories
                  * need not to be reported.
                  */
                 rv = TRUE;
-                NDMP_LOG(LOG_DEBUG, "p(%lu)", (u_longlong_t)stp->st_ino);
         } else if (stp->st_mtime > t) {
                 rv = TRUE;
-                NDMP_LOG(LOG_DEBUG, "m(%lu): %lu > %lu",
-                    (uint_t)stp->st_ino, (uint_t)stp->st_mtime, (uint_t)t);
         } else if (stp->st_ctime > t) {
                 if (NLP_IGNCTIME(nlp)) {
                         rv = FALSE;
-                        NDMP_LOG(LOG_DEBUG, "ign c(%lu): %lu > %lu",
+                        syslog(LOG_DEBUG, "ign c(%lu): %lu > %lu",
                             (uint_t)stp->st_ino, (uint_t)stp->st_ctime,
                             (uint_t)t);
                 } else {
                         rv = TRUE;
-                        NDMP_LOG(LOG_DEBUG, "c(%lu): %lu > %lu",
+                        syslog(LOG_DEBUG, "c(%lu): %lu > %lu",
                             (uint_t)stp->st_ino, (uint_t)stp->st_ctime,
                             (uint_t)t);
                 }
         } else {
                 rv = FALSE;
-                NDMP_LOG(LOG_DEBUG, "mc(%lu): (%lu,%lu) < %lu",
+                syslog(LOG_DEBUG, "mc(%lu): (%lu,%lu) < %lu",
                     (uint_t)stp->st_ino, (uint_t)stp->st_mtime,
                     (uint_t)stp->st_ctime, (uint_t)t);
         }
 
         return (rv);
@@ -1998,17 +1961,17 @@
 {
         int ret;
         acl_t *aclp = NULL;
         char *acltp;
 
-        NDMP_LOG(LOG_DEBUG, "flags %x", nlp->nlp_flags);
+        syslog(LOG_DEBUG, "flags %x", nlp->nlp_flags);
         if (NLP_INCLMTIME(nlp) == FALSE)
                 return (0);
 
         ret = acl_get(name, ACL_NO_TRIVIAL, &aclp);
         if (ret != 0) {
-                NDMP_LOG(LOG_DEBUG,
+                syslog(LOG_DEBUG,
                     "Error getting the acl information: err %d", ret);
                 return (0);
         }
         if (aclp && (acltp = acl_totext(aclp,
             ACL_APPEND_ID | ACL_SID_FMT | ACL_COMPACT_FMT)) != NULL) {
@@ -2090,19 +2053,19 @@
                 fhp = pnp->tn_fh;
         }
 
 
         if (!tlm_cat_path(bpp->bp_tmp, pnp->tn_path, ent)) {
-                NDMP_LOG(LOG_ERR, "Path too long %s/%s.", pnp->tn_path, ent);
+                syslog(LOG_ERR, "Path too long %s/%s.", pnp->tn_path, ent);
                 return (FST_SKIP);
         }
         if (NLP_ISSET(bpp->bp_nlp, NLPF_TOKENBK))
                 t = bpp->bp_nlp->nlp_tokdate;
         else if (NLP_ISSET(bpp->bp_nlp, NLPF_LEVELBK)) {
                 t = bpp->bp_nlp->nlp_ldate;
         } else {
-                NDMP_LOG(LOG_DEBUG, "Unknown backup type on \"%s/%s\"",
+                syslog(LOG_ERR, "Unknown backup type on \"%s/%s\"",
                     pnp->tn_path, ent);
                 return (-1);
         }
 
         if (S_ISDIR(stp->st_mode)) {
@@ -2175,15 +2138,15 @@
                 stp = pnp->tn_st;
                 fhp = pnp->tn_fh;
         }
 
         if (!tlm_cat_path(bpp->bp_tmp, pnp->tn_path, ent)) {
-                NDMP_LOG(LOG_ERR, "Path too long %s/%s.", pnp->tn_path, ent);
+                syslog(LOG_ERR, "Path too long %s/%s.", pnp->tn_path, ent);
                 return (FST_SKIP);
         }
         if (!NLP_ISSET(bpp->bp_nlp, NLPF_LBRBK)) {
-                NDMP_LOG(LOG_DEBUG, "!NLPF_LBRBK");
+                syslog(LOG_DEBUG, "!NLPF_LBRBK");
                 return (-1);
         }
 
         if (S_ISDIR(stp->st_mode)) {
                 bpp->bp_tlmacl->acl_dir_fh = *fhp;
@@ -2211,14 +2174,11 @@
  * The reader thread for the backup.  It sets up the callback
  * parameters and traverses the backup hierarchy in level-order
  * way.
  *
  * Parameters:
- *   jname (input) - name assigned to the current backup for
- *      job stats strucure
- *   nlp (input) - pointer to the nlp structure
- *   cmds (input) - pointer to the tlm_commands_t structure
+ *   argp (input) - backup reader argument
  *
  * Returns:
  *   0: on success
  *   != 0: otherwise
  */
@@ -2229,18 +2189,17 @@
         tlm_cmd_t *lcmd;
         tlm_acls_t tlm_acls;
         longlong_t bpos, n;
         bk_param_v3_t bp;
         fs_traverse_t ft;
-        char *jname;
         ndmp_lbr_params_t *nlp;
         tlm_commands_t *cmds;
+        int rc;
 
         if (!argp)
                 return (-1);
 
-        jname = argp->br_jname;
         nlp = argp->br_nlp;
         cmds = argp->br_cmds;
 
         rv = 0;
         lcmd = cmds->tcs_command;
@@ -2252,18 +2211,21 @@
         /* NDMP parameters */
         bp.bp_session = nlp->nlp_session;
         bp.bp_nlp = nlp;
 
         /* LBR-related parameters  */
-        bp.bp_js = tlm_ref_job_stats(jname);
+        bp.bp_js = tlm_ref_job_stats(nlp->nlp_job_name);
         bp.bp_cmds = cmds;
         bp.bp_lcmd = lcmd;
         bp.bp_tlmacl = &tlm_acls;
         bp.bp_opr = 0;
 
         /* release the parent thread, after referencing the job stats */
-        (void) pthread_barrier_wait(&argp->br_barrier);
+        rc = pthread_barrier_wait(&argp->br_barrier);
+        if (rc == PTHREAD_BARRIER_SERIAL_THREAD) {
+                (void) pthread_barrier_destroy(&argp->br_barrier);
+        }
 
         bp.bp_tmp = ndmp_malloc(sizeof (char) * TLM_MAX_PATH_NAME);
         if (!bp.bp_tmp)
                 return (-1);
 
@@ -2271,47 +2233,49 @@
          * Make the checkpointed paths for traversing the
          * backup hierarchy, if we make the checkpoint.
          */
         bp.bp_unchkpnm = nlp->nlp_backup_path;
         if (!NLP_ISCHKPNTED(nlp)) {
-                tlm_acls.acl_checkpointed = TRUE;
+                tlm_acls.acl_checkpointed = FALSE;
                 bp.bp_chkpnm = ndmp_malloc(sizeof (char) * TLM_MAX_PATH_NAME);
                 if (!bp.bp_chkpnm) {
                         NDMP_FREE(bp.bp_tmp);
                         return (-1);
                 }
                 (void) tlm_build_snapshot_name(nlp->nlp_backup_path,
                     bp.bp_chkpnm, nlp->nlp_jstat->js_job_name);
         } else {
-                tlm_acls.acl_checkpointed = FALSE;
-                bp.bp_chkpnm = nlp->nlp_backup_path;
+                tlm_acls.acl_checkpointed = TRUE;
+                bp.bp_chkpnm = nlp->nlp_mountpoint;
         }
         bp.bp_excls = ndmpd_make_exc_list();
 
         /* set traversing arguments */
         ft.ft_path = nlp->nlp_backup_path;
         ft.ft_lpath = bp.bp_chkpnm;
 
-        NDMP_LOG(LOG_DEBUG, "path %s lpath %s", ft.ft_path, ft.ft_lpath);
         if (NLP_ISSET(nlp, NLPF_TOKENBK) || NLP_ISSET(nlp, NLPF_LEVELBK)) {
                 ft.ft_callbk = timebk_v3;
                 tlm_acls.acl_clear_archive = FALSE;
         } else if (NLP_ISSET(nlp, NLPF_LBRBK)) {
                 ft.ft_callbk = lbrbk_v3;
                 tlm_acls.acl_clear_archive = FALSE;
 
-                NDMP_LOG(LOG_DEBUG, "bp_opr %x clr_arc %c",
+                syslog(LOG_DEBUG, "bp_opr %x clr_arc %c",
                     bp.bp_opr, NDMP_YORN(tlm_acls.acl_clear_archive));
         } else {
                 rv = -1;
                 MOD_LOGV3(nlp->nlp_params, NDMP_LOG_ERROR,
-                    "Unknow backup type.\n");
+                    "Unknown backup type.\n");
         }
+
         ft.ft_arg = &bp;
-        ft.ft_logfp = (ft_log_t)ndmp_log;
+        ft.ft_logfp = (ft_log_t)syslog;
         ft.ft_flags = FST_VERBOSE | FST_STOP_ONERR;
 
+        syslog(LOG_DEBUG, "Traverse logical path [%s]", ft.ft_lpath);
+
         /* take into account the header written to the stream so far */
         n = tlm_get_data_offset(lcmd);
         nlp->nlp_session->ns_data.dd_module.dm_stats.ms_bytes_processed = n;
 
         if (rv == 0) {
@@ -2338,13 +2302,13 @@
         NDMP_FREE(bp.bp_excls);
 
         cmds->tcs_reader_count--;
         lcmd->tc_writer = TLM_STOP;
         tlm_release_reader_writer_ipc(lcmd);
-        tlm_un_ref_job_stats(jname);
-        return (rv);
+        tlm_un_ref_job_stats(nlp->nlp_job_name);
 
+        return (rv);
 }
 
 
 /*
  * tar_backup_v3
@@ -2354,49 +2318,51 @@
  *
  * Parameters:
  *   session (input) - pointer to the session
  *   params (input) - pointer to the parameters structure
  *   nlp (input) - pointer to the nlp structure
- *   jname (input) - job name
  *
  * Returns:
  *   0: on success
  *   != 0: otherwise
  */
 static int
 tar_backup_v3(ndmpd_session_t *session, ndmpd_module_params_t *params,
-    ndmp_lbr_params_t *nlp, char *jname)
+    ndmp_lbr_params_t *nlp)
 {
         tlm_commands_t *cmds;
         backup_reader_arg_t arg;
         pthread_t rdtp;
         char info[256];
         int result;
         ndmp_context_t nctx;
         int err;
+        int rc;
 
-        if (ndmp_get_bk_dir_ino(nlp))
+        if (ndmp_get_bk_dir_ino(nlp)) {
+                syslog(LOG_ERR, "Couldn't get backup directory inode");
                 return (-1);
+        }
 
         result = err = 0;
 
         /* exit as if there was an internal error */
-        if (session->ns_eof)
+        if (session->ns_eof) {
                 return (-1);
-
+        }
         if (!session->ns_data.dd_abort) {
-                if (backup_alloc_structs_v3(session, jname) < 0) {
+                if (backup_alloc_structs_v3(session) < 0) {
                         nlp->nlp_bkmap = -1;
                         return (-1);
                 }
 
                 if (ndmpd_mark_inodes_v3(session, nlp) != 0) {
                         if (nlp->nlp_bkmap != -1) {
                                 (void) dbm_free(nlp->nlp_bkmap);
                                 nlp->nlp_bkmap = -1;
                         }
-                        free_structs_v3(session, jname);
+                        free_structs_v3(session);
                         return (-1);
                 }
 
                 nlp->nlp_jstat->js_start_ltime = time(NULL);
                 nlp->nlp_jstat->js_start_time = nlp->nlp_jstat->js_start_ltime;
@@ -2406,16 +2372,17 @@
                 cmds->tcs_reader = cmds->tcs_writer = TLM_BACKUP_RUN;
                 cmds->tcs_command->tc_reader = TLM_BACKUP_RUN;
                 cmds->tcs_command->tc_writer = TLM_BACKUP_RUN;
 
                 if (ndmp_write_utf8magic(cmds->tcs_command) < 0) {
-                        free_structs_v3(session, jname);
+                        free_structs_v3(session);
                         return (-1);
                 }
 
-                NDMP_LOG(LOG_DEBUG,
-                    "Backing up \"%s\" started.", nlp->nlp_backup_path);
+                syslog(LOG_DEBUG, "Backing up \"%s\" started.",
+                    NLP_ISCHKPNTED(nlp)
+                    ? nlp->nlp_mountpoint : nlp->nlp_backup_path);
 
                 /* Plug-in module */
                 if (ndmp_pl != NULL &&
                     ndmp_pl->np_pre_backup != NULL) {
                         (void) memset(&nctx, 0, sizeof (ndmp_context_t));
@@ -2424,51 +2391,52 @@
                         nctx.nc_cmds = cmds;
                         nctx.nc_params = params;
                         nctx.nc_ddata = (void *) session;
                         if ((err = ndmp_pl->np_pre_backup(ndmp_pl, &nctx,
                             nlp->nlp_backup_path)) != 0) {
-                                NDMP_LOG(LOG_ERR, "Pre-backup plug-in: %m");
+                                syslog(LOG_ERR, "Pre-backup plug-in: %m");
                                 goto backup_out;
                         }
                 }
 
                 (void) memset(&arg, 0, sizeof (backup_reader_arg_t));
-                arg.br_jname = jname;
                 arg.br_nlp = nlp;
                 arg.br_cmds = cmds;
 
                 (void) pthread_barrier_init(&arg.br_barrier, 0, 2);
 
                 err = pthread_create(&rdtp, NULL, (funct_t)backup_reader_v3,
                     (void *)&arg);
                 if (err == 0) {
-                        (void) pthread_barrier_wait(&arg.br_barrier);
+                        rc =  pthread_barrier_wait(&arg.br_barrier);
+                        if (rc == PTHREAD_BARRIER_SERIAL_THREAD) {
                         (void) pthread_barrier_destroy(&arg.br_barrier);
+                        }
                 } else {
                         (void) pthread_barrier_destroy(&arg.br_barrier);
-                        free_structs_v3(session, jname);
-                        NDMP_LOG(LOG_DEBUG, "Launch backup_reader_v3: %m");
+                        free_structs_v3(session);
+                        syslog(LOG_ERR, "Launch backup_reader_v3 failed on %s",
+                            nlp->nlp_job_name);
                         return (-1);
                 }
 
                 if ((err = ndmp_tar_writer(session, params, cmds)) != 0)
                         result = EIO;
 
                 nlp->nlp_jstat->js_stop_time = time(NULL);
 
                 (void) snprintf(info, sizeof (info),
-                    "Runtime [%s] %llu bytes (%llu): %d seconds\n",
+                    "Runtime [%s] %lu bytes (%lu): %d seconds\n",
                     nlp->nlp_backup_path,
                     session->ns_data.dd_module.dm_stats.ms_bytes_processed,
                     session->ns_data.dd_module.dm_stats.ms_bytes_processed,
                     nlp->nlp_jstat->js_stop_time -
                     nlp->nlp_jstat->js_start_ltime);
                 MOD_LOGV3(params, NDMP_LOG_NORMAL, info);
 
                 ndmp_wait_for_reader(cmds);
                 (void) pthread_join(rdtp, NULL);
-
                 /* exit as if there was an internal error */
                 if (session->ns_eof) {
                         result = EPIPE;
                         err = -1;
                 }
@@ -2475,36 +2443,38 @@
                 if (!session->ns_data.dd_abort) {
                         ndmpd_audit_backup(session->ns_connection,
                             nlp->nlp_backup_path,
                             session->ns_data.dd_data_addr.addr_type,
                             session->ns_tape.td_adapter_name, result);
-                        NDMP_LOG(LOG_DEBUG, "Backing up \"%s\" Finished.",
-                            nlp->nlp_backup_path);
+                        syslog(LOG_DEBUG, "Backing up \"%s\" Finished.",
+                            NLP_ISCHKPNTED(nlp) ?
+                            nlp->nlp_mountpoint : nlp->nlp_backup_path);
                 }
         }
 
         if (session->ns_data.dd_abort) {
                 ndmpd_audit_backup(session->ns_connection,
                     nlp->nlp_backup_path,
                     session->ns_data.dd_data_addr.addr_type,
                     session->ns_tape.td_adapter_name, EINTR);
-                NDMP_LOG(LOG_DEBUG,
-                    "Backing up \"%s\" aborted.", nlp->nlp_backup_path);
+                syslog(LOG_INFO, "Backing up \"%s\" aborted.",
+                    NLP_ISCHKPNTED(nlp) ?
+                    nlp->nlp_mountpoint : nlp->nlp_backup_path);
                 err = -1;
         } else {
 
 backup_out:
                 /* Plug-in module */
                 if (ndmp_pl != NULL &&
                     ndmp_pl->np_post_backup != NULL &&
                     ndmp_pl->np_post_backup(ndmp_pl, &nctx, err) == -1) {
-                        NDMP_LOG(LOG_DEBUG, "Post-backup plug-in: %m");
+                        syslog(LOG_ERR, "Post-backup plug-in: %m");
                         return (-1);
                 }
         }
 
-        free_structs_v3(session, jname);
+        free_structs_v3(session);
         return (err);
 }
 
 /*
  * get_backup_size
@@ -2511,40 +2481,44 @@
  *
  * Find the estimate of backup size. This is used to get an estimate
  * of the progress of backup during NDMP backup.
  */
 void
-get_backup_size(ndmp_bkup_size_arg_t *sarg)
+get_backup_size(ndmp_lbr_params_t *nlp)
 {
         fs_traverse_t ft;
-        u_longlong_t bk_size;
+        u_longlong_t bk_size = 0;
+        char buf[256];
         char spath[PATH_MAX];
         int rv;
 
-        bk_size = 0;
-        if (fs_is_chkpntvol(sarg->bs_path)) {
-                ft.ft_path = sarg->bs_path;
+        if (NLP_ISCHKPNTED(nlp)) {
+                ft.ft_path = nlp->nlp_mountpoint;
         } else {
-                (void) tlm_build_snapshot_name(sarg->bs_path,
-                    spath, sarg->bs_jname);
+                (void) tlm_build_snapshot_name(nlp->nlp_backup_path,
+                    spath, nlp->nlp_job_name);
                 ft.ft_path = spath;
         }
 
         ft.ft_lpath = ft.ft_path;
         ft.ft_callbk = size_cb;
         ft.ft_arg = &bk_size;
-        ft.ft_logfp = (ft_log_t)ndmp_log;
+        ft.ft_logfp = (ft_log_t)syslog;
         ft.ft_flags = FST_VERBOSE;
 
         if ((rv = traverse_level(&ft)) != 0) {
-                NDMP_LOG(LOG_DEBUG, "bksize err=%d", rv);
+                syslog(LOG_DEBUG, "bksize err=%d", rv);
+                syslog(LOG_DEBUG, "[%s] backup will be reported as [0]\n",
+                    nlp->nlp_job_name, buf);
                 bk_size = 0;
         } else {
-                NDMP_LOG(LOG_DEBUG, "bksize %lld, %lldKB, %lldMB\n",
-                    bk_size, bk_size / 1024, bk_size /(1024 * 1024));
+                (void) zfs_nicenum(bk_size, buf, sizeof (buf));
+                syslog(LOG_DEBUG, "[%s] backup size is [%s]\n",
+                    nlp->nlp_job_name, buf);
         }
-        sarg->bs_session->ns_data.dd_data_size = bk_size;
+
+        nlp->nlp_session->ns_data.dd_data_size = bk_size;
 }
 
 /*
  * get_rs_path_v3
  *
@@ -2552,11 +2526,11 @@
  */
 ndmp_error
 get_rs_path_v3(ndmpd_module_params_t *params, ndmp_lbr_params_t *nlp)
 {
         char *dp;
-        ndmp_error rv;
+        ndmp_error rv = -1;
         mem_ndmp_name_v3_t *ep;
         int i, nm_cnt;
         char *nm_dpath_list[MULTIPLE_DEST_DIRS];
         static char mdest_buf[256];
 
@@ -2563,11 +2537,11 @@
         *mdest_buf = 0;
         *nm_dpath_list = "";
         for (i = 0, nm_cnt = 0; i < (int)nlp->nlp_nfiles; i++) {
                 ep = (mem_ndmp_name_v3_t *)MOD_GETNAME(params, i);
                 if (!ep) {
-                        NDMP_LOG(LOG_DEBUG, "Can't get Nlist[%d]", i);
+                        syslog(LOG_ERR, "Can't get Nlist[%d]", i);
                         return (NDMP_ILLEGAL_ARGS_ERR);
                 }
                 if (strcmp(nm_dpath_list[nm_cnt], ep->nm3_dpath) != 0 &&
                     nm_cnt < MULTIPLE_DEST_DIRS - 1)
                         nm_dpath_list[++nm_cnt] = ep->nm3_dpath;
@@ -2595,11 +2569,11 @@
                             " is not writable \"%s\".\n", dp);
                 } else {
                         rv = NDMP_NO_ERR;
                         (void) strlcat(nlp->nlp_restore_path, dp,
                             sizeof (mdest_buf));
-                        NDMP_LOG(LOG_DEBUG, "rspath: \"%s\"", dp);
+                        syslog(LOG_DEBUG, "rspath: \"%s\"", dp);
                 }
 
                 /*
                  * Exit if there is an error or it is not a multiple
                  * destination restore mode
@@ -2765,16 +2739,16 @@
                         break;
                 }
                 NDMP_FREE(ep->nm3_opath);
                 ep->nm3_opath = cp;
 
-                NDMP_LOG(LOG_DEBUG, "orig[%d]: \"%s\"", i, ep->nm3_opath);
+                syslog(LOG_DEBUG, "orig[%d]: \"%s\"", i, ep->nm3_opath);
                 if (ep->nm3_dpath) {
-                        NDMP_LOG(LOG_DEBUG,
+                        syslog(LOG_DEBUG,
                             "dest[%d]: \"%s\"", i, ep->nm3_dpath);
                 } else {
-                        NDMP_LOG(LOG_DEBUG, "dest[%d]: \"%s\"", i, "NULL");
+                        syslog(LOG_INFO, "dest[%d]: \"%s\"", i, "NULL");
                 }
         }
 
         free(buf);
 
@@ -2865,15 +2839,15 @@
 {
         int i, rv;
         int err;
 
         if (!params) {
-                NDMP_LOG(LOG_DEBUG, "params == NULL");
+                syslog(LOG_ERR, "params == NULL");
                 return (-1);
         }
         if (!nlp) {
-                NDMP_LOG(LOG_DEBUG, "nlp == NULL");
+                syslog(LOG_ERR, "nlp == NULL");
                 return (-1);
         }
 
         if (nlp->nlp_lastidx != -1) {
                 if (!bm_getone(nlp->nlp_rsbm, (u_longlong_t)nlp->nlp_lastidx))
@@ -2906,36 +2880,35 @@
  * It just creates the reader writer IPC.
  * This function is called for each entry in the restore entry list.
  *
  * Parameters:
  *   session (input) - pointer to the session
- *   jname (input) - Job name
  *
  * Returns:
  *    0: on success
  *   -1: on error
  */
 int
-restore_dar_alloc_structs_v3(ndmpd_session_t *session, char *jname)
+restore_dar_alloc_structs_v3(ndmpd_session_t *session)
 {
         long xfer_size;
         ndmp_lbr_params_t *nlp;
         tlm_commands_t *cmds;
 
         nlp = ndmp_get_nlp(session);
         if (!nlp) {
-                NDMP_LOG(LOG_DEBUG, "nlp == NULL");
+                syslog(LOG_ERR, "nlp == NULL");
                 return (-1);
         }
 
         cmds = &nlp->nlp_cmds;
         (void) memset(cmds, 0, sizeof (*cmds));
 
         xfer_size = ndmp_buffer_get_size(session);
         cmds->tcs_command = tlm_create_reader_writer_ipc(FALSE, xfer_size);
         if (!cmds->tcs_command) {
-                tlm_un_ref_job_stats(jname);
+                tlm_un_ref_job_stats(nlp->nlp_job_name);
                 return (-1);
         }
 
         return (0);
 }
@@ -2947,41 +2920,40 @@
  * To free the structures were created by restore_dar_alloc_structs_v3.
  * This funnction is called for each entry in restore entry list.
  *
  * Parameters:
  *   session (input) - pointer to the session
- *   jname (input) - job name
  *
  * Returns:
  *      NONE
  */
 /*ARGSUSED*/
 static void
-free_dar_structs_v3(ndmpd_session_t *session, char *jname)
+free_dar_structs_v3(ndmpd_session_t *session)
 {
         ndmp_lbr_params_t *nlp;
         tlm_commands_t *cmds;
 
         nlp = ndmp_get_nlp(session);
         if (!nlp) {
-                NDMP_LOG(LOG_DEBUG, "nlp == NULL");
+                syslog(LOG_DEBUG, "nlp == NULL");
                 return;
         }
         cmds = &nlp->nlp_cmds;
         if (!cmds) {
-                NDMP_LOG(LOG_DEBUG, "cmds == NULL");
+                syslog(LOG_DEBUG, "cmds == NULL");
                 return;
         }
 
         if (cmds->tcs_command) {
                 if (cmds->tcs_command->tc_buffers != NULL)
                         tlm_release_reader_writer_ipc(cmds->tcs_command);
                 else
-                        NDMP_LOG(LOG_DEBUG, "BUFFERS == NULL");
+                        syslog(LOG_DEBUG, "BUFFERS == NULL");
                 cmds->tcs_command = NULL;
         } else
-                NDMP_LOG(LOG_DEBUG, "COMMAND == NULL");
+                syslog(LOG_DEBUG, "COMMAND == NULL");
 }
 
 
 /*
  * ndmp_dar_tar_init_v3
@@ -3006,22 +2978,25 @@
         jname = ndmp_malloc(TLM_MAX_BACKUP_JOB_NAME);
 
         if (!jname)
                 return (NULL);
 
-        (void) ndmp_new_job_name(jname);
+        if (ndmp_new_job_name(jname, TLM_MAX_BACKUP_JOB_NAME) <= 0) {
+                free(jname);
+                return (NULL);
+        }
 
         if (!nlp) {
                 free(jname);
-                NDMP_LOG(LOG_DEBUG, "nlp == NULL");
+                syslog(LOG_DEBUG, "nlp == NULL");
                 return (NULL);
         }
 
         nlp->nlp_jstat = tlm_new_job_stats(jname);
         if (!nlp->nlp_jstat) {
                 free(jname);
-                NDMP_LOG(LOG_DEBUG, "Creating job stats");
+                syslog(LOG_DEBUG, "Creating job stats");
                 return (NULL);
         }
 
         nlp->nlp_jstat->js_start_ltime = time(NULL);
         nlp->nlp_jstat->js_start_time = nlp->nlp_jstat->js_start_ltime;
@@ -3035,21 +3010,21 @@
         }
         nlp->nlp_jstat->js_callbacks = (void *)(nlp->nlp_logcallbacks);
 
         nlp->nlp_rsbm = bm_alloc(nlp->nlp_nfiles, 0);
         if (nlp->nlp_rsbm < 0) {
-                NDMP_LOG(LOG_ERR, "Out of memory.");
+                syslog(LOG_ERR, "Out of memory.");
                 lbrlog_callbacks_done(nlp->nlp_logcallbacks);
                 tlm_un_ref_job_stats(jname);
                 free(jname);
                 return (NULL);
         }
 
         /* this is used in ndmpd_path_restored_v3() */
         nlp->nlp_lastidx = -1;
 
-        NDMP_LOG(LOG_DEBUG, "Restoring from %s tape(s).",
+        syslog(LOG_DEBUG, "Restoring from %s tape(s).",
             ndmp_data_get_mover_mode(session));
 
         return (jname);
 }
 
@@ -3073,11 +3048,11 @@
     ndmpd_module_params_t *params, ndmp_lbr_params_t *nlp, char *jname)
 {
         int err = 0;
 
 
-        NDMP_LOG(LOG_DEBUG, "lastidx %d", nlp->nlp_lastidx);
+        syslog(LOG_DEBUG, "lastidx %d", nlp->nlp_lastidx);
 
         /* nothing restored. */
         (void) send_unrecovered_list_v3(params, nlp);
 
         if (nlp->nlp_jstat) {
@@ -3084,33 +3059,33 @@
                 nlp->nlp_bytes_total =
                     (u_longlong_t)nlp->nlp_jstat->js_bytes_total;
                 tlm_un_ref_job_stats(jname);
                 nlp->nlp_jstat = NULL;
         } else {
-                NDMP_LOG(LOG_DEBUG, "JSTAT == NULL");
+                syslog(LOG_DEBUG, "JSTAT == NULL");
         }
 
         if (nlp->nlp_logcallbacks) {
                 lbrlog_callbacks_done(nlp->nlp_logcallbacks);
                 nlp->nlp_logcallbacks = NULL;
         } else {
-                NDMP_LOG(LOG_DEBUG, "FH CALLBACKS == NULL");
+                syslog(LOG_DEBUG, "FH CALLBACKS == NULL");
         }
 
         if (session->ns_data.dd_abort) {
-                NDMP_LOG(LOG_DEBUG, "Restoring to \"%s\" aborted.",
+                syslog(LOG_DEBUG, "Restoring to \"%s\" aborted.",
                     (nlp->nlp_restore_path) ? nlp->nlp_restore_path : "NULL");
                 err = EINTR;
         } else {
-                NDMP_LOG(LOG_DEBUG, "Restoring to \"%s\" finished. (%d)",
+                syslog(LOG_DEBUG, "Restoring to \"%s\" finished. (%d)",
                     (nlp->nlp_restore_path) ? nlp->nlp_restore_path :
                     "NULL", err);
         }
 
         if (session->ns_data.dd_operation == NDMP_DATA_OP_RECOVER) {
                 if (nlp->nlp_rsbm < 0) {
-                        NDMP_LOG(LOG_DEBUG, "nlp_rsbm < 0 %d", nlp->nlp_rsbm);
+                        syslog(LOG_DEBUG, "nlp_rsbm < 0 %d", nlp->nlp_rsbm);
                 } else {
                         (void) bm_free(nlp->nlp_rsbm);
                         nlp->nlp_rsbm = -1;
                 }
         }
@@ -3132,20 +3107,19 @@
  *
  * Parameters:
  *   session (input) - pointer to the session
  *   params (input) - pointer to the parameters structure
  *   nlp (input) - pointer to the nlp structure
- *   jname (input) - job name
  *   dar_index(input) - Index of this entry in the restore list
  *
  * Returns:
  *   0: on success
  *   -1: on error
  */
 static int
 ndmpd_dar_tar_v3(ndmpd_session_t *session, ndmpd_module_params_t *params,
-    ndmp_lbr_params_t *nlp, char *jname, int dar_index)
+    ndmp_lbr_params_t *nlp, int dar_index)
 {
         char *excl;
         char **sels;
         int flags;
         int err;
@@ -3161,16 +3135,16 @@
 
         /*
          * We have to allocate and deallocate buffers every time we
          * run the restore, for we need to flush the buffers.
          */
-        if (restore_dar_alloc_structs_v3(session, jname) < 0)
+        if (restore_dar_alloc_structs_v3(session) < 0)
                 return (-1);
 
         sels = setupsels(session, params, nlp, dar_index);
         if (!sels) {
-                free_dar_structs_v3(session, jname);
+                free_dar_structs_v3(session);
                 return (-1);
         }
         excl = NULL;
         flags = RSFLG_OVR_ALWAYS;
         rn.rn_nlp = nlp;
@@ -3189,11 +3163,11 @@
                 err = pthread_create(&rdtp, NULL, (funct_t)ndmp_tar_reader,
                     (void *)&arg);
                 if (err == 0) {
                         tlm_cmd_wait(cmds->tcs_command, TLM_TAR_READER);
                 } else {
-                        NDMP_LOG(LOG_DEBUG, "launch ndmp_tar_reader: %m");
+                        syslog(LOG_ERR, "launch ndmp_tar_reader failed");
                         return (-1);
                 }
 
                 cmds->tcs_command->tc_ref++;
                 cmds->tcs_writer_count++;
@@ -3209,11 +3183,11 @@
                             dar_index - 1);
 
                         if ((err = ndmp_pl->np_pre_restore(ndmp_pl, &nctx,
                             ep->nm3_opath, ep->nm3_dpath))
                             != 0) {
-                                NDMP_LOG(LOG_ERR, "Pre-restore plug-in: %m");
+                                syslog(LOG_ERR, "Pre-restore plug-in: %m");
                                 ndmp_stop_local_reader(session, cmds);
                                 ndmp_wait_for_reader(cmds);
                                 (void) pthread_join(rdtp, NULL);
                                 ndmp_stop_remote_reader(session);
                                 goto restore_out;
@@ -3223,11 +3197,11 @@
                 if (tm_tar_ops.tm_getdir != NULL) {
                         char errbuf[256];
 
                         err = (tm_tar_ops.tm_getdir)(cmds, cmds->tcs_command,
                             nlp->nlp_jstat, &rn, 1, 1, sels, &excl, flags,
-                            dar_index, nlp->nlp_backup_path,
+                            dar_index, nlp->nlp_mountpoint,
                             session->hardlink_q);
                         /*
                          * If the fatal error from tm_getdir looks like an
                          * errno code, we send the error description to DMA.
                          */
@@ -3239,11 +3213,11 @@
                         }
                 }
 
                 cmds->tcs_writer_count--;
                 cmds->tcs_command->tc_ref--;
-                NDMP_LOG(LOG_DEBUG, "stop local reader.");
+                syslog(LOG_DEBUG, "stop local reader.");
                 ndmp_stop_local_reader(session, cmds);
 
                 ndmp_wait_for_reader(cmds);
                 (void) pthread_join(rdtp, NULL);
 
@@ -3251,11 +3225,11 @@
                  * If this is the last DAR entry and it is a three-way
                  * restore then we should close the connection.
                  */
                 if ((data_addr_type == NDMP_ADDR_TCP) &&
                     (dar_index == (int)session->ns_data.dd_nlist_len)) {
-                        NDMP_LOG(LOG_DEBUG, "stop remote reader.");
+                        syslog(LOG_DEBUG, "stop remote reader.");
                         ndmp_stop_remote_reader(session);
                 }
 
                 /* exit as if there was an internal error */
                 if (session->ns_eof)
@@ -3263,18 +3237,18 @@
 restore_out:
                 /* Plug-in module */
                 if (ndmp_pl != NULL &&
                     ndmp_pl->np_post_restore != NULL &&
                     ndmp_pl->np_post_restore(ndmp_pl, &nctx, err) == -1) {
-                        NDMP_LOG(LOG_DEBUG, "Post-restore plug-in: %m");
+                        syslog(LOG_DEBUG, "Post-restore plug-in: %m");
                         err = -1;
                 }
         }
 
         NDMP_FREE(sels);
 
-        free_dar_structs_v3(session, jname);
+        free_dar_structs_v3(session);
 
         return (err);
 }
 
 /*
@@ -3302,15 +3276,16 @@
 
 
         for (; ; ) {
                 ret = (*params->mp_seek_func)(session, fh_info, len);
 
-                NDMP_LOG(LOG_DEBUG, "ret %d", ret);
+                syslog(LOG_DEBUG, "ret %d", ret);
                 if (ret == 0) /* Seek was done successfully */
                         break;
                 else if (ret < 0) {
-                        NDMP_LOG(LOG_DEBUG, "Seek error");
+                        syslog(LOG_ERR,
+                            "Seek error in ndmpd_dar_locate_window_v3");
                         break;
                 }
 
                 /*
                  * DMA moved to a new window.
@@ -3367,14 +3342,14 @@
         len = tlm_tarhdr_size();
 
         for (i = 0; i < n; ++i) {
                 ep = (mem_ndmp_name_v3_t *)MOD_GETNAME(params, i);
                 if (!ep) {
-                        NDMP_LOG(LOG_DEBUG, "ep NULL, i %d", i);
+                        syslog(LOG_DEBUG, "ep NULL, i %d", i);
                         continue;
                 }
-                NDMP_LOG(LOG_DEBUG,
+                syslog(LOG_DEBUG,
                     "restoring opath %s, dpath %s, fh_info %lld",
                     ep->nm3_opath ? ep->nm3_opath : "NULL",
                     ep->nm3_dpath ? ep->nm3_dpath : "NULL",
                     ep->nm3_fh_info);
 
@@ -3389,20 +3364,20 @@
                         break;
                 /*
                  * We are inside the target window.
                  * for each restore we will use one entry as selection list
                  */
-                if ((ret = ndmpd_dar_tar_v3(session, params, nlp, jname, i+1))
+                if ((ret = ndmpd_dar_tar_v3(session, params, nlp, i+1))
                     != 0)
                         result = EIO;
                 ndmpd_audit_restore(session->ns_connection,
                     ep->nm3_opath ? ep->nm3_opath : "NULL",
                     session->ns_data.dd_data_addr.addr_type,
                     session->ns_tape.td_adapter_name, result);
         }
 
-        NDMP_LOG(LOG_DEBUG, "End of restore list");
+        syslog(LOG_DEBUG, "End of restore list");
 
         (void) ndmpd_dar_tar_end_v3(session, params, nlp, jname);
 
         return (ret);
 }
@@ -3456,11 +3431,11 @@
 
         if (!(pbuf = ndmp_malloc(TLM_MAX_PATH_NAME)))
                 return (NULL);
 
         if ((rv = realpath(bkpath, pbuf)) == NULL) {
-                NDMP_LOG(LOG_DEBUG, "Invalid path [%s] err=%d",
+                syslog(LOG_ERR, "Invalid path [%s] err=%d",
                     bkpath, errno);
         }
         return (rv);
 }
 
@@ -3504,11 +3479,10 @@
  */
 static int
 ndmpd_rs_sar_tar_v3(ndmpd_session_t *session, ndmpd_module_params_t *params,
     ndmp_lbr_params_t *nlp)
 {
-        char jname[TLM_MAX_BACKUP_JOB_NAME];
         char *excl;
         char **sels;
         int flags;
         int err;
         tlm_commands_t *cmds;
@@ -3517,17 +3491,17 @@
         pthread_t rdtp;
         int result;
         ndmp_context_t nctx;
 
         result = err = 0;
-        (void) ndmp_new_job_name(jname);
-        if (restore_alloc_structs_v3(session, jname) < 0)
-                return (-1);
 
+        if (restore_alloc_structs_v3(session) < 0) {
+                return (-1);
+        }
         sels = setupsels(session, params, nlp, 0);
         if (!sels) {
-                free_structs_v3(session, jname);
+                free_structs_v3(session);
                 return (-1);
         }
         excl = NULL;
         flags = RSFLG_OVR_ALWAYS;
         rn.rn_nlp = nlp;
@@ -3540,11 +3514,11 @@
                 cmds = &nlp->nlp_cmds;
                 cmds->tcs_reader = cmds->tcs_writer = TLM_RESTORE_RUN;
                 cmds->tcs_command->tc_reader = TLM_RESTORE_RUN;
                 cmds->tcs_command->tc_writer = TLM_RESTORE_RUN;
 
-                NDMP_LOG(LOG_DEBUG, "Restoring to \"%s\" started.",
+                syslog(LOG_DEBUG, "Restoring to \"%s\" started.",
                     (nlp->nlp_restore_path) ? nlp->nlp_restore_path : "NULL");
 
                 arg.tr_session = session;
                 arg.tr_mod_params = params;
                 arg.tr_cmds = cmds;
@@ -3551,19 +3525,19 @@
                 err = pthread_create(&rdtp, NULL, (funct_t)ndmp_tar_reader,
                     (void *)&arg);
                 if (err == 0) {
                         tlm_cmd_wait(cmds->tcs_command, TLM_TAR_READER);
                 } else {
-                        NDMP_LOG(LOG_DEBUG, "Launch ndmp_tar_reader: %m");
-                        free_structs_v3(session, jname);
+                        syslog(LOG_ERR, "Launch ndmp_tar_reader failed");
+                        free_structs_v3(session);
                         return (-1);
                 }
 
                 if (!ndmp_check_utf8magic(cmds->tcs_command)) {
-                        NDMP_LOG(LOG_DEBUG, "UTF8Magic not found!");
+                        syslog(LOG_DEBUG, "UTF8Magic not found!");
                 } else {
-                        NDMP_LOG(LOG_DEBUG, "UTF8Magic found");
+                        syslog(LOG_DEBUG, "UTF8Magic found");
                 }
 
                 /* Plug-in module */
                 if (ndmp_pl != NULL &&
                     ndmp_pl->np_pre_restore != NULL) {
@@ -3572,11 +3546,11 @@
                         nctx.nc_params = params;
                         nctx.nc_ddata = (void *) session;
                         if ((err = ndmp_plugin_pre_restore(&nctx, params,
                             nlp->nlp_nfiles))
                             != 0) {
-                                NDMP_LOG(LOG_ERR, "Pre-restore plug-in: %m");
+                                syslog(LOG_ERR, "Pre-restore plug-in: %m");
                                 ndmp_stop_local_reader(session, cmds);
                                 ndmp_wait_for_reader(cmds);
                                 (void) pthread_join(rdtp, NULL);
                                 ndmp_stop_remote_reader(session);
                                 goto restore_out;
@@ -3589,11 +3563,11 @@
                 if (tm_tar_ops.tm_getdir != NULL) {
                         char errbuf[256];
 
                         err = (tm_tar_ops.tm_getdir)(cmds, cmds->tcs_command,
                             nlp->nlp_jstat, &rn, 1, 1, sels, &excl, flags, 0,
-                            nlp->nlp_backup_path, session->hardlink_q);
+                            nlp->nlp_mountpoint, session->hardlink_q);
                         /*
                          * If the fatal error from tm_getdir looks like an
                          * errno code, we send the error description to DMA.
                          */
                         if (err > 0 && strerror_r(err, errbuf,
@@ -3624,20 +3598,20 @@
                         result = EIO;
         }
 
         (void) send_unrecovered_list_v3(params, nlp); /* nothing restored. */
         if (session->ns_data.dd_abort) {
-                NDMP_LOG(LOG_DEBUG, "Restoring to \"%s\" aborted.",
+                syslog(LOG_DEBUG, "Restoring to \"%s\" aborted.",
                     (nlp->nlp_restore_path) ? nlp->nlp_restore_path : "NULL");
                 result = EINTR;
                 ndmpd_audit_restore(session->ns_connection,
                     nlp->nlp_restore_path,
                     session->ns_data.dd_data_addr.addr_type,
                     session->ns_tape.td_adapter_name, result);
                 err = -1;
         } else {
-                NDMP_LOG(LOG_DEBUG, "Restoring to \"%s\" finished. (%d)",
+                syslog(LOG_DEBUG, "Restoring to \"%s\" finished. (%d)",
                     (nlp->nlp_restore_path) ? nlp->nlp_restore_path : "NULL",
                     err);
                 ndmpd_audit_restore(session->ns_connection,
                     nlp->nlp_restore_path,
                     session->ns_data.dd_data_addr.addr_type,
@@ -3646,17 +3620,17 @@
 restore_out:
                 /* Plug-in module */
                 if (ndmp_pl != NULL &&
                     ndmp_pl->np_post_restore != NULL &&
                     ndmp_pl->np_post_restore(ndmp_pl, &nctx, err) == -1) {
-                        NDMP_LOG(LOG_DEBUG, "Post-restore plug-in: %m");
+                        syslog(LOG_DEBUG, "Post-restore plug-in: %m");
                         err = -1;
                 }
         }
 
         NDMP_FREE(sels);
-        free_structs_v3(session, jname);
+        free_structs_v3(session);
 
         return (err);
 }
 
 
@@ -3692,38 +3666,66 @@
         } else {
                 if (!(nlp->nlp_backup_path = get_backup_path_v3(params)) ||
                     !is_valid_backup_dir_v3(params, nlp->nlp_backup_path))
                 return (NDMP_ILLEGAL_ARGS_ERR);
         }
-
         nlp->nlp_backup_path = get_absolute_path(nlp->nlp_backup_path);
         if (!nlp->nlp_backup_path)
                 return (NDMP_ILLEGAL_ARGS_ERR);
 
-        if (fs_is_chkpntvol(nlp->nlp_backup_path) ||
-            fs_is_rdonly(nlp->nlp_backup_path) ||
-            !fs_is_chkpnt_enabled(nlp->nlp_backup_path))
-                NLP_SET(nlp, NLPF_CHKPNTED_PATH);
-        else
+        /*
+         * Assume volume is not checkpointed unless found to be below
+         */
                 NLP_UNSET(nlp, NLPF_CHKPNTED_PATH);
 
+        /*
+         * Get the zfs volume name from the backup path and store in
+         * nlp_vol.
+         */
+        if (get_zfsvolname(nlp->nlp_vol,
+            sizeof (nlp->nlp_vol), nlp->nlp_backup_path) == -1) {
+                syslog(LOG_ERR,
+                    "Cannot get volume from [%s] on create",
+                    nlp->nlp_backup_path);
+                NDMP_FREE(nlp->nlp_params);
+                return (-1);
+        }
+
+        /*
+         * Find out if this data is already checkpointed via. an AutoSync
+         * or HPR snapshot. If it is, set the flag, and extract the snapshot
+         * name to use as the nlp_job_name otherwise use the normal
+         * 'NdmpBackup-nnnn' format.
+         */
+        if (fs_is_checkpointed(nlp) &&
+            (ndmp_autosync_support || ndmp_hpr_support)) {
+                NLP_SET(nlp, NLPF_CHKPNTED_PATH);
+                syslog(LOG_DEBUG, ">>>> Checkpointed dataset found <<<<");
+        }
+
+        (void) ndmp_new_job_name(nlp->nlp_job_name,
+            sizeof (nlp->nlp_job_name));
+
+        syslog(LOG_DEBUG, "New backup job name [%s]",
+            nlp->nlp_job_name);
+
         /* Should the st_ctime be ignored when backing up? */
         if (ndmp_ignore_ctime) {
-                NDMP_LOG(LOG_DEBUG, "ignoring st_ctime");
+                syslog(LOG_DEBUG, "ignoring st_ctime");
                 NLP_SET(nlp, NLPF_IGNCTIME);
         } else {
                 NLP_UNSET(nlp, NLPF_IGNCTIME);
         }
 
         if (ndmp_include_lmtime == TRUE) {
-                NDMP_LOG(LOG_DEBUG, "including st_lmtime");
+                syslog(LOG_DEBUG, "including st_lmtime");
                 NLP_SET(nlp, NLPF_INCLMTIME);
         } else {
                 NLP_UNSET(nlp, NLPF_INCLMTIME);
         }
 
-        NDMP_LOG(LOG_DEBUG, "flags %x", nlp->nlp_flags);
+        syslog(LOG_DEBUG, "flags %x", nlp->nlp_flags);
 
         get_hist_env_v3(params, nlp);
         get_exc_env_v3(params, nlp);
         get_inc_env_v3(params, nlp);
         get_direct_env_v3(params, nlp);
@@ -3751,56 +3753,43 @@
 {
         ndmpd_module_params_t *params = arg;
         int err;
         ndmpd_session_t *session;
         ndmp_lbr_params_t *nlp;
-        char jname[TLM_MAX_BACKUP_JOB_NAME];
-        ndmp_bkup_size_arg_t sarg;
-        pthread_t tid;
 
         session = (ndmpd_session_t *)(params->mp_daemon_cookie);
         *(params->mp_module_cookie) = nlp = ndmp_get_nlp(session);
         ndmp_session_ref(session);
-        (void) ndmp_new_job_name(jname);
 
+        pthread_cleanup_push(backup_dataset_destroy, nlp);
+
         err = 0;
-        if (!NLP_ISCHKPNTED(nlp) &&
-            ndmp_create_snapshot(nlp->nlp_backup_path, jname) < 0) {
+        if (backup_dataset_create(nlp) < 0) {
                 MOD_LOGV3(params, NDMP_LOG_ERROR,
                     "Creating checkpoint on \"%s\".\n",
                     nlp->nlp_backup_path);
                 err = -1;
         }
 
-        NDMP_LOG(LOG_DEBUG, "err %d, chkpnted %c",
-            err, NDMP_YORN(NLP_ISCHKPNTED(nlp)));
+        syslog(LOG_DEBUG, "BACKUP STARTED [%s]", nlp->nlp_snapname);
 
         if (err == 0) {
-                sarg.bs_session = session;
-                sarg.bs_jname = jname;
-                sarg.bs_path = nlp->nlp_backup_path;
-
                 /* Get an estimate of the data size */
-                if (pthread_create(&tid, NULL, (funct_t)get_backup_size,
-                    (void *)&sarg) == 0)
-                        (void) pthread_detach(tid);
+                (void) get_backup_size(nlp);
 
-                err = ndmp_get_cur_bk_time(nlp, &nlp->nlp_cdate, jname);
+                err = ndmp_get_cur_bk_time(nlp, &nlp->nlp_cdate);
                 if (err != 0) {
-                        NDMP_LOG(LOG_DEBUG, "err %d", err);
+                        syslog(LOG_ERR,
+                            "Failed to get current backup time %d", err);
                 } else {
                         log_bk_params_v3(session, params, nlp);
-                        err = tar_backup_v3(session, params, nlp, jname);
+                        err = tar_backup_v3(session, params, nlp);
                 }
         }
 
-        if (!NLP_ISCHKPNTED(nlp))
-                (void) ndmp_remove_snapshot(nlp->nlp_backup_path, jname);
+        pthread_cleanup_pop(B_TRUE);
 
-        NDMP_LOG(LOG_DEBUG, "err %d, update %c",
-            err, NDMP_YORN(NLP_SHOULD_UPDATE(nlp)));
-
         if (err == 0)
                 save_backup_date_v3(params, nlp);
 
         MOD_DONE(params, err);
 
@@ -3808,12 +3797,13 @@
         NDMP_FREE(nlp->nlp_params);
         NDMP_FREE(nlp->nlp_backup_path);
 
         NS_DEC(nbk);
         ndmp_session_unref(session);
+        syslog(LOG_DEBUG, "BACKUP COMPLETE [%s] (as jobname %s)",
+            nlp->nlp_snapname, nlp->nlp_job_name);
         return (err);
-
 }
 
 
 /*
  * ndmpd_tar_backup_abort_v3
@@ -3866,28 +3856,28 @@
 {
         ndmp_error rv;
         ndmp_lbr_params_t *nlp;
 
         if (!(nlp = ndmp_get_nlp(session))) {
-                NDMP_LOG(LOG_DEBUG, "nlp is NULL");
+                syslog(LOG_DEBUG, "nlp is NULL");
                 rv = NDMP_ILLEGAL_ARGS_ERR;
         } else if (!(nlp->nlp_backup_path = get_backup_path_v3(params)))
                 rv = NDMP_ILLEGAL_ARGS_ERR;
         else if ((nlp->nlp_nfiles = session->ns_data.dd_nlist_len) == 0) {
-                NDMP_LOG(LOG_DEBUG, "nfiles: %d", nlp->nlp_nfiles);
+                syslog(LOG_DEBUG, "nfiles: %d", nlp->nlp_nfiles);
                 rv = NDMP_ILLEGAL_ARGS_ERR;
         } else if (get_rs_path_v3(params, nlp) != NDMP_NO_ERR) {
                 rv = NDMP_ILLEGAL_ARGS_ERR;
         } else if ((rv = fix_nlist_v3(session, params, nlp)) != NDMP_NO_ERR) {
-                NDMP_LOG(LOG_DEBUG, "fix_nlist_v3: %d", rv);
+                syslog(LOG_DEBUG, "fix_nlist_v3: %d", rv);
         } else {
                 rv = NDMP_NO_ERR;
                 get_direct_env_v3(params, nlp);
                 if (NLP_ISSET(nlp, NLPF_DIRECT)) {
                         if (NLP_ISSET(nlp, NLPF_RECURSIVE)) {
                                 /* Currently we dont support DAR on directory */
-                                NDMP_LOG(LOG_DEBUG,
+                                syslog(LOG_DEBUG,
                                     "Can't have RECURSIVE and DIRECT together");
                                 rv = NDMP_ILLEGAL_ARGS_ERR;
                                 return (rv);
                         }