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

Split Close
Expand all
Collapse all
          --- old/usr/src/cmd/ndmpd/tlm/tlm_lib.c
          +++ new/usr/src/cmd/ndmpd/tlm/tlm_lib.c
↓ open down ↓ 28 lines elided ↑ open up ↑
  29   29   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  30   30   * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
  31   31   * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  32   32   * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  33   33   * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  34   34   * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  35   35   * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  36   36   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  37   37   * POSSIBILITY OF SUCH DAMAGE.
  38   38   */
       39 +/* Copyright 2017 Nexenta Systems, Inc. All rights reserved. */
       40 +
  39   41  #include <sys/errno.h>
       42 +#include <syslog.h>
  40   43  #include <ctype.h>
  41   44  #include <stdlib.h>
  42   45  #include <time.h>
  43   46  #include <sys/types.h>
  44   47  #include <unistd.h>
  45   48  #include <libzfs.h>
  46   49  #include <pthread.h>
  47   50  #include "tlm.h"
  48   51  #include "tlm_proto.h"
  49   52  #include <ndmpd_prop.h>
↓ open down ↓ 261 lines elided ↑ open up ↑
 311  314          int     i;              /* loop counter */
 312  315  
 313  316          /*
 314  317           * compute the checksum
 315  318           */
 316  319          for (i = 0; i < RECORDSIZE; i++) {
 317  320                  sum += p[i] & 0xFF;
 318  321          }
 319  322  
 320  323          if (sum == 0) {
 321      -                NDMP_LOG(LOG_DEBUG,
      324 +                syslog(LOG_DEBUG,
 322  325                      "should be %d, is 0", chksum);
 323  326                  /* a zero record ==> end of tar file */
 324  327                  return (0);
 325  328          }
 326  329  
 327  330          /*
 328  331           * subtract out the label's checksum values
 329  332           * this lets us undo the old checksum "in-
 330  333           * place", no need to swap blanks in and out
 331  334           */
 332  335          for (i = 0; i < 8; i++) {
 333  336                  sum -= 0xFF & tar_hdr->th_chksum[i];
 334  337          }
 335  338  
 336  339          /*
 337  340           * replace the old checksum field with blanks
 338  341           */
 339  342          sum += ' ' * 8;
 340  343  
 341      -        if (sum != chksum)
 342      -                NDMP_LOG(LOG_DEBUG,
      344 +        if (sum != chksum) {
      345 +                syslog(LOG_DEBUG,
 343  346                      "should be %d, is %d", chksum, sum);
      347 +        }
 344  348  
 345  349          return ((sum == chksum) ? 1 : -1);
 346  350  }
 347  351  
 348  352  /*
 349  353   * get internal scsi_sasd entry for this tape drive
 350  354   */
 351  355  int
 352  356  tlm_get_scsi_sasd_entry(int lib, int drv)
 353  357  {
 354  358          int entry;
 355  359          int i, n;
 356  360          scsi_link_t *sl;
 357  361          tlm_drive_t *dp;
 358  362  
 359  363          entry = -1;
 360  364          dp = tlm_drive(lib, drv);
 361  365          if (!dp) {
 362      -                NDMP_LOG(LOG_DEBUG, "NULL dp for (%d.%d)", lib, drv);
      366 +                syslog(LOG_DEBUG, "NULL dp for (%d.%d)", lib, drv);
 363  367          } else if (!dp->td_slink) {
 364      -                NDMP_LOG(LOG_DEBUG, "NULL dp->td_slink for (%d.%d)", lib, drv);
      368 +                syslog(LOG_DEBUG, "NULL dp->td_slink for (%d.%d)", lib, drv);
 365  369          } else if (!dp->td_slink->sl_sa) {
 366      -                NDMP_LOG(LOG_DEBUG, "NULL dp->td_slink->sl_sa for (%d.%d)",
      370 +                syslog(LOG_DEBUG, "NULL dp->td_slink->sl_sa for (%d.%d)",
 367  371                      lib, drv);
 368  372          } else {
 369  373                  /* search through the SASD table */
 370  374                  n = sasd_dev_count();
 371  375                  for (i = 0; i < n; i++) {
 372  376                          sl = sasd_dev_slink(i);
 373  377                          if (!sl)
 374  378                                  continue;
 375  379  
 376  380                          if (dp->td_slink->sl_sa == sl->sl_sa &&
↓ open down ↓ 112 lines elided ↑ open up ↑
 489  493   */
 490  494  int
 491  495  tlm_log_fhdir(tlm_job_stats_t *job_stats, char *dir, struct stat64 *stp,
 492  496      fs_fhandle_t *fhp)
 493  497  {
 494  498          int rv;
 495  499          lbr_fhlog_call_backs_t *cbp; /* callbacks pointer */
 496  500  
 497  501          rv = 0;
 498  502          if (job_stats == NULL) {
 499      -                NDMP_LOG(LOG_DEBUG, "log_fhdir: jstat is NULL");
      503 +                syslog(LOG_DEBUG, "log_fhdir: jstat is NULL");
 500  504          } else if (dir == NULL) {
 501      -                NDMP_LOG(LOG_DEBUG, "log_fhdir: dir is NULL");
      505 +                syslog(LOG_DEBUG, "log_fhdir: dir is NULL");
 502  506          } else if (stp == NULL) {
 503      -                NDMP_LOG(LOG_DEBUG, "log_fhdir: stp is NULL");
      507 +                syslog(LOG_DEBUG, "log_fhdir: stp is NULL");
 504  508          } else if ((cbp = (lbr_fhlog_call_backs_t *)job_stats->js_callbacks)
 505  509              == NULL) {
 506      -                NDMP_LOG(LOG_DEBUG, "log_fhdir: cbp is NULL");
      510 +                syslog(LOG_DEBUG, "log_fhdir: cbp is NULL");
 507  511          } else if (cbp->fh_log_dir == NULL) {
 508      -                NDMP_LOG(LOG_DEBUG, "log_fhdir: callback is NULL");
      512 +                syslog(LOG_DEBUG, "log_fhdir: callback is NULL");
 509  513          } else
 510  514                  rv = (*cbp->fh_log_dir)(cbp, dir, stp, fhp);
 511  515  
 512  516          return (rv);
 513  517  }
 514  518  
 515  519  /*
 516  520   * Call back for file history node info
 517  521   */
 518  522  int
 519  523  tlm_log_fhnode(tlm_job_stats_t *job_stats, char *dir, char *file,
 520  524      struct stat64 *stp, u_longlong_t off)
 521  525  {
 522  526          int rv;
 523  527          lbr_fhlog_call_backs_t *cbp; /* callbacks pointer */
 524  528  
 525  529          rv = 0;
 526  530          if (job_stats == NULL) {
 527      -                NDMP_LOG(LOG_DEBUG, "log_fhnode: jstat is NULL");
      531 +                syslog(LOG_DEBUG, "log_fhnode: jstat is NULL");
 528  532          } else if (dir == NULL) {
 529      -                NDMP_LOG(LOG_DEBUG, "log_fhnode: dir is NULL");
      533 +                syslog(LOG_DEBUG, "log_fhnode: dir is NULL");
 530  534          } else if (file == NULL) {
 531      -                NDMP_LOG(LOG_DEBUG, "log_fhnode: file is NULL");
      535 +                syslog(LOG_DEBUG, "log_fhnode: file is NULL");
 532  536          } else if (stp == NULL) {
 533      -                NDMP_LOG(LOG_DEBUG, "log_fhnode: stp is NULL");
      537 +                syslog(LOG_DEBUG, "log_fhnode: stp is NULL");
 534  538          } else if ((cbp = (lbr_fhlog_call_backs_t *)job_stats->js_callbacks)
 535  539              == NULL) {
 536      -                NDMP_LOG(LOG_DEBUG, "log_fhnode: cbp is NULL");
      540 +                syslog(LOG_DEBUG, "log_fhnode: cbp is NULL");
 537  541          } else if (cbp->fh_log_node == NULL) {
 538      -                NDMP_LOG(LOG_DEBUG, "log_fhnode: callback is NULL");
      542 +                syslog(LOG_DEBUG, "log_fhnode: callback is NULL");
 539  543          } else
 540  544                  rv = (*cbp->fh_log_node)(cbp, dir, file, stp, off);
 541  545  
 542  546          return (rv);
 543  547  }
 544  548  
 545  549  /*
 546  550   * Call back for file history path info
 547  551   */
 548  552  int
 549  553  tlm_log_fhpath_name(tlm_job_stats_t *job_stats, char *pathname,
 550  554      struct stat64 *stp, u_longlong_t off)
 551  555  {
 552  556          int rv;
 553  557          lbr_fhlog_call_backs_t *cbp; /* callbacks pointer */
 554  558  
 555  559          rv = 0;
 556  560          if (!job_stats) {
 557      -                NDMP_LOG(LOG_DEBUG, "log_fhpath_name: jstat is NULL");
      561 +                syslog(LOG_DEBUG, "log_fhpath_name: jstat is NULL");
 558  562          } else if (!pathname) {
 559      -                NDMP_LOG(LOG_DEBUG, "log_fhpath_name: pathname is NULL");
      563 +                syslog(LOG_DEBUG, "log_fhpath_name: pathname is NULL");
 560  564          } else if (!stp) {
 561      -                NDMP_LOG(LOG_DEBUG, "log_fhpath_name: stp is NULL");
      565 +                syslog(LOG_DEBUG, "log_fhpath_name: stp is NULL");
 562  566          } else if ((cbp = (lbr_fhlog_call_backs_t *)job_stats->js_callbacks)
 563  567              == 0) {
 564      -                NDMP_LOG(LOG_DEBUG, "log_fhpath_name: cbp is NULL");
      568 +                syslog(LOG_DEBUG, "log_fhpath_name: cbp is NULL");
 565  569          } else if (!cbp->fh_logpname) {
 566      -                NDMP_LOG(LOG_DEBUG, "log_fhpath_name: callback is NULL");
      570 +                syslog(LOG_DEBUG, "log_fhpath_name: callback is NULL");
 567  571          } else
 568  572                  rv = (*cbp->fh_logpname)(cbp, pathname, stp, off);
 569  573  
 570  574          return (rv);
 571  575  }
 572  576  
 573  577  
 574  578  /*
 575  579   * Log call back to report the entry recovery
 576  580   */
 577  581  int
 578  582  tlm_entry_restored(tlm_job_stats_t *job_stats, char *name, int pos)
 579  583  {
 580  584          lbr_fhlog_call_backs_t *cbp; /* callbacks pointer */
 581  585  
 582      -        NDMP_LOG(LOG_DEBUG, "name: \"%s\", pos: %d", name, pos);
 583      -
 584  586          if (job_stats == NULL) {
 585      -                NDMP_LOG(LOG_DEBUG, "entry_restored: jstat is NULL");
      587 +                syslog(LOG_DEBUG, "entry_restored: jstat is NULL");
 586  588                  return (0);
 587  589          }
 588  590          cbp = (lbr_fhlog_call_backs_t *)job_stats->js_callbacks;
 589  591          if (cbp == NULL) {
 590      -                NDMP_LOG(LOG_DEBUG, "entry_restored is NULL");
      592 +                syslog(LOG_DEBUG, "entry_restored is NULL");
 591  593                  return (0);
 592  594          }
 593  595          return (*cbp->fh_logpname)(cbp, name, 0, (longlong_t)pos);
 594  596  }
 595  597  /*
 596  598   * NDMP support ends here.
 597  599   */
 598  600  
 599  601  /*
 600  602   * Function: tlm_cat_path
↓ open down ↓ 38 lines elided ↑ open up ↑
 639  641          (void) snprintf(buf, TLM_MAX_PATH_NAME, fmt, dir, name);
 640  642  
 641  643          return (TRUE);
 642  644  }
 643  645  
 644  646  /*
 645  647   * Get the checkpoint (snapshot) creation time.
 646  648   * This is necessary to check for checkpoints not being stale.
 647  649   */
 648  650  int
 649      -tlm_get_chkpnt_time(char *path, int auto_checkpoint, time_t *tp, char *jname)
      651 +tlm_get_chkpnt_time(char *path, time_t *tp)
 650  652  {
 651      -        char volname[TLM_VOLNAME_MAX_LENGTH];
 652      -        char chk_name[PATH_MAX];
 653      -        char *cp_nm;
      653 +        zfs_handle_t *zhp;
 654  654  
 655      -        NDMP_LOG(LOG_DEBUG, "path [%s] auto_checkpoint: %d",
 656      -            path, auto_checkpoint);
 657      -
 658      -        if (path == NULL || *path == '\0' || tp == NULL)
      655 +        if (path == NULL || *path == '\0' || tp == NULL) {
      656 +                syslog(LOG_ERR, "tlm_get_chkpnt_time: bad params");
 659  657                  return (-1);
      658 +        }
 660  659  
 661      -        if (get_zfsvolname(volname, TLM_VOLNAME_MAX_LENGTH,
 662      -            path) == -1)
      660 +        (void) mutex_lock(&zlib_mtx);
      661 +        if ((zhp = zfs_open(zlibh, path, ZFS_TYPE_DATASET)) == NULL) {
      662 +                syslog(LOG_DEBUG, "tlm_get_chkpnt_time: open %s failed",
      663 +                    path);
      664 +                (void) mutex_unlock(&zlib_mtx);
 663  665                  return (-1);
 664      -
 665      -        if (auto_checkpoint) {
 666      -                NDMP_LOG(LOG_DEBUG, "volname [%s]", volname);
 667      -                (void) snprintf(chk_name, PATH_MAX, "%s", jname);
 668      -                return (chkpnt_creationtime_bypattern(volname, chk_name, tp));
 669  666          }
 670      -        cp_nm = strchr(volname, '@');
 671      -        NDMP_LOG(LOG_DEBUG, "volname [%s] cp_nm [%s]", volname, cp_nm);
 672  667  
 673      -        return (chkpnt_creationtime_bypattern(volname, cp_nm, tp));
      668 +        *tp = zfs_prop_get_int(zhp, ZFS_PROP_CREATION);
      669 +
      670 +        zfs_close(zhp);
      671 +        (void) mutex_unlock(&zlib_mtx);
      672 +
      673 +        return (0);
 674  674  }
 675  675  
 676  676  /*
 677  677   * Release an array of pointers and the pointers themselves.
 678  678   */
 679  679  void
 680  680  tlm_release_list(char **lpp)
 681  681  {
 682  682          char **save;
 683  683  
↓ open down ↓ 10 lines elided ↑ open up ↑
 694  694   * Print the list of array of strings in the backup log
 695  695   */
 696  696  void
 697  697  tlm_log_list(char *title, char **lpp)
 698  698  {
 699  699          int i;
 700  700  
 701  701          if (!lpp)
 702  702                  return;
 703  703  
 704      -        NDMP_LOG(LOG_DEBUG, "%s:", title);
      704 +        syslog(LOG_DEBUG, "%s:", title);
 705  705  
 706  706          for (i = 0; *lpp; lpp++, i++)
 707      -                NDMP_LOG(LOG_DEBUG, "%d: [%s]", i, *lpp);
      707 +                syslog(LOG_DEBUG, "%d: [%s]", i, *lpp);
 708  708  }
 709  709  
 710  710  /*
 711  711   * Insert the backup snapshot name into the path.
 712  712   *
 713  713   * Input:
 714  714   *      name: Original path name.
 715  715   *
 716  716   * Output:
 717  717   *      name: Original name modified to include a snapshot.
 718  718   *
 719  719   * Returns:
 720  720   *      Original name modified to include a snapshot.
 721  721   */
 722  722  char *
 723  723  tlm_build_snapshot_name(char *name, char *sname, char *jname)
 724  724  {
 725  725          zfs_handle_t *zhp;
 726      -        char *rest;
 727      -        char volname[ZFS_MAX_DATASET_NAME_LEN];
 728      -        char mountpoint[PATH_MAX];
      726 +        char volname[ZFS_MAX_DATASET_NAME_LEN] = {'\0'};
      727 +        char mountpoint[PATH_MAX] = {'\0'};
      728 +        char zpoolname[ZFS_MAX_DATASET_NAME_LEN] = {'\0'};
      729 +        char *slash, *rest;
 729  730  
 730  731          if (get_zfsvolname(volname, ZFS_MAX_DATASET_NAME_LEN, name) == -1)
 731  732                  goto notzfs;
 732  733  
 733  734          (void) mutex_lock(&zlib_mtx);
 734  735          if ((zlibh == NULL) ||
 735  736              (zhp = zfs_open(zlibh, volname, ZFS_TYPE_DATASET)) == NULL) {
 736  737                  (void) mutex_unlock(&zlib_mtx);
 737  738                  goto notzfs;
 738  739          }
↓ open down ↓ 1 lines elided ↑ open up ↑
 740  741          if (zfs_prop_get(zhp, ZFS_PROP_MOUNTPOINT, mountpoint, PATH_MAX, NULL,
 741  742              NULL, 0, B_FALSE) != 0) {
 742  743                  zfs_close(zhp);
 743  744                  (void) mutex_unlock(&zlib_mtx);
 744  745                  goto notzfs;
 745  746          }
 746  747  
 747  748          zfs_close(zhp);
 748  749          (void) mutex_unlock(&zlib_mtx);
 749  750  
      751 +        (void) strlcpy(zpoolname, volname, ZFS_MAX_DATASET_NAME_LEN);
      752 +        slash = strchr(zpoolname, '/');
      753 +        if (slash != 0) {
      754 +                *slash = '\0';
      755 +        }
      756 +
 750  757          rest = name + strlen(mountpoint);
 751      -        (void) snprintf(sname, TLM_MAX_PATH_NAME, "%s/%s/%s%s", mountpoint,
 752      -            TLM_SNAPSHOT_DIR, jname, rest);
      758 +        (void) snprintf(sname,
      759 +            TLM_MAX_PATH_NAME, "/%s/%s%s", zpoolname, jname, rest);
 753  760  
 754  761          return (sname);
 755  762  
 756  763  notzfs:
 757  764          (void) strlcpy(sname, name, TLM_MAX_PATH_NAME);
 758  765          return (sname);
 759  766  }
 760  767  
 761  768  /*
 762  769   * Remove the checkpoint from a path name.
↓ open down ↓ 56 lines elided ↑ open up ↑
 819  826  boolean_t
 820  827  tlm_is_excluded(char *dir, char *name, char **excl_files)
 821  828  {
 822  829          int     i;
 823  830          char    full_name[TLM_MAX_PATH_NAME];
 824  831  
 825  832          if (!dir || !name || !excl_files)
 826  833                  return (FALSE);
 827  834  
 828  835          if (!tlm_cat_path(full_name, dir, name)) {
 829      -                NDMP_LOG(LOG_DEBUG, "Path too long [%s][%s]",
      836 +                syslog(LOG_DEBUG, "Path too long [%s][%s]",
 830  837                      dir, name);
 831  838                  return (FALSE);
 832  839          }
 833  840          for (i = 0; excl_files[i] != 0; i++) {
 834  841                  if (match(excl_files[i], full_name)) {
 835  842                          return (TRUE);
 836  843                  }
 837  844          }
 838  845          return (FALSE);
 839  846  }
↓ open down ↓ 33 lines elided ↑ open up ↑
 873  880  /*
 874  881   * Enable the barcode capability on the library
 875  882   */
 876  883  void
 877  884  tlm_enable_barcode(int l)
 878  885  {
 879  886          tlm_library_t *lp;
 880  887  
 881  888          if ((lp = tlm_library(l))) {
 882  889                  lp->tl_capability_barcodes = TRUE;
 883      -                NDMP_LOG(LOG_DEBUG,
      890 +                syslog(LOG_DEBUG,
 884  891                      "Barcode capability on library %d enabled.", l);
 885  892          }
 886  893  }
 887  894  
 888  895  /*
 889  896   * SASD SCSI support
 890  897   */
 891  898  static scsi_adapter_t my_sa;
 892  899  static int sasd_drive_count = 0;
 893  900  static scsi_sasd_drive_t *scsi_sasd_drives[128];
↓ open down ↓ 124 lines elided ↑ open up ↑
1018 1025          int lun = 0;
1019 1026          int sid = 0;
1020 1027          char *drive_type;
1021 1028  
1022 1029          /* Initialize the scsi adapter link */
1023 1030          sa->sa_link_head.sl_next = &sa->sa_link_head;
1024 1031  
1025 1032          /* Scan for the changer */
1026 1033          dirp = opendir(SCSI_CHANGER_DIR);
1027 1034          if (dirp == NULL) {
1028      -                NDMP_LOG(LOG_DEBUG,
     1035 +                syslog(LOG_DEBUG,
1029 1036                      "Changer directory read error %s", SCSI_CHANGER_DIR);
1030 1037          } else {
1031 1038                  while ((dp = readdir(dirp)) != NULL) {
1032 1039                          if ((strcmp(dp->d_name, ".") == 0) ||
1033 1040                              (strcmp(dp->d_name, "..") == 0))
1034 1041                                  continue;
1035 1042  
1036 1043                          if ((p = strchr(dp->d_name, 'd')) != NULL) {
1037 1044                                  lun = atoi(++p);
1038 1045                                  p = strchr(dp->d_name, 't');
↓ open down ↓ 4 lines elided ↑ open up ↑
1043 1050  
1044 1051                          scsi_sasd_attach(sa, 0, lun, dp->d_name,
1045 1052                              DTYPE_CHANGER);
1046 1053                  }
1047 1054                  (void) closedir(dirp);
1048 1055          }
1049 1056  
1050 1057          /* Scan for tape drives */
1051 1058          dirp = opendir(SCSI_TAPE_DIR);
1052 1059          if (dirp == NULL) {
1053      -                NDMP_LOG(LOG_DEBUG,
     1060 +                syslog(LOG_DEBUG,
1054 1061                      "Tape directory read error %s", SCSI_TAPE_DIR);
1055 1062          } else {
1056 1063                  drive_type = ndmpd_get_prop(NDMP_DRIVE_TYPE);
1057 1064  
1058 1065                  if ((strcasecmp(drive_type, "sysv") != 0) &&
1059 1066                      (strcasecmp(drive_type, "bsd") != 0)) {
1060      -                        NDMP_LOG(LOG_ERR, "Invalid ndmpd/drive-type value. "
     1067 +                        syslog(LOG_ERR, "Invalid ndmpd/drive-type value. "
1061 1068                              "Valid values are 'sysv' and 'bsd'.");
1062 1069                          return (-1);
1063 1070                  }
1064 1071  
1065 1072                  while ((dp = readdir(dirp)) != NULL) {
1066 1073                          if ((strcmp(dp->d_name, ".") == 0) ||
1067 1074                              (strcmp(dp->d_name, "..") == 0))
1068 1075                                  continue;
1069 1076  
1070 1077                          /* Skip special modes */
↓ open down ↓ 87 lines elided ↑ open up ↑
1158 1165  }
1159 1166  
1160 1167  /*
1161 1168   * IOCTL wrapper with retries
1162 1169   */
1163 1170  int
1164 1171  tlm_ioctl(int fd, int cmd, void *data)
1165 1172  {
1166 1173          int retries = 0;
1167 1174  
1168      -        NDMP_LOG(LOG_DEBUG, "tlm_ioctl fd %d cmd %d", fd, cmd);
     1175 +        syslog(LOG_DEBUG, "tlm_ioctl fd %d cmd %d", fd, cmd);
1169 1176          if (fd == 0 || data == NULL)
1170 1177                  return (EINVAL);
1171 1178  
1172 1179          do {
1173 1180                  if (ioctl(fd, cmd, data) == 0)
1174 1181                          break;
1175 1182  
1176 1183                  if (errno != EIO && errno != 0) {
1177      -                        NDMP_LOG(LOG_ERR,
     1184 +                        syslog(LOG_ERR,
1178 1185                              "Failed to send command to device: %m.");
1179      -                        NDMP_LOG(LOG_DEBUG, "IOCTL error %d", errno);
     1186 +                        syslog(LOG_DEBUG, "IOCTL error %d", errno);
1180 1187                          return (errno);
1181 1188                  }
1182 1189                  (void) sleep(1);
1183 1190          } while (retries++ < MAXIORETRY);
1184 1191  
1185 1192          return (0);
1186 1193  }
1187 1194  
1188 1195  /*
1189 1196   * Checkpoint or snapshot calls
↓ open down ↓ 18 lines elided ↑ open up ↑
1208 1215          p = volname;
1209 1216          while (*p == '/')
1210 1217                  p++;
1211 1218  
1212 1219          (void) strlcpy(chk_name, p, PATH_MAX);
1213 1220          (void) strlcat(chk_name, "@", PATH_MAX);
1214 1221          (void) strlcat(chk_name, pattern, PATH_MAX);
1215 1222  
1216 1223          (void) mutex_lock(&zlib_mtx);
1217 1224          if ((zhp = zfs_open(zlibh, chk_name, ZFS_TYPE_DATASET)) == NULL) {
1218      -                NDMP_LOG(LOG_DEBUG, "chkpnt_creationtime: open %s failed",
     1225 +                syslog(LOG_DEBUG, "chkpnt_creationtime: open %s failed",
1219 1226                      chk_name);
1220 1227                  (void) mutex_unlock(&zlib_mtx);
1221 1228                  return (-1);
1222 1229          }
1223 1230  
1224 1231          *tp = zfs_prop_get_int(zhp, ZFS_PROP_CREATION);
1225 1232          zfs_close(zhp);
1226 1233          (void) mutex_unlock(&zlib_mtx);
1227 1234  
1228 1235          return (0);
↓ open down ↓ 2 lines elided ↑ open up ↑
1231 1238  
1232 1239  /*
1233 1240   * Get the ZFS volume name out of the given path
1234 1241   */
1235 1242  int
1236 1243  get_zfsvolname(char *volname, int len, char *path)
1237 1244  {
1238 1245          struct stat64 stbuf;
1239 1246          struct extmnttab ent;
1240 1247          FILE *mntfp;
1241      -        int rv;
     1248 +        int rv = 0;
1242 1249  
1243 1250          *volname = '\0';
1244 1251          if (stat64(path, &stbuf) != 0) {
     1252 +                syslog(LOG_DEBUG, "stat64 failed open %s - %s",
     1253 +                    volname, path);
1245 1254                  return (-1);
1246 1255          }
1247 1256  
1248 1257          if ((mntfp = fopen(MNTTAB, "r")) == NULL) {
     1258 +                syslog(LOG_DEBUG, "failed open mnttab");
1249 1259                  return (-1);
1250 1260          }
1251 1261          while ((rv = getextmntent(mntfp, &ent, 0)) == 0) {
1252 1262                  if (makedevice(ent.mnt_major, ent.mnt_minor) ==
1253 1263                      stbuf.st_dev)
1254 1264                          break;
1255 1265          }
1256 1266  
1257 1267          if (rv == 0 &&
1258      -            strcmp(ent.mnt_fstype, MNTTYPE_ZFS) == 0)
     1268 +            strcmp(ent.mnt_fstype, MNTTYPE_ZFS) == 0) {
1259 1269                  (void) strlcpy(volname, ent.mnt_special, len);
1260      -        else
     1270 +        } else {
1261 1271                  rv = -1;
1262      -
     1272 +        }
1263 1273          (void) fclose(mntfp);
1264 1274          return (rv);
1265 1275  }
1266 1276  
1267 1277  
1268 1278  /*
1269 1279   * Check if the volume type is snapshot volume
1270 1280   */
1271 1281  boolean_t
1272 1282  fs_is_chkpntvol(char *path)
↓ open down ↓ 84 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX