Print this page
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-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
        
*** 34,45 ****
--- 34,48 ----
   * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
   * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
   * POSSIBILITY OF SUCH DAMAGE.
   */
+ /* Copyright 2017 Nexenta Systems, Inc. All rights reserved. */
+ 
  #include <sys/stat.h>
  #include <sys/types.h>
+ #include <syslog.h>
  #include <cstack.h>
  #include <ctype.h>
  #include <dirent.h>
  #include <errno.h>
  #include "ndmpd.h"
*** 130,140 ****
  count_bits_cb(int bmd, u_longlong_t bn, void *arg)
  {
          if (dbm_getone(bmd, bn)) {
                  (*(u_longlong_t *)arg)++;
                  if (ndmpd_print_inodes)
!                         NDMP_LOG(LOG_DEBUG, "%llu", bn);
          }
  
          return (0);
  }
  
--- 133,143 ----
  count_bits_cb(int bmd, u_longlong_t bn, void *arg)
  {
          if (dbm_getone(bmd, bn)) {
                  (*(u_longlong_t *)arg)++;
                  if (ndmpd_print_inodes)
!                         syslog(LOG_DEBUG, "%lu", bn);
          }
  
          return (0);
  }
  
*** 159,169 ****
          if (!ndmpd_mark_count_flag)
                  return;
  
          cnt = 0;
          (void) dbm_apply_ifset(bmd, count_bits_cb, &cnt);
!         NDMP_LOG(LOG_DEBUG, "%s %llu inodes marked", path, cnt);
  }
  
  
  /*
   * traverse
--- 162,172 ----
          if (!ndmpd_mark_count_flag)
                  return;
  
          cnt = 0;
          (void) dbm_apply_ifset(bmd, count_bits_cb, &cnt);
!         syslog(LOG_DEBUG, "%s %lu inodes marked", path, cnt);
  }
  
  
  /*
   * traverse
*** 187,216 ****
  {
          int rv;
          time_t s, e;
  
          if (!session || !nlp || !ftp) {
!                 NDMP_LOG(LOG_DEBUG, "Invalid argument");
                  return (-1);
          }
!         NDMP_LOG(LOG_DEBUG, "Processing directories of \"%s\"",
              nlp->nlp_backup_path);
  
          (void) time(&s);
          if (traverse_post(ftp) != 0) {
                  rv = -1;
                  if (!session->ns_data.dd_abort && !NLP_ISSET(nlp,
                      NLPF_ABORTED)) {
!                         NDMP_LOG(LOG_DEBUG,
                              "Traversing backup path hierarchy \"%s\"",
                              nlp->nlp_backup_path);
                  }
          } else {
                  (void) dbm_setone(nlp->nlp_bkmap, (u_longlong_t)ROOT_INODE);
                  rv = 0;
                  (void) time(&e);
!                 NDMP_LOG(LOG_DEBUG,
                      "\"%s\" traversed in %u sec", nlp->nlp_backup_path,
                      (uint_t)(e-s));
  
                  count_set_bits(nlp->nlp_backup_path, nlp->nlp_bkmap);
          }
--- 190,219 ----
  {
          int rv;
          time_t s, e;
  
          if (!session || !nlp || !ftp) {
!                 syslog(LOG_ERR, "Invalid argument in traverse");
                  return (-1);
          }
!         syslog(LOG_DEBUG, "Processing directories of \"%s\"",
              nlp->nlp_backup_path);
  
          (void) time(&s);
          if (traverse_post(ftp) != 0) {
                  rv = -1;
                  if (!session->ns_data.dd_abort && !NLP_ISSET(nlp,
                      NLPF_ABORTED)) {
!                         syslog(LOG_DEBUG,
                              "Traversing backup path hierarchy \"%s\"",
                              nlp->nlp_backup_path);
                  }
          } else {
                  (void) dbm_setone(nlp->nlp_bkmap, (u_longlong_t)ROOT_INODE);
                  rv = 0;
                  (void) time(&e);
!                 syslog(LOG_DEBUG,
                      "\"%s\" traversed in %u sec", nlp->nlp_backup_path,
                      (uint_t)(e-s));
  
                  count_set_bits(nlp->nlp_backup_path, nlp->nlp_bkmap);
          }
*** 261,278 ****
          rv = 0;
          mpp = (mark_param_t *)arg;
          tacl = mpp->mp_tacl;
          nlp = ndmp_get_nlp(mpp->mp_session);
          if (!mpp) {
!                 NDMP_LOG(LOG_DEBUG, "NULL argument passed");
                  rv = -1;
          } else if (mpp->mp_session->ns_eof) {
!                 NDMP_LOG(LOG_INFO, "Connection to the client is closed");
                  rv = -1;
          } else if (mpp->mp_session->ns_data.dd_abort ||
              (nlp && NLP_ISSET(nlp, NLPF_ABORTED))) {
!                 NDMP_LOG(LOG_INFO, "Processing directories aborted.");
                  rv = -1;
          }
  
          if (rv != 0)
                  return (rv);
--- 264,281 ----
          rv = 0;
          mpp = (mark_param_t *)arg;
          tacl = mpp->mp_tacl;
          nlp = ndmp_get_nlp(mpp->mp_session);
          if (!mpp) {
!                 syslog(LOG_ERR, "NULL argument passed");
                  rv = -1;
          } else if (mpp->mp_session->ns_eof) {
!                 syslog(LOG_ERR, "Connection to the client is closed");
                  rv = -1;
          } else if (mpp->mp_session->ns_data.dd_abort ||
              (nlp && NLP_ISSET(nlp, NLPF_ABORTED))) {
!                 syslog(LOG_ERR, "Processing directories aborted.");
                  rv = -1;
          }
  
          if (rv != 0)
                  return (rv);
*** 284,299 ****
          pfhp = pnp->tn_fh;
          pstp = pnp->tn_st;
  
          /* sanity check on fh and stat of the path passed */
          if (pstp->st_ino > bl) {
!                 NDMP_LOG(LOG_DEBUG, "Invalid path inode #%u",
                      (uint_t)pstp->st_ino);
                  return (-1);
          }
          if (pstp->st_ino != pfhp->fh_fid) {
!                 NDMP_LOG(LOG_DEBUG, "Path ino mismatch %u %u",
                      (uint_t)pstp->st_ino, (uint_t)pfhp->fh_fid);
                  return (-1);
          }
  
          /*
--- 287,302 ----
          pfhp = pnp->tn_fh;
          pstp = pnp->tn_st;
  
          /* sanity check on fh and stat of the path passed */
          if (pstp->st_ino > bl) {
!                 syslog(LOG_ERR, "Invalid path inode #%u",
                      (uint_t)pstp->st_ino);
                  return (-1);
          }
          if (pstp->st_ino != pfhp->fh_fid) {
!                 syslog(LOG_ERR, "Path ino mismatch %u %u",
                      (uint_t)pstp->st_ino, (uint_t)pfhp->fh_fid);
                  return (-1);
          }
  
          /*
*** 307,389 ****
          efhp = enp->tn_fh;
          estp = enp->tn_st;
  
          /* sanity check on fh and stat of the entry passed */
          if (estp->st_ino > bl) {
!                 NDMP_LOG(LOG_DEBUG, "Invalid entry inode #%u",
                      (uint_t)estp->st_ino);
                  return (-1);
          }
          if (estp->st_ino != efhp->fh_fid) {
!                 NDMP_LOG(LOG_DEBUG, "Entry ino mismatch %u %u", estp->st_ino,
                      (uint_t)pfhp->fh_fid);
                  return (-1);
          }
  
          /* check the dates and mark the bitmap inode */
          if (ddate == 0) {
                  /* base backup */
                  (void) dbm_setone(bmd, (u_longlong_t)estp->st_ino);
                  (void) dbm_setone(bmd, (u_longlong_t)pstp->st_ino);
-                 if (ndmpd_verbose_traverse) {
-                         NDMP_LOG(LOG_DEBUG, "Base Backup");
-                         NDMP_LOG(LOG_DEBUG, "\"%s/%s\"",
-                             pnp->tn_path, enp->tn_path);
-                 }
  
          } else if (estp->st_mtime > ddate) {
                  (void) dbm_setone(bmd, (u_longlong_t)estp->st_ino);
                  (void) dbm_setone(bmd, (u_longlong_t)pstp->st_ino);
                  if (ndmpd_verbose_traverse) {
!                         NDMP_LOG(LOG_DEBUG,
                              "m(%u,%u,%u,%u)", (uint_t)pstp->st_ino,
                              (uint_t)estp->st_ino, (uint_t)estp->st_mtime,
                              (uint_t)ddate);
!                         NDMP_LOG(LOG_DEBUG, "\"%s/%s\"",
                              pnp->tn_path, enp->tn_path);
                  }
          } else if (iscreated(nlp, NULL, tacl, ddate)) {
                  (void) dbm_setone(bmd, (u_longlong_t)estp->st_ino);
                  (void) dbm_setone(bmd, (u_longlong_t)pstp->st_ino);
                  if (ndmpd_verbose_traverse) {
!                         NDMP_LOG(LOG_DEBUG,
                              "cr(%u,%u,%u,%u)", (uint_t)pstp->st_ino,
                              (uint_t)estp->st_ino, (uint_t)estp->st_mtime,
                              (uint_t)ddate);
!                         NDMP_LOG(LOG_DEBUG, "\"%s/%s\"",
                              pnp->tn_path, enp->tn_path);
                  }
          } else if (estp->st_ctime > ddate) {
                  if (!NLP_IGNCTIME(nlp)) {
                          (void) dbm_setone(bmd, (u_longlong_t)estp->st_ino);
                          (void) dbm_setone(bmd, (u_longlong_t)pstp->st_ino);
                  }
                  if (ndmpd_verbose_traverse) {
                          if (NLP_IGNCTIME(nlp)) {
!                                 NDMP_LOG(LOG_DEBUG,
                                      "ign c(%u,%u,%u,%u)", (uint_t)pstp->st_ino,
                                      (uint_t)estp->st_ino,
                                      (uint_t)estp->st_ctime, (uint_t)ddate);
                          } else {
!                                 NDMP_LOG(LOG_DEBUG,
                                      "c(%u,%u,%u,%u)", (uint_t)pstp->st_ino,
                                      (uint_t)estp->st_ino,
                                      (uint_t)estp->st_ctime, (uint_t)ddate);
                          }
!                         NDMP_LOG(LOG_DEBUG, "\"%s/%s\"",
                              pnp->tn_path, enp->tn_path);
                  }
          } else if (S_ISDIR(estp->st_mode) &&
              dbm_getone(bmd, (u_longlong_t)estp->st_ino)) {
                  (void) dbm_setone(bmd, (u_longlong_t)pstp->st_ino);
-                 if (ndmpd_verbose_traverse) {
-                         NDMP_LOG(LOG_DEBUG, "d(%u,%u)",
-                             (uint_t)pstp->st_ino, (uint_t)estp->st_ino);
-                         NDMP_LOG(LOG_DEBUG, "\"%s, %s\"",
-                             pnp->tn_path, enp->tn_path);
                  }
-         }
  
          return (0);
  }
  
  
--- 310,381 ----
          efhp = enp->tn_fh;
          estp = enp->tn_st;
  
          /* sanity check on fh and stat of the entry passed */
          if (estp->st_ino > bl) {
!                 syslog(LOG_ERR, "Invalid entry inode #%u",
                      (uint_t)estp->st_ino);
                  return (-1);
          }
          if (estp->st_ino != efhp->fh_fid) {
!                 syslog(LOG_ERR, "Entry ino mismatch %u %u", estp->st_ino,
                      (uint_t)pfhp->fh_fid);
                  return (-1);
          }
  
          /* check the dates and mark the bitmap inode */
          if (ddate == 0) {
                  /* base backup */
                  (void) dbm_setone(bmd, (u_longlong_t)estp->st_ino);
                  (void) dbm_setone(bmd, (u_longlong_t)pstp->st_ino);
  
          } else if (estp->st_mtime > ddate) {
                  (void) dbm_setone(bmd, (u_longlong_t)estp->st_ino);
                  (void) dbm_setone(bmd, (u_longlong_t)pstp->st_ino);
                  if (ndmpd_verbose_traverse) {
!                         syslog(LOG_DEBUG,
                              "m(%u,%u,%u,%u)", (uint_t)pstp->st_ino,
                              (uint_t)estp->st_ino, (uint_t)estp->st_mtime,
                              (uint_t)ddate);
!                         syslog(LOG_DEBUG, "\"%s/%s\"",
                              pnp->tn_path, enp->tn_path);
                  }
          } else if (iscreated(nlp, NULL, tacl, ddate)) {
                  (void) dbm_setone(bmd, (u_longlong_t)estp->st_ino);
                  (void) dbm_setone(bmd, (u_longlong_t)pstp->st_ino);
                  if (ndmpd_verbose_traverse) {
!                         syslog(LOG_DEBUG,
                              "cr(%u,%u,%u,%u)", (uint_t)pstp->st_ino,
                              (uint_t)estp->st_ino, (uint_t)estp->st_mtime,
                              (uint_t)ddate);
!                         syslog(LOG_DEBUG, "\"%s/%s\"",
                              pnp->tn_path, enp->tn_path);
                  }
          } else if (estp->st_ctime > ddate) {
                  if (!NLP_IGNCTIME(nlp)) {
                          (void) dbm_setone(bmd, (u_longlong_t)estp->st_ino);
                          (void) dbm_setone(bmd, (u_longlong_t)pstp->st_ino);
                  }
                  if (ndmpd_verbose_traverse) {
                          if (NLP_IGNCTIME(nlp)) {
!                                 syslog(LOG_DEBUG,
                                      "ign c(%u,%u,%u,%u)", (uint_t)pstp->st_ino,
                                      (uint_t)estp->st_ino,
                                      (uint_t)estp->st_ctime, (uint_t)ddate);
                          } else {
!                                 syslog(LOG_DEBUG,
                                      "c(%u,%u,%u,%u)", (uint_t)pstp->st_ino,
                                      (uint_t)estp->st_ino,
                                      (uint_t)estp->st_ctime, (uint_t)ddate);
                          }
!                         syslog(LOG_DEBUG, "\"%s/%s\"",
                              pnp->tn_path, enp->tn_path);
                  }
          } else if (S_ISDIR(estp->st_mode) &&
              dbm_getone(bmd, (u_longlong_t)estp->st_ino)) {
                  (void) dbm_setone(bmd, (u_longlong_t)pstp->st_ino);
          }
  
          return (0);
  }
  
  
*** 408,422 ****
  {
          fs_traverse_t ft;
          mark_param_t mp;
  
          if (!session || !nlp || !path || !*path) {
!                 NDMP_LOG(LOG_DEBUG, "Invalid argument");
                  return (-1);
          }
  
!         NDMP_LOG(LOG_DEBUG, "path \"%s\"", path);
  
          mp.mp_bmd = nlp->nlp_bkmap;
          mp.mp_ddate = nlp->nlp_ldate;
          mp.mp_session = session;
          mp.mp_nlp = nlp;
--- 400,414 ----
  {
          fs_traverse_t ft;
          mark_param_t mp;
  
          if (!session || !nlp || !path || !*path) {
!                 syslog(LOG_ERR, "Invalid argument in mark_inodes_v2");
                  return (-1);
          }
  
!         syslog(LOG_DEBUG, "path \"%s\"", path);
  
          mp.mp_bmd = nlp->nlp_bkmap;
          mp.mp_ddate = nlp->nlp_ldate;
          mp.mp_session = session;
          mp.mp_nlp = nlp;
*** 423,433 ****
  
          ft.ft_path = path;
          ft.ft_lpath = nlp->nlp_backup_path;
          ft.ft_callbk = mark_cb;
          ft.ft_arg = ∓
!         ft.ft_logfp = (ft_log_t)ndmp_log;
          ft.ft_flags = ndmpd_mark_flags;
  
          return (traverse(session, nlp, &ft));
  }
  
--- 415,425 ----
  
          ft.ft_path = path;
          ft.ft_lpath = nlp->nlp_backup_path;
          ft.ft_callbk = mark_cb;
          ft.ft_arg = ∓
!         ft.ft_logfp = (ft_log_t)syslog;
          ft.ft_flags = ndmpd_mark_flags;
  
          return (traverse(session, nlp, &ft));
  }
  
*** 436,471 ****
   * create_bitmap
   *
   * Create a dbitmap and return its descriptor.
   *
   * Parameters:
!  *   path (input) - path for which the bitmap should be created
   *   value (input) - the initial value for the bitmap
   *
   * Returns:
   *   the dbitmap descriptor
   */
  static int
! create_bitmap(char *path, int value)
  {
          char bm_fname[PATH_MAX];
-         char buf[TLM_MAX_PATH_NAME];
          char *livepath;
          ulong_t ninode;
  
!         NDMP_LOG(LOG_DEBUG, "path \"%s\"", path);
  
-         if (fs_is_chkpntvol(path))
-                 livepath = (char *)tlm_remove_checkpoint(path, buf);
-         else
-                 livepath = path;
          ninode = 1024 * 1024 * 1024;
          if (ninode == 0)
                  return (-1);
!         (void) ndmpd_mk_temp(bm_fname);
  
!         NDMP_LOG(LOG_DEBUG, "path \"%s\"ninode %u bm_fname \"%s\"",
              livepath, ninode, bm_fname);
  
          return (dbm_alloc(bm_fname, (u_longlong_t)ninode, value));
  }
  
--- 428,459 ----
   * create_bitmap
   *
   * Create a dbitmap and return its descriptor.
   *
   * Parameters:
!  *   nlp (input) - pointer to the nlp structure
   *   value (input) - the initial value for the bitmap
   *
   * Returns:
   *   the dbitmap descriptor
   */
  static int
! create_bitmap(ndmp_lbr_params_t *nlp, int value)
  {
          char bm_fname[PATH_MAX];
          char *livepath;
          ulong_t ninode;
  
!         livepath = NLP_ISCHKPNTED(nlp) ?
!             nlp->nlp_mountpoint : nlp->nlp_backup_path;
  
          ninode = 1024 * 1024 * 1024;
          if (ninode == 0)
                  return (-1);
!         (void) ndmpd_mk_temp(nlp->nlp_job_name, bm_fname);
  
!         syslog(LOG_DEBUG, "path \"%s\" ninode %u bm_fname \"%s\"",
              livepath, ninode, bm_fname);
  
          return (dbm_alloc(bm_fname, (u_longlong_t)ninode, value));
  }
  
*** 485,499 ****
  static int
  create_allset_bitmap(ndmp_lbr_params_t *nlp)
  {
          int rv;
  
!         nlp->nlp_bkmap = create_bitmap(nlp->nlp_backup_path, 1);
!         NDMP_LOG(LOG_DEBUG, "nlp_bkmap %d", nlp->nlp_bkmap);
  
          if (nlp->nlp_bkmap < 0) {
!                 NDMP_LOG(LOG_DEBUG, "Failed to allocate bitmap.");
                  rv = -1;
          } else
                  rv = 0;
  
          return (rv);
--- 473,487 ----
  static int
  create_allset_bitmap(ndmp_lbr_params_t *nlp)
  {
          int rv;
  
!         nlp->nlp_bkmap = create_bitmap(nlp, 1);
  
          if (nlp->nlp_bkmap < 0) {
!                 syslog(LOG_ERR,
!                     "Failed to allocate bitmap in create_allset_bitmap");
                  rv = -1;
          } else
                  rv = 0;
  
          return (rv);
*** 530,544 ****
           */
          if (nlp->nlp_ldate == (time_t)0)
                  return (create_allset_bitmap(nlp));
  
          rv = 0;
!         nlp->nlp_bkmap = create_bitmap(nlp->nlp_backup_path, 0);
!         NDMP_LOG(LOG_DEBUG, "nlp_bkmap %d", nlp->nlp_bkmap);
  
          if (nlp->nlp_bkmap < 0) {
!                 NDMP_LOG(LOG_DEBUG, "Failed to allocate bitmap.");
                  rv = -1;
          } else {
                  if (fs_is_chkpntvol(nlp->nlp_backup_path))
                          chkpath = nlp->nlp_backup_path;
                  else
--- 518,531 ----
           */
          if (nlp->nlp_ldate == (time_t)0)
                  return (create_allset_bitmap(nlp));
  
          rv = 0;
!         nlp->nlp_bkmap = create_bitmap(nlp, 0);
  
          if (nlp->nlp_bkmap < 0) {
!                 syslog(LOG_ERR, "Failed to allocate bitmap in mark_common_v2");
                  rv = -1;
          } else {
                  if (fs_is_chkpntvol(nlp->nlp_backup_path))
                          chkpath = nlp->nlp_backup_path;
                  else
*** 617,636 ****
  ndmpd_mark_inodes_v2(ndmpd_session_t *session, ndmp_lbr_params_t *nlp)
  {
          int rv;
  
          if (ndmp_skip_traverse) {
!                 NDMP_LOG(LOG_INFO, "Skip processing directories \"%s\"",
                      nlp->nlp_backup_path);
                  rv = create_allset_bitmap(nlp);
          } else {
                  if (NLP_ISTAR(nlp))
                          rv = mark_tar_inodes_v2(session, nlp);
                  else if (NLP_ISDUMP(nlp))
                          rv = mark_dump_inodes_v2(session, nlp);
                  else {
!                         NDMP_LOG(LOG_DEBUG, "Unknown backup type for \"%s\"",
                              nlp->nlp_backup_path);
                          rv = -1;
                  }
          }
  
--- 604,623 ----
  ndmpd_mark_inodes_v2(ndmpd_session_t *session, ndmp_lbr_params_t *nlp)
  {
          int rv;
  
          if (ndmp_skip_traverse) {
!                 syslog(LOG_INFO, "Skip processing directories \"%s\"",
                      nlp->nlp_backup_path);
                  rv = create_allset_bitmap(nlp);
          } else {
                  if (NLP_ISTAR(nlp))
                          rv = mark_tar_inodes_v2(session, nlp);
                  else if (NLP_ISDUMP(nlp))
                          rv = mark_dump_inodes_v2(session, nlp);
                  else {
!                         syslog(LOG_ERR, "Unknown backup type for \"%s\"",
                              nlp->nlp_backup_path);
                          rv = -1;
                  }
          }
  
*** 681,702 ****
  {
          fs_traverse_t ft;
          mark_param_t mp;
  
          if (!session || !nlp || !path || !*path) {
!                 NDMP_LOG(LOG_DEBUG, "Invalid argument");
                  return (-1);
          }
          if (nlp->nlp_tokdate == (time_t)0)
                  return (create_allset_bitmap(nlp));
  
!         nlp->nlp_bkmap = create_bitmap(nlp->nlp_backup_path, 0);
          if (nlp->nlp_bkmap < 0) {
!                 NDMP_LOG(LOG_DEBUG, "Failed to allocate bitmap.");
                  return (-1);
          }
-         NDMP_LOG(LOG_DEBUG, "nlp_bkmap %d", nlp->nlp_bkmap);
  
          mp.mp_bmd = nlp->nlp_bkmap;
          mp.mp_ddate = nlp->nlp_tokdate;
          mp.mp_session = session;
          mp.mp_nlp = nlp;
--- 668,688 ----
  {
          fs_traverse_t ft;
          mark_param_t mp;
  
          if (!session || !nlp || !path || !*path) {
!                 syslog(LOG_ERR, "Invalid argument in mark_tokv3");
                  return (-1);
          }
          if (nlp->nlp_tokdate == (time_t)0)
                  return (create_allset_bitmap(nlp));
  
!         nlp->nlp_bkmap = create_bitmap(nlp, 0);
          if (nlp->nlp_bkmap < 0) {
!                 syslog(LOG_ERR, "Failed to allocate bitmap in mark_tokv3");
                  return (-1);
          }
  
          mp.mp_bmd = nlp->nlp_bkmap;
          mp.mp_ddate = nlp->nlp_tokdate;
          mp.mp_session = session;
          mp.mp_nlp = nlp;
*** 703,713 ****
  
          ft.ft_path = path;
          ft.ft_lpath = nlp->nlp_backup_path;
          ft.ft_callbk = mark_cb;
          ft.ft_arg = ∓
!         ft.ft_logfp = (ft_log_t)ndmp_log;
          ft.ft_flags = ndmpd_mark_flags;
  
          return (traverse(session, nlp, &ft));
  }
  
--- 689,699 ----
  
          ft.ft_path = path;
          ft.ft_lpath = nlp->nlp_backup_path;
          ft.ft_callbk = mark_cb;
          ft.ft_arg = ∓
!         ft.ft_logfp = (ft_log_t)syslog;
          ft.ft_flags = ndmpd_mark_flags;
  
          return (traverse(session, nlp, &ft));
  }
  
*** 741,757 ****
          mark_param_t *mpp;
          ndmp_lbr_params_t *nlp;
  
          mpp = (mark_param_t *)arg;
          if (!mpp) {
!                 NDMP_LOG(LOG_DEBUG, "NULL argument passed");
                  return (-1);
          }
          nlp = ndmp_get_nlp(mpp->mp_session);
          if (mpp->mp_session->ns_data.dd_abort ||
              (nlp && NLP_ISSET(nlp, NLPF_ABORTED))) {
!                 NDMP_LOG(LOG_INFO, "Processing directories aborted.");
                  return (-1);
          }
  
          bmd = mpp->mp_bmd;
          bl = dbm_getlen(bmd);
--- 727,743 ----
          mark_param_t *mpp;
          ndmp_lbr_params_t *nlp;
  
          mpp = (mark_param_t *)arg;
          if (!mpp) {
!                 syslog(LOG_ERR, "NULL argument passed in marklbrv3");
                  return (-1);
          }
          nlp = ndmp_get_nlp(mpp->mp_session);
          if (mpp->mp_session->ns_data.dd_abort ||
              (nlp && NLP_ISSET(nlp, NLPF_ABORTED))) {
!                 syslog(LOG_ERR, "Processing directories aborted.");
                  return (-1);
          }
  
          bmd = mpp->mp_bmd;
          bl = dbm_getlen(bmd);
*** 759,815 ****
          pfhp = pnp->tn_fh;
          pstp = pnp->tn_st;
  
          /* sanity check on fh and stat of the path passed */
          if (pstp->st_ino > bl) {
!                 NDMP_LOG(LOG_DEBUG, "Invalid path inode #%u",
                      (uint_t)pstp->st_ino);
                  return (-1);
          }
          if (pstp->st_ino != pfhp->fh_fid) {
!                 NDMP_LOG(LOG_DEBUG, "Path ino mismatch %u %u",
                      (uint_t)pstp->st_ino, (uint_t)pfhp->fh_fid);
                  return (-1);
          }
  
          /*
           * Always mark the backup path inode number.
           */
          if (!enp->tn_path) {
                  (void) dbm_setone(bmd, pstp->st_ino);
-                 if (ndmpd_verbose_traverse) {
-                         NDMP_LOG(LOG_DEBUG, "d(%u)", (uint_t)pstp->st_ino);
-                         NDMP_LOG(LOG_DEBUG, "\"%s\"", pnp->tn_path);
-                 }
                  return (0);
          }
  
          efhp = enp->tn_fh;
          estp = enp->tn_st;
  
          /* sanity check on fh and stat of the entry passed */
          if (estp->st_ino > bl) {
!                 NDMP_LOG(LOG_DEBUG, "Invalid entry inode #%u",
                      (uint_t)estp->st_ino);
                  return (-1);
          }
          if (estp->st_ino != efhp->fh_fid) {
!                 NDMP_LOG(LOG_DEBUG, "Entry ino mismatch %u %u", estp->st_ino,
                      (uint_t)pfhp->fh_fid);
                  return (-1);
          }
  
          if (S_ISDIR(estp->st_mode) &&
              dbm_getone(bmd, (u_longlong_t)estp->st_ino)) {
                  (void) dbm_setone(bmd, (u_longlong_t)pstp->st_ino);
-                 if (ndmpd_verbose_traverse) {
-                         NDMP_LOG(LOG_DEBUG, "d(%u,%u)",
-                             (uint_t)pstp->st_ino, (uint_t)estp->st_ino);
-                         NDMP_LOG(LOG_DEBUG, "\"%s, %s\"",
-                             pnp->tn_path, enp->tn_path);
                  }
-         }
  
          return (0);
  }
  
  
--- 745,791 ----
          pfhp = pnp->tn_fh;
          pstp = pnp->tn_st;
  
          /* sanity check on fh and stat of the path passed */
          if (pstp->st_ino > bl) {
!                 syslog(LOG_ERR, "Invalid path inode #%u",
                      (uint_t)pstp->st_ino);
                  return (-1);
          }
          if (pstp->st_ino != pfhp->fh_fid) {
!                 syslog(LOG_ERR, "Path ino mismatch %u %u",
                      (uint_t)pstp->st_ino, (uint_t)pfhp->fh_fid);
                  return (-1);
          }
  
          /*
           * Always mark the backup path inode number.
           */
          if (!enp->tn_path) {
                  (void) dbm_setone(bmd, pstp->st_ino);
                  return (0);
          }
  
          efhp = enp->tn_fh;
          estp = enp->tn_st;
  
          /* sanity check on fh and stat of the entry passed */
          if (estp->st_ino > bl) {
!                 syslog(LOG_ERR, "Invalid entry inode #%u",
                      (uint_t)estp->st_ino);
                  return (-1);
          }
          if (estp->st_ino != efhp->fh_fid) {
!                 syslog(LOG_ERR, "Entry ino mismatch %u %u", estp->st_ino,
                      (uint_t)pfhp->fh_fid);
                  return (-1);
          }
  
          if (S_ISDIR(estp->st_mode) &&
              dbm_getone(bmd, (u_longlong_t)estp->st_ino)) {
                  (void) dbm_setone(bmd, (u_longlong_t)pstp->st_ino);
          }
  
          return (0);
  }
  
  
*** 835,858 ****
          char c;
          fs_traverse_t ft;
          mark_param_t mp;
  
          if (!session || !nlp || !path || !*path) {
!                 NDMP_LOG(LOG_DEBUG, "Invalid argument");
                  return (-1);
          }
          /* full and archive backups backup everything */
          c = toupper(nlp->nlp_clevel);
          if (c == 'F' || c == 'A')
                  return (create_allset_bitmap(nlp));
  
!         nlp->nlp_bkmap = create_bitmap(nlp->nlp_backup_path, 0);
          if (nlp->nlp_bkmap < 0) {
!                 NDMP_LOG(LOG_DEBUG, "Failed to allocate bitmap.");
                  return (-1);
          }
-         NDMP_LOG(LOG_DEBUG, "nlp_bkmap %d", nlp->nlp_bkmap);
  
          mp.mp_bmd = nlp->nlp_bkmap;
          mp.mp_ddate = 0;
          mp.mp_session = session;
          mp.mp_nlp = nlp;
--- 811,833 ----
          char c;
          fs_traverse_t ft;
          mark_param_t mp;
  
          if (!session || !nlp || !path || !*path) {
!                 syslog(LOG_ERR, "Invalid argument in mark_lbrv3");
                  return (-1);
          }
          /* full and archive backups backup everything */
          c = toupper(nlp->nlp_clevel);
          if (c == 'F' || c == 'A')
                  return (create_allset_bitmap(nlp));
  
!         nlp->nlp_bkmap = create_bitmap(nlp, 0);
          if (nlp->nlp_bkmap < 0) {
!                 syslog(LOG_ERR, "Failed to allocate bitmap in mark_lbrv3");
                  return (-1);
          }
  
          mp.mp_bmd = nlp->nlp_bkmap;
          mp.mp_ddate = 0;
          mp.mp_session = session;
          mp.mp_nlp = nlp;
*** 859,869 ****
  
          ft.ft_path = path;
          ft.ft_lpath = nlp->nlp_backup_path;
          ft.ft_callbk = marklbrv3_cb;
          ft.ft_arg = ∓
!         ft.ft_logfp = (ft_log_t)ndmp_log;
          ft.ft_flags = ndmpd_mark_flags;
  
          return (traverse(session, nlp, &ft));
  }
  
--- 834,844 ----
  
          ft.ft_path = path;
          ft.ft_lpath = nlp->nlp_backup_path;
          ft.ft_callbk = marklbrv3_cb;
          ft.ft_arg = ∓
!         ft.ft_logfp = (ft_log_t)syslog;
          ft.ft_flags = ndmpd_mark_flags;
  
          return (traverse(session, nlp, &ft));
  }
  
*** 890,911 ****
          fs_traverse_t ft;
          mark_param_t mp;
          tlm_acls_t traverse_acl;
  
          if (!session || !nlp || !path || !*path) {
!                 NDMP_LOG(LOG_DEBUG, "Invalid argument");
                  return (-1);
          }
          if (nlp->nlp_ldate == (time_t)0)
                  return (create_allset_bitmap(nlp));
  
!         nlp->nlp_bkmap = create_bitmap(nlp->nlp_backup_path, 0);
          if (nlp->nlp_bkmap < 0) {
!                 NDMP_LOG(LOG_DEBUG, "Failed to allocate bitmap.");
                  return (-1);
          }
-         NDMP_LOG(LOG_DEBUG, "nlp_bkmap %d", nlp->nlp_bkmap);
  
          /*
           * We do not want to allocate memory for acl every time we
           * process a file.
           */
--- 865,885 ----
          fs_traverse_t ft;
          mark_param_t mp;
          tlm_acls_t traverse_acl;
  
          if (!session || !nlp || !path || !*path) {
!                 syslog(LOG_ERR, "Invalid argument in mark_levelv3");
                  return (-1);
          }
          if (nlp->nlp_ldate == (time_t)0)
                  return (create_allset_bitmap(nlp));
  
!         nlp->nlp_bkmap = create_bitmap(nlp, 0);
          if (nlp->nlp_bkmap < 0) {
!                 syslog(LOG_ERR, "Failed to allocate bitmap in mark_levelv3");
                  return (-1);
          }
  
          /*
           * We do not want to allocate memory for acl every time we
           * process a file.
           */
*** 919,929 ****
  
          ft.ft_path = path;
          ft.ft_lpath = nlp->nlp_backup_path;
          ft.ft_callbk = mark_cb;
          ft.ft_arg = ∓
!         ft.ft_logfp = (ft_log_t)ndmp_log;
          ft.ft_flags = ndmpd_mark_flags;
  
          return (traverse(session, nlp, &ft));
  }
  
--- 893,903 ----
  
          ft.ft_path = path;
          ft.ft_lpath = nlp->nlp_backup_path;
          ft.ft_callbk = mark_cb;
          ft.ft_arg = ∓
!         ft.ft_logfp = (ft_log_t)syslog;
          ft.ft_flags = ndmpd_mark_flags;
  
          return (traverse(session, nlp, &ft));
  }
  
*** 965,975 ****
                  rv = mark_lbrv3(session, nlp, chkpath);
          else if (NLP_ISSET(nlp, NLPF_LEVELBK)) {
                  rv = mark_levelv3(session, nlp, chkpath);
          } else {
                  rv = -1;
!                 NDMP_LOG(LOG_DEBUG, "Unknown backup type for \"%s\"",
                      nlp->nlp_backup_path);
          }
  
          return (rv);
  }
--- 939,949 ----
                  rv = mark_lbrv3(session, nlp, chkpath);
          else if (NLP_ISSET(nlp, NLPF_LEVELBK)) {
                  rv = mark_levelv3(session, nlp, chkpath);
          } else {
                  rv = -1;
!                 syslog(LOG_ERR, "Unknown backup type for \"%s\"",
                      nlp->nlp_backup_path);
          }
  
          return (rv);
  }
*** 1022,1041 ****
  ndmpd_mark_inodes_v3(ndmpd_session_t *session, ndmp_lbr_params_t *nlp)
  {
          int rv;
  
          if (ndmp_skip_traverse) {
!                 NDMP_LOG(LOG_INFO, "Skip processing directories \"%s\"",
                      nlp->nlp_backup_path);
                  rv = create_allset_bitmap(nlp);
          } else {
                  if (NLP_ISTAR(nlp))
                          rv = mark_tar_inodesv3(session, nlp);
                  else if (NLP_ISDUMP(nlp)) {
                          rv = mark_commonv3(session, nlp);
                  } else {
!                         NDMP_LOG(LOG_DEBUG, "Unknown backup type for \"%s\"",
                              nlp->nlp_backup_path);
                          rv = -1;
                  }
          }
  
--- 996,1015 ----
  ndmpd_mark_inodes_v3(ndmpd_session_t *session, ndmp_lbr_params_t *nlp)
  {
          int rv;
  
          if (ndmp_skip_traverse) {
!                 syslog(LOG_INFO, "Skip processing directories \"%s\"",
                      nlp->nlp_backup_path);
                  rv = create_allset_bitmap(nlp);
          } else {
                  if (NLP_ISTAR(nlp))
                          rv = mark_tar_inodesv3(session, nlp);
                  else if (NLP_ISDUMP(nlp)) {
                          rv = mark_commonv3(session, nlp);
                  } else {
!                         syslog(LOG_ERR, "Unknown backup type for \"%s\"",
                              nlp->nlp_backup_path);
                          rv = -1;
                  }
          }