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

Split Close
Expand all
Collapse all
          --- old/usr/src/cmd/ndmpd/ndmp/ndmpd_tar3.c
          +++ new/usr/src/cmd/ndmpd/ndmp/ndmpd_tar3.c
↓ open down ↓ 29 lines elided ↑ open up ↑
  30   30   * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  31   31   * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  32   32   * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  33   33   * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  34   34   * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  35   35   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  36   36   * POSSIBILITY OF SUCH DAMAGE.
  37   37   */
  38   38  /* Copyright (c) 2007, The Storage Networking Industry Association. */
  39   39  /* Copyright (c) 1996, 1997 PDC, Network Appliance. All Rights Reserved */
  40      -/* Copyright 2014 Nexenta Systems, Inc. All rights reserved. */
       40 +/* Copyright 2017 Nexenta Systems, Inc. All rights reserved. */
  41   41  
  42   42  #include <sys/stat.h>
  43   43  #include <sys/types.h>
  44   44  #include <sys/time.h>
       45 +#include <syslog.h>
  45   46  #include <ctype.h>
  46   47  #include <sys/socket.h>
  47   48  #include <sys/acl.h>
  48   49  #include <netinet/in.h>
  49   50  #include <arpa/inet.h>
  50   51  #include <errno.h>
  51   52  #include <stdio.h>
  52   53  #include <string.h>
  53   54  #include <time.h>
  54   55  #include <cstack.h>
↓ open down ↓ 52 lines elided ↑ open up ↑
 107  108  /*
 108  109   * Plug-in module ops
 109  110   */
 110  111  ndmp_plugin_t *ndmp_pl;
 111  112  
 112  113  /*
 113  114   * NDMP exclusion list
 114  115   */
 115  116  char **ndmp_excl_list = NULL;
 116  117  
      118 +extern boolean_t fs_is_checkpointed(ndmp_lbr_params_t *);
      119 +
 117  120  /*
 118  121   * split_env
 119  122   *
 120  123   * Splits the string into list of sections separated by the
 121  124   * sep character.
 122  125   *
 123  126   * Parameters:
 124  127   *   envp (input) - the environment variable that should be broken
 125  128   *   sep (input) - the separator character
 126  129   *
↓ open down ↓ 102 lines elided ↑ open up ↑
 229  232   * Parameters:
 230  233   *   lpp (input) - pointer to the array of strings
 231  234   *
 232  235   * Returns:
 233  236   *   void
 234  237   */
 235  238  static void
 236  239  prl(char **lpp)
 237  240  {
 238  241          if (!lpp) {
 239      -                NDMP_LOG(LOG_DEBUG, "empty");
      242 +                syslog(LOG_DEBUG, "empty");
 240  243                  return;
 241  244          }
 242  245  
 243  246          while (*lpp)
 244      -                NDMP_LOG(LOG_DEBUG, "\"%s\"", *lpp++);
      247 +                syslog(LOG_DEBUG, "\"%s\"", *lpp++);
 245  248  }
 246  249  
 247  250  
 248  251  /*
 249  252   * inlist
 250  253   *
 251  254   * Looks through all the strings of the array to see if the ent
 252  255   * matches any of the strings.  The strings are patterns.
 253  256   *
 254  257   * Parameters:
↓ open down ↓ 1 lines elided ↑ open up ↑
 256  259   *   ent (input) - the entry to be matched
 257  260   *
 258  261   * Returns:
 259  262   *   TRUE: if there is a match
 260  263   *   FALSE: invalid argument or no match
 261  264   */
 262  265  static boolean_t
 263  266  inlist(char **lpp, char *ent)
 264  267  {
 265  268          if (!lpp || !ent) {
 266      -                NDMP_LOG(LOG_DEBUG, "empty list");
      269 +                syslog(LOG_DEBUG, "empty list");
 267  270                  return (FALSE);
 268  271          }
 269  272  
 270  273          while (*lpp) {
 271  274                  /*
 272  275                   * Fixing the sync_sort NDMPV3 problem, it sends the inclusion
 273  276                   * like "./" which we should skip the "./"
 274  277                   */
 275  278                  char *pattern = *lpp;
 276  279                  if (strncmp(pattern, "./", 2) == 0)
 277  280                          pattern += 2;
 278  281  
 279      -                NDMP_LOG(LOG_DEBUG, "pattern %s, ent %s", pattern, ent);
      282 +                syslog(LOG_DEBUG, "pattern %s, ent %s", pattern, ent);
 280  283  
 281  284                  if (match(pattern, ent)) {
 282      -                        NDMP_LOG(LOG_DEBUG, "match(%s,%s)", pattern, ent);
      285 +                        syslog(LOG_DEBUG, "match(%s,%s)", pattern, ent);
 283  286                          return (TRUE);
 284  287                  }
 285  288                  lpp++;
 286  289          }
 287  290  
 288      -        NDMP_LOG(LOG_DEBUG, "no match");
      291 +        syslog(LOG_DEBUG, "no match");
 289  292          return (FALSE);
 290  293  }
 291  294  
 292  295  
 293  296  /*
 294  297   * inexl
 295  298   *
 296  299   * Checks if the entry is in the list.  This is used for exclusion
 297  300   * list.  If the exclusion list is empty, FALSE should be returned
 298  301   * showing that nothing should be excluded by default.
↓ open down ↓ 105 lines elided ↑ open up ↑
 404  407  
 405  408                  /*
 406  409                   * Check for clients that send original path as "."(like
 407  410                   * CA products). In this situation opath is something like
 408  411                   * "/v1/." and we should change it to "/v1/"
 409  412                   */
 410  413                  len = strlen(ep->nm3_opath);
 411  414                  if (len > 1 && ep->nm3_opath[len-2] == '/' &&
 412  415                      ep->nm3_opath[len-1] == '.') {
 413  416                          ep->nm3_opath[len-1] = '\0';
 414      -                        NDMP_LOG(LOG_DEBUG,
      417 +                        syslog(LOG_DEBUG,
 415  418                              "nm3_opath changed from %s. to %s",
 416  419                              ep->nm3_opath, ep->nm3_opath);
 417  420                  }
 418  421                  *lpp++ = ep->nm3_opath;
 419  422          }
 420  423  
 421  424          /* list termination indicator is a null pointer */
 422  425          *lpp = NULL;
 423  426  
 424  427          return (save);
↓ open down ↓ 54 lines elided ↑ open up ↑
 479  482                                  return (NULL);
 480  483                  }
 481  484          }
 482  485  
 483  486          if (np)
 484  487                  np += strspn(np, "/");
 485  488          else
 486  489                  np = "";
 487  490  
 488  491          if (!tlm_cat_path(bp, np, pp)) {
 489      -                NDMP_LOG(LOG_ERR, "Restore path too long %s/%s.", np, pp);
      492 +                syslog(LOG_ERR, "Restore path too long %s/%s.", np, pp);
 490  493                  return (NULL);
 491  494          }
 492  495  
 493  496          return (bp);
 494  497  }
 495  498  
 496  499  
 497  500  /*
 498  501   * mknewname
 499  502   *
↓ open down ↓ 6 lines elided ↑ open up ↑
 506  509   */
 507  510  char *
 508  511  mknewname(struct rs_name_maker *rnp, char *buf, int idx, char *path)
 509  512  {
 510  513          char *rv;
 511  514          ndmp_lbr_params_t *nlp;
 512  515          mem_ndmp_name_v3_t *ep;
 513  516  
 514  517          rv = NULL;
 515  518          if (!buf) {
 516      -                NDMP_LOG(LOG_DEBUG, "buf is NULL");
      519 +                syslog(LOG_DEBUG, "buf is NULL");
 517  520          } else if (!path) {
 518      -                NDMP_LOG(LOG_DEBUG, "path is NULL");
      521 +                syslog(LOG_DEBUG, "path is NULL");
 519  522          } else if ((nlp = rnp->rn_nlp) == 0) {
 520      -                NDMP_LOG(LOG_DEBUG, "rnp->rn_nlp is NULL");
      523 +                syslog(LOG_DEBUG, "rnp->rn_nlp is NULL");
 521  524          } else if (!nlp->nlp_params) {
 522      -                NDMP_LOG(LOG_DEBUG, "nlp->nlp_params is NULL");
      525 +                syslog(LOG_DEBUG, "nlp->nlp_params is NULL");
 523  526          } else
 524  527                  if (!ndmp_full_restore_path) {
 525  528                          if (idx < 0 || idx >= (int)nlp->nlp_nfiles) {
 526      -                                NDMP_LOG(LOG_DEBUG,
      529 +                                syslog(LOG_DEBUG,
 527  530                                      "Invalid idx %d range (0, %d)",
 528  531                                      idx, nlp->nlp_nfiles);
 529  532                          } else if (!(ep = (mem_ndmp_name_v3_t *)MOD_GETNAME(
 530  533                              nlp->nlp_params, idx))) {
 531      -                                NDMP_LOG(LOG_DEBUG,
      534 +                                syslog(LOG_DEBUG,
 532  535                                      "nlist entry %d is NULL", idx);
 533  536                          } else {
 534  537                                  rv = mkrsp(buf, path, ep->nm3_opath,
 535  538                                      ep->nm3_dpath);
 536      -
 537      -                                NDMP_LOG(LOG_DEBUG,
 538      -                                    "idx %d org \"%s\" dst \"%s\"",
 539      -                                    idx, ep->nm3_opath, ep->nm3_dpath);
 540      -                                if (rv) {
 541      -                                        NDMP_LOG(LOG_DEBUG,
 542      -                                            "path \"%s\": \"%s\"", path, rv);
 543      -                                } else {
 544      -                                        NDMP_LOG(LOG_DEBUG,
 545      -                                            "path \"%s\": NULL", path);
 546      -                                }
 547  539                          }
 548  540                  } else {
 549  541                          if (!tlm_cat_path(buf, nlp->nlp_restore_path, path)) {
 550      -                                NDMP_LOG(LOG_ERR, "Path too long %s/%s.",
      542 +                                syslog(LOG_ERR, "Path too long %s/%s.",
 551  543                                      nlp->nlp_restore_path, path);
 552  544                                  rv = NULL;
 553  545                          } else {
 554  546                                  rv = buf;
 555      -                                NDMP_LOG(LOG_DEBUG,
 556      -                                    "path \"%s\": \"%s\"", path, rv);
 557  547                          }
 558  548                  }
 559  549  
 560  550          return (rv);
 561  551  }
 562  552  
 563  553  
 564  554  /*
 565  555   * chopslash
 566  556   *
↓ open down ↓ 47 lines elided ↑ open up ↑
 614  604   */
 615  605  static int
 616  606  voliswr(char *path)
 617  607  {
 618  608          int rv;
 619  609  
 620  610          if (!path)
 621  611                  return (0);
 622  612  
 623  613          rv = !fs_is_rdonly(path) && !fs_is_chkpntvol(path);
 624      -        NDMP_LOG(LOG_DEBUG, "%d path \"%s\"", rv, path);
      614 +        syslog(LOG_DEBUG, "%d path \"%s\"", rv, path);
 625  615          return (rv);
 626  616  
 627  617  }
 628  618  
 629  619  
 630  620  /*
 631  621   * is_valid_backup_dir_v3
 632  622   *
 633  623   * Checks the validity of the backup path.  Backup path should
 634  624   * have the following characteristics to be valid:
↓ open down ↓ 148 lines elided ↑ open up ↑
 783  773   *   nlp (input) - pointer to the nlp structure
 784  774   *
 785  775   * Returns:
 786  776   *   void
 787  777   */
 788  778  static void
 789  779  log_bk_params_v3(ndmpd_session_t *session, ndmpd_module_params_t *params,
 790  780      ndmp_lbr_params_t *nlp)
 791  781  {
 792  782          MOD_LOGV3(params, NDMP_LOG_NORMAL, "Backing up \"%s\".\n",
 793      -            nlp->nlp_backup_path);
      783 +            NLP_ISCHKPNTED(nlp) ? nlp->nlp_mountpoint : nlp->nlp_backup_path);
 794  784  
 795  785          if (session->ns_mover.md_data_addr.addr_type == NDMP_ADDR_LOCAL)
 796  786                  MOD_LOGV3(params, NDMP_LOG_NORMAL,
 797  787                      "Tape record size: %d.\n",
 798  788                      session->ns_mover.md_record_size);
 799  789  
 800  790          MOD_LOGV3(params, NDMP_LOG_NORMAL, "File history: %c.\n",
 801  791              NDMP_YORN(NLP_ISSET(nlp, NLPF_FH)));
 802  792  
 803  793          if (NLP_ISSET(nlp, NLPF_TOKENBK))
↓ open down ↓ 25 lines elided ↑ open up ↑
 829  819   *   void
 830  820   */
 831  821  static void
 832  822  get_update_env_v3(ndmpd_module_params_t *params, ndmp_lbr_params_t *nlp)
 833  823  {
 834  824          char *envp;
 835  825  
 836  826          envp = MOD_GETENV(params, "UPDATE");
 837  827          if (!envp) {
 838  828                  NLP_SET(nlp, NLPF_UPDATE);
 839      -                NDMP_LOG(LOG_DEBUG,
      829 +                syslog(LOG_DEBUG,
 840  830                      "env(UPDATE) not defined, default to TRUE");
 841  831          } else {
 842      -                NDMP_LOG(LOG_DEBUG, "env(UPDATE): \"%s\"", envp);
      832 +                syslog(LOG_DEBUG, "env(UPDATE): \"%s\"", envp);
 843  833                  if (IS_YORT(*envp))
 844  834                          NLP_SET(nlp, NLPF_UPDATE);
 845  835                  else
 846  836                          NLP_UNSET(nlp, NLPF_UPDATE);
 847  837          }
 848  838  }
 849  839  
 850  840  
 851  841  /*
 852  842   * get_hist_env_v3
↓ open down ↓ 9 lines elided ↑ open up ↑
 862  852   * Returns:
 863  853   *   void
 864  854   */
 865  855  static void
 866  856  get_hist_env_v3(ndmpd_module_params_t *params, ndmp_lbr_params_t *nlp)
 867  857  {
 868  858          char *envp;
 869  859  
 870  860          envp = MOD_GETENV(params, "HIST");
 871  861          if (!envp) {
 872      -                NDMP_LOG(LOG_DEBUG, "env(HIST) not defined");
      862 +                syslog(LOG_DEBUG, "env(HIST) not defined");
 873  863                  NLP_UNSET(nlp, NLPF_FH);
 874  864          } else {
 875      -                NDMP_LOG(LOG_DEBUG, "env(HIST): \"%s\"", envp);
      865 +                syslog(LOG_DEBUG, "env(HIST): \"%s\"", envp);
 876  866                  if (IS_YORT(*envp) || IS_F(*envp))
 877  867                          NLP_SET(nlp, NLPF_FH);
 878  868                  else
 879  869                          NLP_UNSET(nlp, NLPF_FH);
 880  870  
 881  871                  /* Force file format if specified */
 882  872                  if (IS_F(*envp)) {
 883  873                          params->mp_file_history_path_func =
 884  874                              ndmpd_api_file_history_file_v3;
 885  875                          params->mp_file_history_dir_func = 0;
↓ open down ↓ 17 lines elided ↑ open up ↑
 903  893   * Returns:
 904  894   *   void
 905  895   */
 906  896  static void
 907  897  get_exc_env_v3(ndmpd_module_params_t *params, ndmp_lbr_params_t *nlp)
 908  898  {
 909  899          char *envp;
 910  900  
 911  901          envp = MOD_GETENV(params, "EXCLUDE");
 912  902          if (!envp) {
 913      -                NDMP_LOG(LOG_DEBUG, "env(EXCLUDE) not defined");
      903 +                syslog(LOG_DEBUG, "env(EXCLUDE) not defined");
 914  904                  nlp->nlp_exl = NULL;
 915  905          } else {
 916      -                NDMP_LOG(LOG_DEBUG, "env(EXCLUDE): \"%s\"", envp);
      906 +                syslog(LOG_DEBUG, "env(EXCLUDE): \"%s\"", envp);
 917  907                  nlp->nlp_exl = split_env(envp, ',');
 918  908                  prl(nlp->nlp_exl);
 919  909          }
 920  910  }
 921  911  
 922  912  
 923  913  /*
 924  914   * get_inc_env_v3
 925  915   *
 926  916   * Gets the FILES environment variable that shows which files
↓ open down ↓ 8 lines elided ↑ open up ↑
 935  925   * Returns:
 936  926   *   void
 937  927   */
 938  928  static void
 939  929  get_inc_env_v3(ndmpd_module_params_t *params, ndmp_lbr_params_t *nlp)
 940  930  {
 941  931          char *envp;
 942  932  
 943  933          envp = MOD_GETENV(params, "FILES");
 944  934          if (!envp) {
 945      -                NDMP_LOG(LOG_DEBUG, "env(FILES) not defined");
      935 +                syslog(LOG_DEBUG, "env(FILES) not defined");
 946  936                  nlp->nlp_inc = NULL;
 947  937          } else {
 948      -                NDMP_LOG(LOG_DEBUG, "env(FILES): \"%s\"", envp);
      938 +                syslog(LOG_DEBUG, "env(FILES): \"%s\"", envp);
 949  939                  nlp->nlp_inc = split_env(envp, ' ');
 950  940                  prl(nlp->nlp_inc);
 951  941          }
 952  942  }
 953  943  
 954  944  
 955  945  /*
 956  946   * get_direct_env_v3
 957  947   *
 958  948   * Gets the DIRECT environment variable that shows if the fh_info should
↓ open down ↓ 11 lines elided ↑ open up ↑
 970  960  {
 971  961          char *envp;
 972  962  
 973  963          /*
 974  964           * We should send the fh_info to the DMA, unless it is specified
 975  965           * in the request that we should not send fh_info.
 976  966           * At the moment we do not support DAR on directories, so if the user
 977  967           * needs to restore a directory they should disable the DAR.
 978  968           */
 979  969          if (params->mp_operation == NDMP_DATA_OP_RECOVER && !ndmp_dar_support) {
 980      -                NDMP_LOG(LOG_DEBUG, "Direct Access Restore Disabled");
      970 +                syslog(LOG_INFO, "Direct Access Restore Disabled");
 981  971                  NLP_UNSET(nlp, NLPF_DIRECT);
 982  972                  MOD_LOGV3(params, NDMP_LOG_NORMAL,
 983  973                      "DAR is disabled. Running Restore without DAR");
 984  974                  return;
 985  975          }
 986  976  
 987  977          /*
 988  978           * Regardless of whether DIRECT is defined at backup time we send
 989  979           * back the fh_info, for some clients do not use get_backup_attrs.
 990  980           * If operation is restore we have to unset the DIRECT, for
 991  981           * some clients do not set the MOVER window.
 992  982           */
 993  983          if (params->mp_operation == NDMP_DATA_OP_BACKUP) {
 994      -                NDMP_LOG(LOG_DEBUG, "backup default env(DIRECT): YES");
      984 +                syslog(LOG_DEBUG, "backup default env(DIRECT): YES");
 995  985                  NLP_SET(nlp, NLPF_DIRECT);
 996  986          } else {
 997  987  
 998  988                  envp = MOD_GETENV(params, "DIRECT");
 999  989                  if (!envp) {
1000      -                        NDMP_LOG(LOG_DEBUG, "env(DIRECT) not defined");
      990 +                        syslog(LOG_DEBUG, "env(DIRECT) not defined");
1001  991                          NLP_UNSET(nlp, NLPF_DIRECT);
1002  992                  } else {
1003      -                        NDMP_LOG(LOG_DEBUG, "env(DIRECT): \"%s\"", envp);
      993 +                        syslog(LOG_DEBUG, "env(DIRECT): \"%s\"", envp);
1004  994                          if (IS_YORT(*envp)) {
1005  995                                  NLP_SET(nlp, NLPF_DIRECT);
1006      -                                NDMP_LOG(LOG_DEBUG,
      996 +                                syslog(LOG_DEBUG,
1007  997                                      "Direct Access Restore Enabled");
1008  998                          } else {
1009  999                                  NLP_UNSET(nlp, NLPF_DIRECT);
1010      -                                NDMP_LOG(LOG_DEBUG,
     1000 +                                syslog(LOG_DEBUG,
1011 1001                                      "Direct Access Restore Disabled");
1012 1002                          }
1013 1003                  }
1014 1004          }
1015 1005  
1016 1006          if (NLP_ISSET(nlp, NLPF_DIRECT)) {
1017 1007                  if (params->mp_operation == NDMP_DATA_OP_BACKUP)
1018 1008                          MOD_LOGV3(params, NDMP_LOG_NORMAL,
1019 1009                              "Direct Access Restore information is supported");
1020 1010                  else
↓ open down ↓ 59 lines elided ↑ open up ↑
1080 1070          tok = strtoll(basedate, &endp, 10);
1081 1071          if (endp == basedate) {
1082 1072                  MOD_LOGV3(params, NDMP_LOG_ERROR,
1083 1073                      "Invalid BASE_DATE environment variable: \"%s\".\n",
1084 1074                      basedate);
1085 1075                  return (NDMP_ILLEGAL_ARGS_ERR);
1086 1076          }
1087 1077  
1088 1078          tstamp = tok & 0xffffffff;
1089 1079          seq = (tok >> 32) & 0xffffffff;
1090      -        NDMP_LOG(LOG_DEBUG, "basedate \"%s\" %lld seq %u tstamp %u",
1091      -            basedate, tok, seq, tstamp);
1092 1080  
1093 1081          if ((int)seq > ndmp_get_max_tok_seq()) {
1094 1082                  rv = NDMP_ILLEGAL_ARGS_ERR;
1095 1083                  MOD_LOGV3(params, NDMP_LOG_ERROR,
1096 1084                      "The sequence counter of the token exceeds the "
1097 1085                      "maximum permitted value.\n");
1098 1086                  MOD_LOGCONTV3(params, NDMP_LOG_ERROR,
1099 1087                      "Token sequence: %u, maxiumum value: %u.\n",
1100 1088                      seq, ndmp_get_max_tok_seq());
1101 1089          } else if (seq >= NDMP_TOKSEQ_HLIMIT) {
↓ open down ↓ 119 lines elided ↑ open up ↑
1221 1209           * LEVEL environment variable can hold only one character.
1222 1210           * If its length is longer than 1, an error is returned.
1223 1211           */
1224 1212          envp = MOD_GETENV(params, "BASE_DATE");
1225 1213          if (envp)
1226 1214                  return (get_date_token_v3(params, nlp, envp));
1227 1215  
1228 1216  
1229 1217          envp = MOD_GETENV(params, "LEVEL");
1230 1218          if (!envp) {
1231      -                NDMP_LOG(LOG_DEBUG, "env(LEVEL) not defined, default to 0");
     1219 +                syslog(LOG_DEBUG, "env(LEVEL) not defined, default to 0");
1232 1220                  NLP_SET(nlp, NLPF_LEVELBK);
1233 1221                  NLP_UNSET(nlp, NLPF_LBRBK);
1234 1222                  NLP_UNSET(nlp, NLPF_TOKENBK);
1235 1223                  nlp->nlp_llevel = 0;
1236 1224                  nlp->nlp_ldate = 0;
1237 1225                  nlp->nlp_clevel = 0;
1238 1226                  /*
1239 1227                   * The value of nlp_cdate will be set to the checkpoint
1240 1228                   * creation time after it is created.
1241 1229                   */
↓ open down ↓ 61 lines elided ↑ open up ↑
1303 1291          char val[QUAD_DECIMAL_LEN];
1304 1292          u_longlong_t tok;
1305 1293  
1306 1294          if (!params || !nlp)
1307 1295                  return;
1308 1296  
1309 1297          nlp->nlp_tokseq++;
1310 1298          tok = ((u_longlong_t)nlp->nlp_tokseq << 32) | nlp->nlp_cdate;
1311 1299          (void) snprintf(val, sizeof (val), "%llu", tok);
1312 1300  
1313      -        NDMP_LOG(LOG_DEBUG, "tok: %lld %s", tok, val);
1314      -
1315 1301          if (MOD_SETENV(params, "DUMP_DATE", val) != 0) {
1316 1302                  MOD_LOGV3(params, NDMP_LOG_ERROR,
1317 1303                      "Could not set DUMP_DATE to %s", val);
1318 1304          } else if (!nlp->nlp_dmpnm) {
1319      -                NDMP_LOG(LOG_DEBUG, "No log file defined");
     1305 +                syslog(LOG_DEBUG, "No log file defined");
1320 1306          } else if (ndmpd_append_dumptime(nlp->nlp_dmpnm, nlp->nlp_backup_path,
1321 1307              nlp->nlp_tokseq, nlp->nlp_tokdate) < 0) {
1322 1308                  MOD_LOGV3(params, NDMP_LOG_ERROR,
1323 1309                      "Saving backup date for \"%s\" in \"%s\".\n",
1324 1310                      nlp->nlp_backup_path, nlp->nlp_dmpnm);
1325 1311          }
1326 1312  }
1327 1313  
1328 1314  
1329 1315  /*
↓ open down ↓ 9 lines elided ↑ open up ↑
1339 1325   * Returns:
1340 1326   *   void
1341 1327   */
1342 1328  static void
1343 1329  save_lbr_bk_v3(ndmpd_module_params_t *params, ndmp_lbr_params_t *nlp)
1344 1330  {
1345 1331          if (!params || !nlp)
1346 1332                  return;
1347 1333  
1348 1334          if (!nlp->nlp_dmpnm) {
1349      -                NDMP_LOG(LOG_DEBUG, "No log file defined");
     1335 +                syslog(LOG_DEBUG, "No log file defined");
1350 1336          } else if (ndmpd_append_dumptime(nlp->nlp_dmpnm, nlp->nlp_backup_path,
1351 1337              nlp->nlp_clevel, nlp->nlp_cdate) < 0) {
1352 1338                  MOD_LOGV3(params, NDMP_LOG_ERROR,
1353 1339                      "Saving backup date for \"%s\" in \"%s\".\n",
1354 1340                      nlp->nlp_backup_path, nlp->nlp_dmpnm);
1355 1341          }
1356 1342  }
1357 1343  
1358 1344  
1359 1345  /*
↓ open down ↓ 9 lines elided ↑ open up ↑
1369 1355   * Returns:
1370 1356   *   void
1371 1357   */
1372 1358  static void
1373 1359  save_level_v3(ndmpd_module_params_t *params, ndmp_lbr_params_t *nlp)
1374 1360  {
1375 1361          if (!params || !nlp)
1376 1362                  return;
1377 1363  
1378 1364          if (!NLP_SHOULD_UPDATE(nlp)) {
1379      -                NDMP_LOG(LOG_DEBUG, "update not requested");
     1365 +                syslog(LOG_DEBUG, "update not requested");
1380 1366          } else if (ndmpd_put_dumptime(nlp->nlp_backup_path, nlp->nlp_clevel,
1381 1367              nlp->nlp_cdate) < 0) {
1382 1368                  MOD_LOGV3(params, NDMP_LOG_ERROR, "Logging backup date.\n");
1383 1369          }
1384 1370  }
1385 1371  
1386 1372  
1387 1373  /*
1388 1374   * save_backup_date_v3
1389 1375   *
↓ open down ↓ 30 lines elided ↑ open up ↑
1420 1406  /*
1421 1407   * backup_alloc_structs_v3
1422 1408   *
1423 1409   * Create the structures for V3 backup.  This includes:
1424 1410   *      Job stats
1425 1411   *      Reader writer IPC
1426 1412   *      File history callback structure
1427 1413   *
1428 1414   * Parameters:
1429 1415   *   session (input) - pointer to the session
1430      - *   jname (input) - name assigned to the current backup for
1431      - *      job stats strucure
1432 1416   *
1433 1417   * Returns:
1434 1418   *   0: on success
1435 1419   *   -1: otherwise
1436 1420   */
1437 1421  static int
1438      -backup_alloc_structs_v3(ndmpd_session_t *session, char *jname)
     1422 +backup_alloc_structs_v3(ndmpd_session_t *session)
1439 1423  {
1440 1424          int n;
1441 1425          long xfer_size;
1442 1426          ndmp_lbr_params_t *nlp;
1443 1427          tlm_commands_t *cmds;
1444 1428  
1445 1429          nlp = ndmp_get_nlp(session);
1446 1430          if (!nlp) {
1447      -                NDMP_LOG(LOG_DEBUG, "nlp == NULL");
     1431 +                syslog(LOG_ERR, "nlp == NULL");
1448 1432                  return (-1);
1449 1433          }
1450 1434  
1451      -        nlp->nlp_jstat = tlm_new_job_stats(jname);
     1435 +        nlp->nlp_jstat = tlm_new_job_stats(nlp->nlp_job_name);
1452 1436          if (!nlp->nlp_jstat) {
1453      -                NDMP_LOG(LOG_DEBUG, "Creating job stats");
     1437 +                syslog(LOG_ERR, "Creating job stats failed");
1454 1438                  return (-1);
1455 1439          }
1456 1440  
1457 1441          cmds = &nlp->nlp_cmds;
1458 1442          (void) memset(cmds, 0, sizeof (*cmds));
1459 1443  
1460 1444          xfer_size = ndmp_buffer_get_size(session);
1461 1445          if (xfer_size < 512*KILOBYTE) {
1462 1446                  /*
1463 1447                   * Read multiple of mover_record_size near to 512K.  This
1464 1448                   * will prevent the data being copied in the mover buffer
1465 1449                   * when we write the data.
1466 1450                   */
1467 1451                  n = 512 * KILOBYTE / xfer_size;
1468 1452                  if (n <= 0)
1469 1453                          n = 1;
1470 1454                  xfer_size *= n;
1471      -                NDMP_LOG(LOG_DEBUG, "Adjusted read size: %d",
     1455 +                syslog(LOG_DEBUG, "Adjusted read size: %d",
1472 1456                      xfer_size);
1473 1457          }
1474 1458  
1475 1459          cmds->tcs_command = tlm_create_reader_writer_ipc(TRUE, xfer_size);
1476 1460          if (!cmds->tcs_command) {
1477      -                tlm_un_ref_job_stats(jname);
     1461 +                tlm_un_ref_job_stats(nlp->nlp_job_name);
1478 1462                  return (-1);
1479 1463          }
1480 1464  
1481 1465          nlp->nlp_logcallbacks = lbrlog_callbacks_init(session,
1482 1466              ndmpd_fhpath_v3_cb, ndmpd_fhdir_v3_cb, ndmpd_fhnode_v3_cb);
1483 1467          if (!nlp->nlp_logcallbacks) {
1484 1468                  tlm_release_reader_writer_ipc(cmds->tcs_command);
1485      -                tlm_un_ref_job_stats(jname);
     1469 +                tlm_un_ref_job_stats(nlp->nlp_job_name);
1486 1470                  return (-1);
1487 1471          }
1488 1472          nlp->nlp_jstat->js_callbacks = (void *)(nlp->nlp_logcallbacks);
1489 1473          nlp->nlp_restored = NULL;
1490 1474  
1491 1475          return (0);
1492 1476  }
1493 1477  
1494 1478  
1495 1479  /*
1496 1480   * restore_alloc_structs_v3
1497 1481   *
1498 1482   * Create the structures for V3 Restore.  This includes:
1499 1483   *      Job stats
1500 1484   *      Reader writer IPC
1501 1485   *      File recovery callback structure
1502 1486   *
1503 1487   * Parameters:
1504 1488   *   session (input) - pointer to the session
1505      - *   jname (input) - name assigned to the current backup for
1506      - *      job stats strucure
1507 1489   *
1508 1490   * Returns:
1509 1491   *   0: on success
1510 1492   *   -1: otherwise
1511 1493   */
1512 1494  int
1513      -restore_alloc_structs_v3(ndmpd_session_t *session, char *jname)
     1495 +restore_alloc_structs_v3(ndmpd_session_t *session)
1514 1496  {
1515 1497          long xfer_size;
1516 1498          ndmp_lbr_params_t *nlp;
1517 1499          tlm_commands_t *cmds;
1518 1500  
1519 1501          nlp = ndmp_get_nlp(session);
1520 1502          if (!nlp) {
1521      -                NDMP_LOG(LOG_DEBUG, "nlp == NULL");
     1503 +                syslog(LOG_ERR, "nlp == NULL");
1522 1504                  return (-1);
1523 1505          }
1524 1506  
1525 1507          /* this is used in ndmpd_path_restored_v3() */
1526 1508          nlp->nlp_lastidx = -1;
1527 1509  
1528      -        nlp->nlp_jstat = tlm_new_job_stats(jname);
     1510 +        nlp->nlp_jstat = tlm_new_job_stats(nlp->nlp_job_name);
1529 1511          if (!nlp->nlp_jstat) {
1530      -                NDMP_LOG(LOG_DEBUG, "Creating job stats");
     1512 +                syslog(LOG_ERR, "Creating job stats failed");
1531 1513                  return (-1);
1532 1514          }
1533 1515  
1534 1516          cmds = &nlp->nlp_cmds;
1535 1517          (void) memset(cmds, 0, sizeof (*cmds));
1536 1518  
1537 1519          xfer_size = ndmp_buffer_get_size(session);
1538 1520          cmds->tcs_command = tlm_create_reader_writer_ipc(FALSE, xfer_size);
1539 1521          if (!cmds->tcs_command) {
1540      -                tlm_un_ref_job_stats(jname);
     1522 +                tlm_un_ref_job_stats(nlp->nlp_job_name);
1541 1523                  return (-1);
1542 1524          }
1543 1525  
1544 1526          nlp->nlp_logcallbacks = lbrlog_callbacks_init(session,
1545 1527              ndmpd_path_restored_v3, NULL, NULL);
1546 1528          if (!nlp->nlp_logcallbacks) {
1547 1529                  tlm_release_reader_writer_ipc(cmds->tcs_command);
1548      -                tlm_un_ref_job_stats(jname);
     1530 +                tlm_un_ref_job_stats(nlp->nlp_job_name);
1549 1531                  return (-1);
1550 1532          }
1551 1533          nlp->nlp_jstat->js_callbacks = (void *)(nlp->nlp_logcallbacks);
1552 1534  
1553 1535          nlp->nlp_rsbm = bm_alloc(nlp->nlp_nfiles, 0);
1554 1536          if (nlp->nlp_rsbm < 0) {
1555      -                NDMP_LOG(LOG_ERR, "Out of memory.");
     1537 +                syslog(LOG_ERR, "Out of memory.");
1556 1538                  lbrlog_callbacks_done(nlp->nlp_logcallbacks);
1557 1539                  tlm_release_reader_writer_ipc(cmds->tcs_command);
1558      -                tlm_un_ref_job_stats(jname);
     1540 +                tlm_un_ref_job_stats(nlp->nlp_job_name);
1559 1541                  return (-1);
1560 1542          }
1561 1543  
1562 1544          return (0);
1563 1545  }
1564 1546  
1565 1547  
1566 1548  /*
1567 1549   * free_structs_v3
1568 1550   *
1569 1551   * Release the resources allocated by backup_alloc_structs_v3
1570 1552   * function.
1571 1553   *
1572 1554   * Parameters:
1573 1555   *   session (input) - pointer to the session
1574      - *   jname (input) - name assigned to the current backup for
1575      - *      job stats strucure
1576 1556   *
1577 1557   * Returns:
1578 1558   *   void
1579 1559   */
1580      -/*ARGSUSED*/
1581 1560  static void
1582      -free_structs_v3(ndmpd_session_t *session, char *jname)
     1561 +free_structs_v3(ndmpd_session_t *session)
1583 1562  {
1584 1563          ndmp_lbr_params_t *nlp;
1585 1564          tlm_commands_t *cmds;
1586 1565  
1587 1566          nlp = ndmp_get_nlp(session);
1588 1567          if (!nlp) {
1589      -                NDMP_LOG(LOG_DEBUG, "nlp == NULL");
     1568 +                syslog(LOG_DEBUG, "nlp == NULL");
1590 1569                  return;
1591 1570          }
1592 1571          cmds = &nlp->nlp_cmds;
1593 1572          if (!cmds) {
1594      -                NDMP_LOG(LOG_DEBUG, "cmds == NULL");
     1573 +                syslog(LOG_DEBUG, "cmds == NULL");
1595 1574                  return;
1596 1575          }
1597 1576  
1598 1577          if (nlp->nlp_logcallbacks) {
1599 1578                  lbrlog_callbacks_done(nlp->nlp_logcallbacks);
1600 1579                  nlp->nlp_logcallbacks = NULL;
1601 1580          } else
1602      -                NDMP_LOG(LOG_DEBUG, "FH CALLBACKS == NULL");
     1581 +                syslog(LOG_DEBUG, "FH CALLBACKS == NULL");
1603 1582  
1604 1583          if (cmds->tcs_command) {
1605 1584                  if (cmds->tcs_command->tc_buffers != NULL)
1606 1585                          tlm_release_reader_writer_ipc(cmds->tcs_command);
1607 1586                  else
1608      -                        NDMP_LOG(LOG_DEBUG, "BUFFERS == NULL");
     1587 +                        syslog(LOG_DEBUG, "BUFFERS == NULL");
1609 1588                  cmds->tcs_command = NULL;
1610 1589          } else
1611      -                NDMP_LOG(LOG_DEBUG, "COMMAND == NULL");
     1590 +                syslog(LOG_DEBUG, "COMMAND == NULL");
1612 1591  
1613 1592          if (nlp->nlp_bkmap >= 0) {
1614 1593                  (void) dbm_free(nlp->nlp_bkmap);
1615 1594                  nlp->nlp_bkmap = -1;
1616 1595          }
1617 1596  
1618 1597          if (session->ns_data.dd_operation == NDMP_DATA_OP_RECOVER) {
1619 1598                  if (nlp->nlp_rsbm < 0) {
1620      -                        NDMP_LOG(LOG_DEBUG, "nlp_rsbm < 0 %d", nlp->nlp_rsbm);
     1599 +                        syslog(LOG_DEBUG, "nlp_rsbm < 0 %d", nlp->nlp_rsbm);
1621 1600                  } else {
1622 1601                          (void) bm_free(nlp->nlp_rsbm);
1623 1602                          nlp->nlp_rsbm = -1;
1624 1603                  }
1625 1604          }
1626 1605  }
1627 1606  
1628 1607  
1629 1608  /*
1630 1609   * backup_dirv3
↓ open down ↓ 15 lines elided ↑ open up ↑
1646 1625      fst_node_t *enp)
1647 1626  {
1648 1627          longlong_t apos, bpos;
1649 1628          acl_t *aclp = NULL;
1650 1629          char *acltp;
1651 1630          struct stat64 st;
1652 1631          char fullpath[TLM_MAX_PATH_NAME];
1653 1632          char *p;
1654 1633  
1655 1634          if (!bpp || !pnp || !enp) {
1656      -                NDMP_LOG(LOG_DEBUG, "Invalid argument");
     1635 +                syslog(LOG_ERR, "Invalid argument in backup_dirv3");
1657 1636                  return (-1);
1658 1637          }
1659 1638  
1660      -        NDMP_LOG(LOG_DEBUG, "d(%s)", bpp->bp_tmp);
1661      -
1662 1639          if (lstat64(bpp->bp_tmp, &st) != 0)
1663 1640                  return (0);
1664 1641  
1665 1642          if (acl_get(bpp->bp_tmp, ACL_NO_TRIVIAL, &aclp) != 0) {
1666      -                NDMP_LOG(LOG_DEBUG, "acl_get error errno=%d", errno);
     1643 +                syslog(LOG_DEBUG, "acl_get error errno=%d", errno);
1667 1644                  return (-1);
1668 1645          }
1669 1646          if (aclp && (acltp = acl_totext(aclp,
1670 1647              ACL_APPEND_ID | ACL_SID_FMT | ACL_COMPACT_FMT)) != NULL) {
1671 1648                  (void) strlcpy(bpp->bp_tlmacl->acl_info.attr_info,
1672 1649                      acltp, TLM_MAX_ACL_TXT);
1673 1650                  acl_free(aclp);
1674 1651                  free(acltp);
1675 1652          } else {
1676 1653                  *bpp->bp_tlmacl->acl_info.attr_info = '\0';
↓ open down ↓ 34 lines elided ↑ open up ↑
1711 1688   *
1712 1689   * Returns:
1713 1690   *   0: on success
1714 1691   *   != 0: otherwise
1715 1692   */
1716 1693  static int
1717 1694  backup_filev3(bk_param_v3_t *bpp, fst_node_t *pnp,
1718 1695      fst_node_t *enp)
1719 1696  {
1720 1697          char *ent;
1721      -        longlong_t rv;
     1698 +        int rv = -1;
1722 1699          longlong_t apos, bpos;
1723 1700          acl_t *aclp = NULL;
1724 1701          char *acltp;
1725 1702          struct stat64 st;
1726 1703          char fullpath[TLM_MAX_PATH_NAME];
1727 1704          char *p;
1728 1705  
1729 1706          if (!bpp || !pnp || !enp) {
1730      -                NDMP_LOG(LOG_DEBUG, "Invalid argument");
     1707 +                syslog(LOG_ERR, "Invalid argument in backup_filev3");
1731 1708                  return (-1);
1732 1709          }
1733 1710  
1734      -        NDMP_LOG(LOG_DEBUG, "f(%s)", bpp->bp_tmp);
1735      -
1736 1711          if (lstat64(bpp->bp_tmp, &st) != 0)
1737 1712                  return (0);
1738 1713  
1739 1714          if (!S_ISLNK(bpp->bp_tlmacl->acl_attr.st_mode)) {
1740 1715                  if (acl_get(bpp->bp_tmp, ACL_NO_TRIVIAL, &aclp) != 0) {
1741      -                        NDMP_LOG(LOG_DEBUG, "acl_get error");
     1716 +                        syslog(LOG_DEBUG, "acl_get error");
1742 1717                          return (-1);
1743 1718                  }
1744 1719  
1745 1720                  if (aclp &&
1746 1721                      (acltp = acl_totext(aclp,
1747 1722                      ACL_APPEND_ID | ACL_SID_FMT | ACL_COMPACT_FMT)) != NULL) {
1748 1723                          (void) strlcpy(bpp->bp_tlmacl->acl_info.attr_info,
1749 1724                              acltp, TLM_MAX_ACL_TXT);
1750 1725                          acl_free(aclp);
1751 1726                          free(acltp);
↓ open down ↓ 44 lines elided ↑ open up ↑
1796 1771   *   0: if everything's OK
1797 1772   *   != 0: otherwise
1798 1773   */
1799 1774  static int
1800 1775  check_bk_args(bk_param_v3_t *bpp)
1801 1776  {
1802 1777          int rv;
1803 1778  
1804 1779          if (!bpp) {
1805 1780                  rv = -1;
1806      -                NDMP_LOG(LOG_DEBUG, "Lost bpp");
     1781 +                syslog(LOG_DEBUG, "Lost bpp");
1807 1782          } else if (!bpp->bp_session) {
1808 1783                  rv = -1;
1809      -                NDMP_LOG(LOG_DEBUG, "Session is NULL");
     1784 +                syslog(LOG_DEBUG, "Session is NULL");
1810 1785          } else if (bpp->bp_session->ns_eof) {
1811 1786                  rv = -1;
1812      -                NDMP_LOG(LOG_INFO,
     1787 +                syslog(LOG_INFO,
1813 1788                      "Connection client is closed for backup \"%s\"",
1814 1789                      bpp->bp_nlp->nlp_backup_path);
1815 1790          } else if (!bpp->bp_nlp) {
1816      -                NDMP_LOG(LOG_DEBUG, "Lost nlp");
     1791 +                syslog(LOG_DEBUG, "Lost nlp");
1817 1792                  return (-1);
1818 1793          } else if (bpp->bp_session->ns_data.dd_abort) {
1819 1794                  rv = -1;
1820      -                NDMP_LOG(LOG_INFO, "Backup aborted \"%s\"",
     1795 +                syslog(LOG_INFO, "Backup aborted \"%s\"",
1821 1796                      bpp->bp_nlp->nlp_backup_path);
1822 1797          } else
1823 1798                  rv = 0;
1824 1799  
1825 1800          return (rv);
1826 1801  }
1827 1802  
1828 1803  
1829 1804  /*
1830 1805   * shouldskip
↓ open down ↓ 14 lines elided ↑ open up ↑
1845 1820   */
1846 1821  static boolean_t
1847 1822  shouldskip(bk_param_v3_t *bpp, fst_node_t *pnp,
1848 1823      fst_node_t *enp, int *errp)
1849 1824  {
1850 1825          char *ent;
1851 1826          boolean_t rv;
1852 1827          struct stat64 *estp;
1853 1828  
1854 1829          if (!bpp || !pnp || !enp || !errp) {
1855      -                NDMP_LOG(LOG_DEBUG, "Invalid argument");
     1830 +                syslog(LOG_DEBUG, "Invalid argument in shouldskip");
1856 1831                  return (TRUE);
1857 1832          }
1858 1833  
1859 1834          if (!enp->tn_path) {
1860 1835                  ent = "";
1861 1836                  estp = pnp->tn_st;
1862 1837          } else {
1863 1838                  ent = enp->tn_path;
1864 1839                  estp = enp->tn_st;
1865 1840          }
1866 1841  
1867 1842          /*
1868 1843           * When excluding or skipping entries, FST_SKIP should be
1869 1844           * returned, otherwise, 0 should be returned to
1870 1845           * get other entries in the directory of this entry.
1871 1846           */
1872 1847          if (!dbm_getone(bpp->bp_nlp->nlp_bkmap, (u_longlong_t)estp->st_ino)) {
1873 1848                  rv = TRUE;
1874 1849                  *errp = S_ISDIR(estp->st_mode) ? FST_SKIP : 0;
1875      -                NDMP_LOG(LOG_DEBUG, "Skipping %d %s/%s",
1876      -                    *errp, pnp->tn_path, ent);
1877 1850          } else if (tlm_is_excluded(pnp->tn_path, ent, bpp->bp_excls)) {
1878 1851                  rv = TRUE;
1879 1852                  *errp = S_ISDIR(estp->st_mode) ? FST_SKIP : 0;
1880      -                NDMP_LOG(LOG_DEBUG, "excl %d \"%s/%s\"",
1881      -                    *errp, pnp->tn_path, ent);
1882 1853          } else if (inexl(bpp->bp_nlp->nlp_exl, ent)) {
1883 1854                  rv = TRUE;
1884 1855                  *errp = S_ISDIR(estp->st_mode) ? FST_SKIP : 0;
1885      -                NDMP_LOG(LOG_DEBUG, "out %d \"%s/%s\"",
1886      -                    *errp, pnp->tn_path, ent);
1887 1856          } else if (!S_ISDIR(estp->st_mode) &&
1888 1857              !ininc(bpp->bp_nlp->nlp_inc, ent)) {
1889 1858                  rv = TRUE;
1890 1859                  *errp = 0;
1891      -                NDMP_LOG(LOG_DEBUG, "!in \"%s/%s\"", pnp->tn_path, ent);
1892 1860          } else
1893 1861                  rv = FALSE;
1894 1862  
1895 1863          return (rv);
1896 1864  }
1897 1865  
1898 1866  
1899 1867  /*
1900 1868   * ischngd
1901 1869   *
↓ open down ↓ 14 lines elided ↑ open up ↑
1916 1884   * time of the object is after the date specified by the
1917 1885   * bk_selector_t, the the object must be backed up.
1918 1886   */
1919 1887  static boolean_t
1920 1888  ischngd(struct stat64 *stp, time_t t, ndmp_lbr_params_t *nlp)
1921 1889  {
1922 1890          boolean_t rv;
1923 1891  
1924 1892          if (!stp) {
1925 1893                  rv = FALSE;
1926      -                NDMP_LOG(LOG_DEBUG, "stp is NULL");
     1894 +                syslog(LOG_DEBUG, "stp is NULL");
1927 1895          } else if (!nlp) {
1928 1896                  rv = FALSE;
1929      -                NDMP_LOG(LOG_DEBUG, "nlp is NULL");
     1897 +                syslog(LOG_DEBUG, "nlp is NULL");
1930 1898          } else if (t == 0) {
1931 1899                  /*
1932 1900                   * if we are doing base backup then we do not need to
1933 1901                   * check the time, for we should backup everything.
1934 1902                   */
1935 1903                  rv = TRUE;
1936      -                NDMP_LOG(LOG_DEBUG, "Base Backup");
1937 1904          } else if (S_ISDIR(stp->st_mode) && ndmp_force_bk_dirs) {
1938 1905                  rv = TRUE;
1939      -                NDMP_LOG(LOG_DEBUG, "d(%lu)", (uint_t)stp->st_ino);
1940 1906          } else if (S_ISDIR(stp->st_mode) &&
1941 1907              dbm_getone(nlp->nlp_bkmap, (u_longlong_t)stp->st_ino) &&
1942 1908              ((NLP_ISDUMP(nlp) && ndmp_dump_path_node) ||
1943 1909              (NLP_ISTAR(nlp) && ndmp_tar_path_node))) {
1944 1910                  /*
1945 1911                   * If the object is a directory and it leads to a modified
1946 1912                   * object (that should be backed up) and for that type of
1947 1913                   * backup the path nodes should be backed up, then return
1948 1914                   * TRUE.
1949 1915                   *
1950 1916                   * This is required by some DMAs like Backup Express, which
1951 1917                   * needs to receive ADD_NODE (for dump) or ADD_PATH (for tar)
1952 1918                   * for the intermediate directories of a modified object.
1953 1919                   * Other DMAs, like net_backup and net_worker, do not have such
1954 1920                   * requirement.  This requirement makes sense for dump format
1955 1921                   * but for 'tar' format, it does not.  In provision to the
1956 1922                   * NDMP-v4 spec, for 'tar' format the intermediate directories
1957 1923                   * need not to be reported.
1958 1924                   */
1959 1925                  rv = TRUE;
1960      -                NDMP_LOG(LOG_DEBUG, "p(%lu)", (u_longlong_t)stp->st_ino);
1961 1926          } else if (stp->st_mtime > t) {
1962 1927                  rv = TRUE;
1963      -                NDMP_LOG(LOG_DEBUG, "m(%lu): %lu > %lu",
1964      -                    (uint_t)stp->st_ino, (uint_t)stp->st_mtime, (uint_t)t);
1965 1928          } else if (stp->st_ctime > t) {
1966 1929                  if (NLP_IGNCTIME(nlp)) {
1967 1930                          rv = FALSE;
1968      -                        NDMP_LOG(LOG_DEBUG, "ign c(%lu): %lu > %lu",
     1931 +                        syslog(LOG_DEBUG, "ign c(%lu): %lu > %lu",
1969 1932                              (uint_t)stp->st_ino, (uint_t)stp->st_ctime,
1970 1933                              (uint_t)t);
1971 1934                  } else {
1972 1935                          rv = TRUE;
1973      -                        NDMP_LOG(LOG_DEBUG, "c(%lu): %lu > %lu",
     1936 +                        syslog(LOG_DEBUG, "c(%lu): %lu > %lu",
1974 1937                              (uint_t)stp->st_ino, (uint_t)stp->st_ctime,
1975 1938                              (uint_t)t);
1976 1939                  }
1977 1940          } else {
1978 1941                  rv = FALSE;
1979      -                NDMP_LOG(LOG_DEBUG, "mc(%lu): (%lu,%lu) < %lu",
     1942 +                syslog(LOG_DEBUG, "mc(%lu): (%lu,%lu) < %lu",
1980 1943                      (uint_t)stp->st_ino, (uint_t)stp->st_mtime,
1981 1944                      (uint_t)stp->st_ctime, (uint_t)t);
1982 1945          }
1983 1946  
1984 1947          return (rv);
1985 1948  }
1986 1949  
1987 1950  
1988 1951  /*
1989 1952   * iscreated
↓ open down ↓ 3 lines elided ↑ open up ↑
1993 1956   * or not. See option "inc.lmtime" for more details
1994 1957   */
1995 1958  /*ARGSUSED*/
1996 1959  int iscreated(ndmp_lbr_params_t *nlp, char *name, tlm_acls_t *tacl,
1997 1960      time_t t)
1998 1961  {
1999 1962          int ret;
2000 1963          acl_t *aclp = NULL;
2001 1964          char *acltp;
2002 1965  
2003      -        NDMP_LOG(LOG_DEBUG, "flags %x", nlp->nlp_flags);
     1966 +        syslog(LOG_DEBUG, "flags %x", nlp->nlp_flags);
2004 1967          if (NLP_INCLMTIME(nlp) == FALSE)
2005 1968                  return (0);
2006 1969  
2007 1970          ret = acl_get(name, ACL_NO_TRIVIAL, &aclp);
2008 1971          if (ret != 0) {
2009      -                NDMP_LOG(LOG_DEBUG,
     1972 +                syslog(LOG_DEBUG,
2010 1973                      "Error getting the acl information: err %d", ret);
2011 1974                  return (0);
2012 1975          }
2013 1976          if (aclp && (acltp = acl_totext(aclp,
2014 1977              ACL_APPEND_ID | ACL_SID_FMT | ACL_COMPACT_FMT)) != NULL) {
2015 1978                  (void) strlcpy(tacl->acl_info.attr_info, acltp,
2016 1979                      TLM_MAX_ACL_TXT);
2017 1980                  acl_free(aclp);
2018 1981                  free(acltp);
2019 1982          }
↓ open down ↓ 65 lines elided ↑ open up ↑
2085 2048                  stp = enp->tn_st;
2086 2049                  fhp = enp->tn_fh;
2087 2050          } else {
2088 2051                  ent = "";
2089 2052                  stp = pnp->tn_st;
2090 2053                  fhp = pnp->tn_fh;
2091 2054          }
2092 2055  
2093 2056  
2094 2057          if (!tlm_cat_path(bpp->bp_tmp, pnp->tn_path, ent)) {
2095      -                NDMP_LOG(LOG_ERR, "Path too long %s/%s.", pnp->tn_path, ent);
     2058 +                syslog(LOG_ERR, "Path too long %s/%s.", pnp->tn_path, ent);
2096 2059                  return (FST_SKIP);
2097 2060          }
2098 2061          if (NLP_ISSET(bpp->bp_nlp, NLPF_TOKENBK))
2099 2062                  t = bpp->bp_nlp->nlp_tokdate;
2100 2063          else if (NLP_ISSET(bpp->bp_nlp, NLPF_LEVELBK)) {
2101 2064                  t = bpp->bp_nlp->nlp_ldate;
2102 2065          } else {
2103      -                NDMP_LOG(LOG_DEBUG, "Unknown backup type on \"%s/%s\"",
     2066 +                syslog(LOG_ERR, "Unknown backup type on \"%s/%s\"",
2104 2067                      pnp->tn_path, ent);
2105 2068                  return (-1);
2106 2069          }
2107 2070  
2108 2071          if (S_ISDIR(stp->st_mode)) {
2109 2072                  bpp->bp_tlmacl->acl_dir_fh = *fhp;
2110 2073                  (void) ndmpd_fhdir_v3_cb(bpp->bp_nlp->nlp_logcallbacks,
2111 2074                      bpp->bp_tmp, stp);
2112 2075  
2113 2076                  if (ischngd(stp, t, bpp->bp_nlp)) {
↓ open down ↓ 56 lines elided ↑ open up ↑
2170 2133                  ent = enp->tn_path;
2171 2134                  stp = enp->tn_st;
2172 2135                  fhp = enp->tn_fh;
2173 2136          } else {
2174 2137                  ent = "";
2175 2138                  stp = pnp->tn_st;
2176 2139                  fhp = pnp->tn_fh;
2177 2140          }
2178 2141  
2179 2142          if (!tlm_cat_path(bpp->bp_tmp, pnp->tn_path, ent)) {
2180      -                NDMP_LOG(LOG_ERR, "Path too long %s/%s.", pnp->tn_path, ent);
     2143 +                syslog(LOG_ERR, "Path too long %s/%s.", pnp->tn_path, ent);
2181 2144                  return (FST_SKIP);
2182 2145          }
2183 2146          if (!NLP_ISSET(bpp->bp_nlp, NLPF_LBRBK)) {
2184      -                NDMP_LOG(LOG_DEBUG, "!NLPF_LBRBK");
     2147 +                syslog(LOG_DEBUG, "!NLPF_LBRBK");
2185 2148                  return (-1);
2186 2149          }
2187 2150  
2188 2151          if (S_ISDIR(stp->st_mode)) {
2189 2152                  bpp->bp_tlmacl->acl_dir_fh = *fhp;
2190 2153                  (void) ndmpd_fhdir_v3_cb(bpp->bp_nlp->nlp_logcallbacks,
2191 2154                      bpp->bp_tmp, stp);
2192 2155  
2193 2156                  if (SHOULD_LBRBK(bpp)) {
2194 2157                          bpp->bp_tlmacl->acl_attr = *stp;
↓ open down ↓ 11 lines elided ↑ open up ↑
2206 2169  
2207 2170  
2208 2171  /*
2209 2172   * backup_reader_v3
2210 2173   *
2211 2174   * The reader thread for the backup.  It sets up the callback
2212 2175   * parameters and traverses the backup hierarchy in level-order
2213 2176   * way.
2214 2177   *
2215 2178   * Parameters:
2216      - *   jname (input) - name assigned to the current backup for
2217      - *      job stats strucure
2218      - *   nlp (input) - pointer to the nlp structure
2219      - *   cmds (input) - pointer to the tlm_commands_t structure
     2179 + *   argp (input) - backup reader argument
2220 2180   *
2221 2181   * Returns:
2222 2182   *   0: on success
2223 2183   *   != 0: otherwise
2224 2184   */
2225 2185  static int
2226 2186  backup_reader_v3(backup_reader_arg_t *argp)
2227 2187  {
2228 2188          int rv;
2229 2189          tlm_cmd_t *lcmd;
2230 2190          tlm_acls_t tlm_acls;
2231 2191          longlong_t bpos, n;
2232 2192          bk_param_v3_t bp;
2233 2193          fs_traverse_t ft;
2234      -        char *jname;
2235 2194          ndmp_lbr_params_t *nlp;
2236 2195          tlm_commands_t *cmds;
     2196 +        int rc;
2237 2197  
2238 2198          if (!argp)
2239 2199                  return (-1);
2240 2200  
2241      -        jname = argp->br_jname;
2242 2201          nlp = argp->br_nlp;
2243 2202          cmds = argp->br_cmds;
2244 2203  
2245 2204          rv = 0;
2246 2205          lcmd = cmds->tcs_command;
2247 2206          lcmd->tc_ref++;
2248 2207          cmds->tcs_reader_count++;
2249 2208  
2250 2209          (void) memset(&tlm_acls, 0, sizeof (tlm_acls));
2251 2210  
2252 2211          /* NDMP parameters */
2253 2212          bp.bp_session = nlp->nlp_session;
2254 2213          bp.bp_nlp = nlp;
2255 2214  
2256 2215          /* LBR-related parameters  */
2257      -        bp.bp_js = tlm_ref_job_stats(jname);
     2216 +        bp.bp_js = tlm_ref_job_stats(nlp->nlp_job_name);
2258 2217          bp.bp_cmds = cmds;
2259 2218          bp.bp_lcmd = lcmd;
2260 2219          bp.bp_tlmacl = &tlm_acls;
2261 2220          bp.bp_opr = 0;
2262 2221  
2263 2222          /* release the parent thread, after referencing the job stats */
2264      -        (void) pthread_barrier_wait(&argp->br_barrier);
     2223 +        rc = pthread_barrier_wait(&argp->br_barrier);
     2224 +        if (rc == PTHREAD_BARRIER_SERIAL_THREAD) {
     2225 +                (void) pthread_barrier_destroy(&argp->br_barrier);
     2226 +        }
2265 2227  
2266 2228          bp.bp_tmp = ndmp_malloc(sizeof (char) * TLM_MAX_PATH_NAME);
2267 2229          if (!bp.bp_tmp)
2268 2230                  return (-1);
2269 2231  
2270 2232          /*
2271 2233           * Make the checkpointed paths for traversing the
2272 2234           * backup hierarchy, if we make the checkpoint.
2273 2235           */
2274 2236          bp.bp_unchkpnm = nlp->nlp_backup_path;
2275 2237          if (!NLP_ISCHKPNTED(nlp)) {
2276      -                tlm_acls.acl_checkpointed = TRUE;
     2238 +                tlm_acls.acl_checkpointed = FALSE;
2277 2239                  bp.bp_chkpnm = ndmp_malloc(sizeof (char) * TLM_MAX_PATH_NAME);
2278 2240                  if (!bp.bp_chkpnm) {
2279 2241                          NDMP_FREE(bp.bp_tmp);
2280 2242                          return (-1);
2281 2243                  }
2282 2244                  (void) tlm_build_snapshot_name(nlp->nlp_backup_path,
2283 2245                      bp.bp_chkpnm, nlp->nlp_jstat->js_job_name);
2284 2246          } else {
2285      -                tlm_acls.acl_checkpointed = FALSE;
2286      -                bp.bp_chkpnm = nlp->nlp_backup_path;
     2247 +                tlm_acls.acl_checkpointed = TRUE;
     2248 +                bp.bp_chkpnm = nlp->nlp_mountpoint;
2287 2249          }
2288 2250          bp.bp_excls = ndmpd_make_exc_list();
2289 2251  
2290 2252          /* set traversing arguments */
2291 2253          ft.ft_path = nlp->nlp_backup_path;
2292 2254          ft.ft_lpath = bp.bp_chkpnm;
2293 2255  
2294      -        NDMP_LOG(LOG_DEBUG, "path %s lpath %s", ft.ft_path, ft.ft_lpath);
2295 2256          if (NLP_ISSET(nlp, NLPF_TOKENBK) || NLP_ISSET(nlp, NLPF_LEVELBK)) {
2296 2257                  ft.ft_callbk = timebk_v3;
2297 2258                  tlm_acls.acl_clear_archive = FALSE;
2298 2259          } else if (NLP_ISSET(nlp, NLPF_LBRBK)) {
2299 2260                  ft.ft_callbk = lbrbk_v3;
2300 2261                  tlm_acls.acl_clear_archive = FALSE;
2301 2262  
2302      -                NDMP_LOG(LOG_DEBUG, "bp_opr %x clr_arc %c",
     2263 +                syslog(LOG_DEBUG, "bp_opr %x clr_arc %c",
2303 2264                      bp.bp_opr, NDMP_YORN(tlm_acls.acl_clear_archive));
2304 2265          } else {
2305 2266                  rv = -1;
2306 2267                  MOD_LOGV3(nlp->nlp_params, NDMP_LOG_ERROR,
2307      -                    "Unknow backup type.\n");
     2268 +                    "Unknown backup type.\n");
2308 2269          }
     2270 +
2309 2271          ft.ft_arg = &bp;
2310      -        ft.ft_logfp = (ft_log_t)ndmp_log;
     2272 +        ft.ft_logfp = (ft_log_t)syslog;
2311 2273          ft.ft_flags = FST_VERBOSE | FST_STOP_ONERR;
2312 2274  
     2275 +        syslog(LOG_DEBUG, "Traverse logical path [%s]", ft.ft_lpath);
     2276 +
2313 2277          /* take into account the header written to the stream so far */
2314 2278          n = tlm_get_data_offset(lcmd);
2315 2279          nlp->nlp_session->ns_data.dd_module.dm_stats.ms_bytes_processed = n;
2316 2280  
2317 2281          if (rv == 0) {
2318 2282                  /* start traversing the hierarchy and actual backup */
2319 2283                  rv = traverse_level(&ft);
2320 2284                  if (rv == 0) {
2321 2285                          /* write the trailer and update the bytes processed */
2322 2286                          bpos = tlm_get_data_offset(lcmd);
↓ open down ↓ 10 lines elided ↑ open up ↑
2333 2297          }
2334 2298  
2335 2299          if (!NLP_ISCHKPNTED(nlp))
2336 2300                  NDMP_FREE(bp.bp_chkpnm);
2337 2301          NDMP_FREE(bp.bp_tmp);
2338 2302          NDMP_FREE(bp.bp_excls);
2339 2303  
2340 2304          cmds->tcs_reader_count--;
2341 2305          lcmd->tc_writer = TLM_STOP;
2342 2306          tlm_release_reader_writer_ipc(lcmd);
2343      -        tlm_un_ref_job_stats(jname);
2344      -        return (rv);
     2307 +        tlm_un_ref_job_stats(nlp->nlp_job_name);
2345 2308  
     2309 +        return (rv);
2346 2310  }
2347 2311  
2348 2312  
2349 2313  /*
2350 2314   * tar_backup_v3
2351 2315   *
2352 2316   * Traverse the backup hierarchy if needed and make the bitmap.
2353 2317   * Then launch reader and writer threads to do the actual backup.
2354 2318   *
2355 2319   * Parameters:
2356 2320   *   session (input) - pointer to the session
2357 2321   *   params (input) - pointer to the parameters structure
2358 2322   *   nlp (input) - pointer to the nlp structure
2359      - *   jname (input) - job name
2360 2323   *
2361 2324   * Returns:
2362 2325   *   0: on success
2363 2326   *   != 0: otherwise
2364 2327   */
2365 2328  static int
2366 2329  tar_backup_v3(ndmpd_session_t *session, ndmpd_module_params_t *params,
2367      -    ndmp_lbr_params_t *nlp, char *jname)
     2330 +    ndmp_lbr_params_t *nlp)
2368 2331  {
2369 2332          tlm_commands_t *cmds;
2370 2333          backup_reader_arg_t arg;
2371 2334          pthread_t rdtp;
2372 2335          char info[256];
2373 2336          int result;
2374 2337          ndmp_context_t nctx;
2375 2338          int err;
     2339 +        int rc;
2376 2340  
2377      -        if (ndmp_get_bk_dir_ino(nlp))
     2341 +        if (ndmp_get_bk_dir_ino(nlp)) {
     2342 +                syslog(LOG_ERR, "Couldn't get backup directory inode");
2378 2343                  return (-1);
     2344 +        }
2379 2345  
2380 2346          result = err = 0;
2381 2347  
2382 2348          /* exit as if there was an internal error */
2383      -        if (session->ns_eof)
     2349 +        if (session->ns_eof) {
2384 2350                  return (-1);
2385      -
     2351 +        }
2386 2352          if (!session->ns_data.dd_abort) {
2387      -                if (backup_alloc_structs_v3(session, jname) < 0) {
     2353 +                if (backup_alloc_structs_v3(session) < 0) {
2388 2354                          nlp->nlp_bkmap = -1;
2389 2355                          return (-1);
2390 2356                  }
2391 2357  
2392 2358                  if (ndmpd_mark_inodes_v3(session, nlp) != 0) {
2393 2359                          if (nlp->nlp_bkmap != -1) {
2394 2360                                  (void) dbm_free(nlp->nlp_bkmap);
2395 2361                                  nlp->nlp_bkmap = -1;
2396 2362                          }
2397      -                        free_structs_v3(session, jname);
     2363 +                        free_structs_v3(session);
2398 2364                          return (-1);
2399 2365                  }
2400 2366  
2401 2367                  nlp->nlp_jstat->js_start_ltime = time(NULL);
2402 2368                  nlp->nlp_jstat->js_start_time = nlp->nlp_jstat->js_start_ltime;
2403 2369                  nlp->nlp_jstat->js_chkpnt_time = nlp->nlp_cdate;
2404 2370  
2405 2371                  cmds = &nlp->nlp_cmds;
2406 2372                  cmds->tcs_reader = cmds->tcs_writer = TLM_BACKUP_RUN;
2407 2373                  cmds->tcs_command->tc_reader = TLM_BACKUP_RUN;
2408 2374                  cmds->tcs_command->tc_writer = TLM_BACKUP_RUN;
2409 2375  
2410 2376                  if (ndmp_write_utf8magic(cmds->tcs_command) < 0) {
2411      -                        free_structs_v3(session, jname);
     2377 +                        free_structs_v3(session);
2412 2378                          return (-1);
2413 2379                  }
2414 2380  
2415      -                NDMP_LOG(LOG_DEBUG,
2416      -                    "Backing up \"%s\" started.", nlp->nlp_backup_path);
     2381 +                syslog(LOG_DEBUG, "Backing up \"%s\" started.",
     2382 +                    NLP_ISCHKPNTED(nlp)
     2383 +                    ? nlp->nlp_mountpoint : nlp->nlp_backup_path);
2417 2384  
2418 2385                  /* Plug-in module */
2419 2386                  if (ndmp_pl != NULL &&
2420 2387                      ndmp_pl->np_pre_backup != NULL) {
2421 2388                          (void) memset(&nctx, 0, sizeof (ndmp_context_t));
2422 2389                          nctx.nc_plversion = ndmp_pl->np_plversion;
2423 2390                          nctx.nc_plname = ndmpd_get_prop(NDMP_PLUGIN_PATH);
2424 2391                          nctx.nc_cmds = cmds;
2425 2392                          nctx.nc_params = params;
2426 2393                          nctx.nc_ddata = (void *) session;
2427 2394                          if ((err = ndmp_pl->np_pre_backup(ndmp_pl, &nctx,
2428 2395                              nlp->nlp_backup_path)) != 0) {
2429      -                                NDMP_LOG(LOG_ERR, "Pre-backup plug-in: %m");
     2396 +                                syslog(LOG_ERR, "Pre-backup plug-in: %m");
2430 2397                                  goto backup_out;
2431 2398                          }
2432 2399                  }
2433 2400  
2434 2401                  (void) memset(&arg, 0, sizeof (backup_reader_arg_t));
2435      -                arg.br_jname = jname;
2436 2402                  arg.br_nlp = nlp;
2437 2403                  arg.br_cmds = cmds;
2438 2404  
2439 2405                  (void) pthread_barrier_init(&arg.br_barrier, 0, 2);
2440 2406  
2441 2407                  err = pthread_create(&rdtp, NULL, (funct_t)backup_reader_v3,
2442 2408                      (void *)&arg);
2443 2409                  if (err == 0) {
2444      -                        (void) pthread_barrier_wait(&arg.br_barrier);
2445      -                        (void) pthread_barrier_destroy(&arg.br_barrier);
     2410 +                        rc =  pthread_barrier_wait(&arg.br_barrier);
     2411 +                        if (rc == PTHREAD_BARRIER_SERIAL_THREAD) {
     2412 +                                (void) pthread_barrier_destroy(&arg.br_barrier);
     2413 +                        }
2446 2414                  } else {
2447 2415                          (void) pthread_barrier_destroy(&arg.br_barrier);
2448      -                        free_structs_v3(session, jname);
2449      -                        NDMP_LOG(LOG_DEBUG, "Launch backup_reader_v3: %m");
     2416 +                        free_structs_v3(session);
     2417 +                        syslog(LOG_ERR, "Launch backup_reader_v3 failed on %s",
     2418 +                            nlp->nlp_job_name);
2450 2419                          return (-1);
2451 2420                  }
2452 2421  
2453 2422                  if ((err = ndmp_tar_writer(session, params, cmds)) != 0)
2454 2423                          result = EIO;
2455 2424  
2456 2425                  nlp->nlp_jstat->js_stop_time = time(NULL);
2457 2426  
2458 2427                  (void) snprintf(info, sizeof (info),
2459      -                    "Runtime [%s] %llu bytes (%llu): %d seconds\n",
     2428 +                    "Runtime [%s] %lu bytes (%lu): %d seconds\n",
2460 2429                      nlp->nlp_backup_path,
2461 2430                      session->ns_data.dd_module.dm_stats.ms_bytes_processed,
2462 2431                      session->ns_data.dd_module.dm_stats.ms_bytes_processed,
2463 2432                      nlp->nlp_jstat->js_stop_time -
2464 2433                      nlp->nlp_jstat->js_start_ltime);
2465 2434                  MOD_LOGV3(params, NDMP_LOG_NORMAL, info);
2466 2435  
2467 2436                  ndmp_wait_for_reader(cmds);
2468 2437                  (void) pthread_join(rdtp, NULL);
2469      -
2470 2438                  /* exit as if there was an internal error */
2471 2439                  if (session->ns_eof) {
2472 2440                          result = EPIPE;
2473 2441                          err = -1;
2474 2442                  }
2475 2443                  if (!session->ns_data.dd_abort) {
2476 2444                          ndmpd_audit_backup(session->ns_connection,
2477 2445                              nlp->nlp_backup_path,
2478 2446                              session->ns_data.dd_data_addr.addr_type,
2479 2447                              session->ns_tape.td_adapter_name, result);
2480      -                        NDMP_LOG(LOG_DEBUG, "Backing up \"%s\" Finished.",
2481      -                            nlp->nlp_backup_path);
     2448 +                        syslog(LOG_DEBUG, "Backing up \"%s\" Finished.",
     2449 +                            NLP_ISCHKPNTED(nlp) ?
     2450 +                            nlp->nlp_mountpoint : nlp->nlp_backup_path);
2482 2451                  }
2483 2452          }
2484 2453  
2485 2454          if (session->ns_data.dd_abort) {
2486 2455                  ndmpd_audit_backup(session->ns_connection,
2487 2456                      nlp->nlp_backup_path,
2488 2457                      session->ns_data.dd_data_addr.addr_type,
2489 2458                      session->ns_tape.td_adapter_name, EINTR);
2490      -                NDMP_LOG(LOG_DEBUG,
2491      -                    "Backing up \"%s\" aborted.", nlp->nlp_backup_path);
     2459 +                syslog(LOG_INFO, "Backing up \"%s\" aborted.",
     2460 +                    NLP_ISCHKPNTED(nlp) ?
     2461 +                    nlp->nlp_mountpoint : nlp->nlp_backup_path);
2492 2462                  err = -1;
2493 2463          } else {
2494 2464  
2495 2465  backup_out:
2496 2466                  /* Plug-in module */
2497 2467                  if (ndmp_pl != NULL &&
2498 2468                      ndmp_pl->np_post_backup != NULL &&
2499 2469                      ndmp_pl->np_post_backup(ndmp_pl, &nctx, err) == -1) {
2500      -                        NDMP_LOG(LOG_DEBUG, "Post-backup plug-in: %m");
     2470 +                        syslog(LOG_ERR, "Post-backup plug-in: %m");
2501 2471                          return (-1);
2502 2472                  }
2503 2473          }
2504 2474  
2505      -        free_structs_v3(session, jname);
     2475 +        free_structs_v3(session);
2506 2476          return (err);
2507 2477  }
2508 2478  
2509 2479  /*
2510 2480   * get_backup_size
2511 2481   *
2512 2482   * Find the estimate of backup size. This is used to get an estimate
2513 2483   * of the progress of backup during NDMP backup.
2514 2484   */
2515 2485  void
2516      -get_backup_size(ndmp_bkup_size_arg_t *sarg)
     2486 +get_backup_size(ndmp_lbr_params_t *nlp)
2517 2487  {
2518 2488          fs_traverse_t ft;
2519      -        u_longlong_t bk_size;
     2489 +        u_longlong_t bk_size = 0;
     2490 +        char buf[256];
2520 2491          char spath[PATH_MAX];
2521 2492          int rv;
2522 2493  
2523      -        bk_size = 0;
2524      -        if (fs_is_chkpntvol(sarg->bs_path)) {
2525      -                ft.ft_path = sarg->bs_path;
     2494 +        if (NLP_ISCHKPNTED(nlp)) {
     2495 +                ft.ft_path = nlp->nlp_mountpoint;
2526 2496          } else {
2527      -                (void) tlm_build_snapshot_name(sarg->bs_path,
2528      -                    spath, sarg->bs_jname);
     2497 +                (void) tlm_build_snapshot_name(nlp->nlp_backup_path,
     2498 +                    spath, nlp->nlp_job_name);
2529 2499                  ft.ft_path = spath;
2530 2500          }
2531 2501  
2532 2502          ft.ft_lpath = ft.ft_path;
2533 2503          ft.ft_callbk = size_cb;
2534 2504          ft.ft_arg = &bk_size;
2535      -        ft.ft_logfp = (ft_log_t)ndmp_log;
     2505 +        ft.ft_logfp = (ft_log_t)syslog;
2536 2506          ft.ft_flags = FST_VERBOSE;
2537 2507  
2538 2508          if ((rv = traverse_level(&ft)) != 0) {
2539      -                NDMP_LOG(LOG_DEBUG, "bksize err=%d", rv);
     2509 +                syslog(LOG_DEBUG, "bksize err=%d", rv);
     2510 +                syslog(LOG_DEBUG, "[%s] backup will be reported as [0]\n",
     2511 +                    nlp->nlp_job_name, buf);
2540 2512                  bk_size = 0;
2541 2513          } else {
2542      -                NDMP_LOG(LOG_DEBUG, "bksize %lld, %lldKB, %lldMB\n",
2543      -                    bk_size, bk_size / 1024, bk_size /(1024 * 1024));
     2514 +                (void) zfs_nicenum(bk_size, buf, sizeof (buf));
     2515 +                syslog(LOG_DEBUG, "[%s] backup size is [%s]\n",
     2516 +                    nlp->nlp_job_name, buf);
2544 2517          }
2545      -        sarg->bs_session->ns_data.dd_data_size = bk_size;
     2518 +
     2519 +        nlp->nlp_session->ns_data.dd_data_size = bk_size;
2546 2520  }
2547 2521  
2548 2522  /*
2549 2523   * get_rs_path_v3
2550 2524   *
2551 2525   * Find the restore path
2552 2526   */
2553 2527  ndmp_error
2554 2528  get_rs_path_v3(ndmpd_module_params_t *params, ndmp_lbr_params_t *nlp)
2555 2529  {
2556 2530          char *dp;
2557      -        ndmp_error rv;
     2531 +        ndmp_error rv = -1;
2558 2532          mem_ndmp_name_v3_t *ep;
2559 2533          int i, nm_cnt;
2560 2534          char *nm_dpath_list[MULTIPLE_DEST_DIRS];
2561 2535          static char mdest_buf[256];
2562 2536  
2563 2537          *mdest_buf = 0;
2564 2538          *nm_dpath_list = "";
2565 2539          for (i = 0, nm_cnt = 0; i < (int)nlp->nlp_nfiles; i++) {
2566 2540                  ep = (mem_ndmp_name_v3_t *)MOD_GETNAME(params, i);
2567 2541                  if (!ep) {
2568      -                        NDMP_LOG(LOG_DEBUG, "Can't get Nlist[%d]", i);
     2542 +                        syslog(LOG_ERR, "Can't get Nlist[%d]", i);
2569 2543                          return (NDMP_ILLEGAL_ARGS_ERR);
2570 2544                  }
2571 2545                  if (strcmp(nm_dpath_list[nm_cnt], ep->nm3_dpath) != 0 &&
2572 2546                      nm_cnt < MULTIPLE_DEST_DIRS - 1)
2573 2547                          nm_dpath_list[++nm_cnt] = ep->nm3_dpath;
2574 2548          }
2575 2549  
2576 2550          multiple_dest_restore = (nm_cnt > 1);
2577 2551          nlp->nlp_restore_path = mdest_buf;
2578 2552  
↓ open down ↓ 11 lines elided ↑ open up ↑
2590 2564                              "Invalid destination path volume \"%s\".\n", dp);
2591 2565                  } else if (!voliswr(dp)) {
2592 2566                          rv = NDMP_ILLEGAL_ARGS_ERR;
2593 2567                          MOD_LOGV3(params, NDMP_LOG_ERROR,
2594 2568                              "The destination path volume"
2595 2569                              " is not writable \"%s\".\n", dp);
2596 2570                  } else {
2597 2571                          rv = NDMP_NO_ERR;
2598 2572                          (void) strlcat(nlp->nlp_restore_path, dp,
2599 2573                              sizeof (mdest_buf));
2600      -                        NDMP_LOG(LOG_DEBUG, "rspath: \"%s\"", dp);
     2574 +                        syslog(LOG_DEBUG, "rspath: \"%s\"", dp);
2601 2575                  }
2602 2576  
2603 2577                  /*
2604 2578                   * Exit if there is an error or it is not a multiple
2605 2579                   * destination restore mode
2606 2580                   */
2607 2581                  if (rv != NDMP_NO_ERR || !multiple_dest_restore)
2608 2582                          break;
2609 2583  
2610 2584                  if (i < nm_cnt)
↓ open down ↓ 149 lines elided ↑ open up ↑
2760 2734                  cp = strdup(bp);
2761 2735                  if (!cp) {
2762 2736                          MOD_LOGV3(params, NDMP_LOG_ERROR,
2763 2737                              "Insufficient memory.\n");
2764 2738                          rv = NDMP_NO_MEM_ERR;
2765 2739                          break;
2766 2740                  }
2767 2741                  NDMP_FREE(ep->nm3_opath);
2768 2742                  ep->nm3_opath = cp;
2769 2743  
2770      -                NDMP_LOG(LOG_DEBUG, "orig[%d]: \"%s\"", i, ep->nm3_opath);
     2744 +                syslog(LOG_DEBUG, "orig[%d]: \"%s\"", i, ep->nm3_opath);
2771 2745                  if (ep->nm3_dpath) {
2772      -                        NDMP_LOG(LOG_DEBUG,
     2746 +                        syslog(LOG_DEBUG,
2773 2747                              "dest[%d]: \"%s\"", i, ep->nm3_dpath);
2774 2748                  } else {
2775      -                        NDMP_LOG(LOG_DEBUG, "dest[%d]: \"%s\"", i, "NULL");
     2749 +                        syslog(LOG_INFO, "dest[%d]: \"%s\"", i, "NULL");
2776 2750                  }
2777 2751          }
2778 2752  
2779 2753          free(buf);
2780 2754  
2781 2755          return (rv);
2782 2756  }
2783 2757  
2784 2758  
2785 2759  /*
↓ open down ↓ 74 lines elided ↑ open up ↑
2860 2834   * Create the list of files that were in restore list but
2861 2835   * not recovered due to some errors.
2862 2836   */
2863 2837  int
2864 2838  send_unrecovered_list_v3(ndmpd_module_params_t *params, ndmp_lbr_params_t *nlp)
2865 2839  {
2866 2840          int i, rv;
2867 2841          int err;
2868 2842  
2869 2843          if (!params) {
2870      -                NDMP_LOG(LOG_DEBUG, "params == NULL");
     2844 +                syslog(LOG_ERR, "params == NULL");
2871 2845                  return (-1);
2872 2846          }
2873 2847          if (!nlp) {
2874      -                NDMP_LOG(LOG_DEBUG, "nlp == NULL");
     2848 +                syslog(LOG_ERR, "nlp == NULL");
2875 2849                  return (-1);
2876 2850          }
2877 2851  
2878 2852          if (nlp->nlp_lastidx != -1) {
2879 2853                  if (!bm_getone(nlp->nlp_rsbm, (u_longlong_t)nlp->nlp_lastidx))
2880 2854                          err = ENOENT;
2881 2855                  else
2882 2856                          err = 0;
2883 2857                  (void) ndmp_send_recovery_stat_v3(params, nlp,
2884 2858                      nlp->nlp_lastidx, err);
↓ open down ↓ 16 lines elided ↑ open up ↑
2901 2875  
2902 2876  /*
2903 2877   * restore_dar_alloc_structs_v3
2904 2878   *
2905 2879   * Allocates the necessary structures for running DAR restore.
2906 2880   * It just creates the reader writer IPC.
2907 2881   * This function is called for each entry in the restore entry list.
2908 2882   *
2909 2883   * Parameters:
2910 2884   *   session (input) - pointer to the session
2911      - *   jname (input) - Job name
2912 2885   *
2913 2886   * Returns:
2914 2887   *    0: on success
2915 2888   *   -1: on error
2916 2889   */
2917 2890  int
2918      -restore_dar_alloc_structs_v3(ndmpd_session_t *session, char *jname)
     2891 +restore_dar_alloc_structs_v3(ndmpd_session_t *session)
2919 2892  {
2920 2893          long xfer_size;
2921 2894          ndmp_lbr_params_t *nlp;
2922 2895          tlm_commands_t *cmds;
2923 2896  
2924 2897          nlp = ndmp_get_nlp(session);
2925 2898          if (!nlp) {
2926      -                NDMP_LOG(LOG_DEBUG, "nlp == NULL");
     2899 +                syslog(LOG_ERR, "nlp == NULL");
2927 2900                  return (-1);
2928 2901          }
2929 2902  
2930 2903          cmds = &nlp->nlp_cmds;
2931 2904          (void) memset(cmds, 0, sizeof (*cmds));
2932 2905  
2933 2906          xfer_size = ndmp_buffer_get_size(session);
2934 2907          cmds->tcs_command = tlm_create_reader_writer_ipc(FALSE, xfer_size);
2935 2908          if (!cmds->tcs_command) {
2936      -                tlm_un_ref_job_stats(jname);
     2909 +                tlm_un_ref_job_stats(nlp->nlp_job_name);
2937 2910                  return (-1);
2938 2911          }
2939 2912  
2940 2913          return (0);
2941 2914  }
2942 2915  
2943 2916  
2944 2917  /*
2945 2918   * free_dar_structs_v3
2946 2919   *
2947 2920   * To free the structures were created by restore_dar_alloc_structs_v3.
2948 2921   * This funnction is called for each entry in restore entry list.
2949 2922   *
2950 2923   * Parameters:
2951 2924   *   session (input) - pointer to the session
2952      - *   jname (input) - job name
2953 2925   *
2954 2926   * Returns:
2955 2927   *      NONE
2956 2928   */
2957 2929  /*ARGSUSED*/
2958 2930  static void
2959      -free_dar_structs_v3(ndmpd_session_t *session, char *jname)
     2931 +free_dar_structs_v3(ndmpd_session_t *session)
2960 2932  {
2961 2933          ndmp_lbr_params_t *nlp;
2962 2934          tlm_commands_t *cmds;
2963 2935  
2964 2936          nlp = ndmp_get_nlp(session);
2965 2937          if (!nlp) {
2966      -                NDMP_LOG(LOG_DEBUG, "nlp == NULL");
     2938 +                syslog(LOG_DEBUG, "nlp == NULL");
2967 2939                  return;
2968 2940          }
2969 2941          cmds = &nlp->nlp_cmds;
2970 2942          if (!cmds) {
2971      -                NDMP_LOG(LOG_DEBUG, "cmds == NULL");
     2943 +                syslog(LOG_DEBUG, "cmds == NULL");
2972 2944                  return;
2973 2945          }
2974 2946  
2975 2947          if (cmds->tcs_command) {
2976 2948                  if (cmds->tcs_command->tc_buffers != NULL)
2977 2949                          tlm_release_reader_writer_ipc(cmds->tcs_command);
2978 2950                  else
2979      -                        NDMP_LOG(LOG_DEBUG, "BUFFERS == NULL");
     2951 +                        syslog(LOG_DEBUG, "BUFFERS == NULL");
2980 2952                  cmds->tcs_command = NULL;
2981 2953          } else
2982      -                NDMP_LOG(LOG_DEBUG, "COMMAND == NULL");
     2954 +                syslog(LOG_DEBUG, "COMMAND == NULL");
2983 2955  }
2984 2956  
2985 2957  
2986 2958  /*
2987 2959   * ndmp_dar_tar_init_v3
2988 2960   *
2989 2961   * Constructor for the DAR restore. Creates job name, allocates structures
2990 2962   * needed for keeping the statistics, and reports the start of restore action.
2991 2963   * It is called once for each DAR restore request.
2992 2964   *
↓ open down ↓ 8 lines elided ↑ open up ↑
3001 2973  static char *ndmpd_dar_tar_init_v3(ndmpd_session_t *session,
3002 2974      ndmp_lbr_params_t *nlp)
3003 2975  {
3004 2976          char *jname;
3005 2977  
3006 2978          jname = ndmp_malloc(TLM_MAX_BACKUP_JOB_NAME);
3007 2979  
3008 2980          if (!jname)
3009 2981                  return (NULL);
3010 2982  
3011      -        (void) ndmp_new_job_name(jname);
     2983 +        if (ndmp_new_job_name(jname, TLM_MAX_BACKUP_JOB_NAME) <= 0) {
     2984 +                free(jname);
     2985 +                return (NULL);
     2986 +        }
3012 2987  
3013 2988          if (!nlp) {
3014 2989                  free(jname);
3015      -                NDMP_LOG(LOG_DEBUG, "nlp == NULL");
     2990 +                syslog(LOG_DEBUG, "nlp == NULL");
3016 2991                  return (NULL);
3017 2992          }
3018 2993  
3019 2994          nlp->nlp_jstat = tlm_new_job_stats(jname);
3020 2995          if (!nlp->nlp_jstat) {
3021 2996                  free(jname);
3022      -                NDMP_LOG(LOG_DEBUG, "Creating job stats");
     2997 +                syslog(LOG_DEBUG, "Creating job stats");
3023 2998                  return (NULL);
3024 2999          }
3025 3000  
3026 3001          nlp->nlp_jstat->js_start_ltime = time(NULL);
3027 3002          nlp->nlp_jstat->js_start_time = nlp->nlp_jstat->js_start_ltime;
3028 3003  
3029 3004          nlp->nlp_logcallbacks = lbrlog_callbacks_init(session,
3030 3005              ndmpd_path_restored_v3, NULL, NULL);
3031 3006          if (!nlp->nlp_logcallbacks) {
3032 3007                  tlm_un_ref_job_stats(jname);
3033 3008                  free(jname);
3034 3009                  return (NULL);
3035 3010          }
3036 3011          nlp->nlp_jstat->js_callbacks = (void *)(nlp->nlp_logcallbacks);
3037 3012  
3038 3013          nlp->nlp_rsbm = bm_alloc(nlp->nlp_nfiles, 0);
3039 3014          if (nlp->nlp_rsbm < 0) {
3040      -                NDMP_LOG(LOG_ERR, "Out of memory.");
     3015 +                syslog(LOG_ERR, "Out of memory.");
3041 3016                  lbrlog_callbacks_done(nlp->nlp_logcallbacks);
3042 3017                  tlm_un_ref_job_stats(jname);
3043 3018                  free(jname);
3044 3019                  return (NULL);
3045 3020          }
3046 3021  
3047 3022          /* this is used in ndmpd_path_restored_v3() */
3048 3023          nlp->nlp_lastidx = -1;
3049 3024  
3050      -        NDMP_LOG(LOG_DEBUG, "Restoring from %s tape(s).",
     3025 +        syslog(LOG_DEBUG, "Restoring from %s tape(s).",
3051 3026              ndmp_data_get_mover_mode(session));
3052 3027  
3053 3028          return (jname);
3054 3029  }
3055 3030  
3056 3031  /*
3057 3032   * ndmpd_dar_tar_end_v3
3058 3033   *
3059 3034   * Deconstructor for the DAR restore. This function is called once per
3060 3035   * DAR request. It deallocates memories allocated by ndmpd_dar_tar_init_v3.
↓ open down ↓ 7 lines elided ↑ open up ↑
3068 3043   * Returns:
3069 3044   *   0: on success
3070 3045   *   -1: on error
3071 3046   */
3072 3047  static int ndmpd_dar_tar_end_v3(ndmpd_session_t *session,
3073 3048      ndmpd_module_params_t *params, ndmp_lbr_params_t *nlp, char *jname)
3074 3049  {
3075 3050          int err = 0;
3076 3051  
3077 3052  
3078      -        NDMP_LOG(LOG_DEBUG, "lastidx %d", nlp->nlp_lastidx);
     3053 +        syslog(LOG_DEBUG, "lastidx %d", nlp->nlp_lastidx);
3079 3054  
3080 3055          /* nothing restored. */
3081 3056          (void) send_unrecovered_list_v3(params, nlp);
3082 3057  
3083 3058          if (nlp->nlp_jstat) {
3084 3059                  nlp->nlp_bytes_total =
3085 3060                      (u_longlong_t)nlp->nlp_jstat->js_bytes_total;
3086 3061                  tlm_un_ref_job_stats(jname);
3087 3062                  nlp->nlp_jstat = NULL;
3088 3063          } else {
3089      -                NDMP_LOG(LOG_DEBUG, "JSTAT == NULL");
     3064 +                syslog(LOG_DEBUG, "JSTAT == NULL");
3090 3065          }
3091 3066  
3092 3067          if (nlp->nlp_logcallbacks) {
3093 3068                  lbrlog_callbacks_done(nlp->nlp_logcallbacks);
3094 3069                  nlp->nlp_logcallbacks = NULL;
3095 3070          } else {
3096      -                NDMP_LOG(LOG_DEBUG, "FH CALLBACKS == NULL");
     3071 +                syslog(LOG_DEBUG, "FH CALLBACKS == NULL");
3097 3072          }
3098 3073  
3099 3074          if (session->ns_data.dd_abort) {
3100      -                NDMP_LOG(LOG_DEBUG, "Restoring to \"%s\" aborted.",
     3075 +                syslog(LOG_DEBUG, "Restoring to \"%s\" aborted.",
3101 3076                      (nlp->nlp_restore_path) ? nlp->nlp_restore_path : "NULL");
3102 3077                  err = EINTR;
3103 3078          } else {
3104      -                NDMP_LOG(LOG_DEBUG, "Restoring to \"%s\" finished. (%d)",
     3079 +                syslog(LOG_DEBUG, "Restoring to \"%s\" finished. (%d)",
3105 3080                      (nlp->nlp_restore_path) ? nlp->nlp_restore_path :
3106 3081                      "NULL", err);
3107 3082          }
3108 3083  
3109 3084          if (session->ns_data.dd_operation == NDMP_DATA_OP_RECOVER) {
3110 3085                  if (nlp->nlp_rsbm < 0) {
3111      -                        NDMP_LOG(LOG_DEBUG, "nlp_rsbm < 0 %d", nlp->nlp_rsbm);
     3086 +                        syslog(LOG_DEBUG, "nlp_rsbm < 0 %d", nlp->nlp_rsbm);
3112 3087                  } else {
3113 3088                          (void) bm_free(nlp->nlp_rsbm);
3114 3089                          nlp->nlp_rsbm = -1;
3115 3090                  }
3116 3091          }
3117 3092  
3118 3093          free(jname);
3119 3094  
3120 3095          return (err);
3121 3096  }
↓ open down ↓ 5 lines elided ↑ open up ↑
3127 3102   * This function is called for each entry in DAR entry list. The window
3128 3103   * is already located and we should be in the right position to read
3129 3104   * the data from the tape.
3130 3105   * For each entry we setup selection list; so that, if the file name from
3131 3106   * tape is not as the name client asked for, error be returned.
3132 3107   *
3133 3108   * Parameters:
3134 3109   *   session (input) - pointer to the session
3135 3110   *   params (input) - pointer to the parameters structure
3136 3111   *   nlp (input) - pointer to the nlp structure
3137      - *   jname (input) - job name
3138 3112   *   dar_index(input) - Index of this entry in the restore list
3139 3113   *
3140 3114   * Returns:
3141 3115   *   0: on success
3142 3116   *   -1: on error
3143 3117   */
3144 3118  static int
3145 3119  ndmpd_dar_tar_v3(ndmpd_session_t *session, ndmpd_module_params_t *params,
3146      -    ndmp_lbr_params_t *nlp, char *jname, int dar_index)
     3120 +    ndmp_lbr_params_t *nlp, int dar_index)
3147 3121  {
3148 3122          char *excl;
3149 3123          char **sels;
3150 3124          int flags;
3151 3125          int err;
3152 3126          tlm_commands_t *cmds;
3153 3127          struct rs_name_maker rn;
3154 3128          int data_addr_type = session->ns_data.dd_data_addr.addr_type;
3155 3129          ndmp_tar_reader_arg_t arg;
3156 3130          pthread_t rdtp;
3157 3131          ndmp_context_t nctx;
3158 3132          mem_ndmp_name_v3_t *ep;
3159 3133  
3160 3134          err = 0;
3161 3135  
3162 3136          /*
3163 3137           * We have to allocate and deallocate buffers every time we
3164 3138           * run the restore, for we need to flush the buffers.
3165 3139           */
3166      -        if (restore_dar_alloc_structs_v3(session, jname) < 0)
     3140 +        if (restore_dar_alloc_structs_v3(session) < 0)
3167 3141                  return (-1);
3168 3142  
3169 3143          sels = setupsels(session, params, nlp, dar_index);
3170 3144          if (!sels) {
3171      -                free_dar_structs_v3(session, jname);
     3145 +                free_dar_structs_v3(session);
3172 3146                  return (-1);
3173 3147          }
3174 3148          excl = NULL;
3175 3149          flags = RSFLG_OVR_ALWAYS;
3176 3150          rn.rn_nlp = nlp;
3177 3151          rn.rn_fp = mknewname;
3178 3152  
3179 3153          if (!session->ns_data.dd_abort) {
3180 3154                  cmds = &nlp->nlp_cmds;
3181 3155                  cmds->tcs_reader = cmds->tcs_writer = TLM_RESTORE_RUN;
↓ open down ↓ 2 lines elided ↑ open up ↑
3184 3158  
3185 3159                  arg.tr_session = session;
3186 3160                  arg.tr_mod_params = params;
3187 3161                  arg.tr_cmds = cmds;
3188 3162  
3189 3163                  err = pthread_create(&rdtp, NULL, (funct_t)ndmp_tar_reader,
3190 3164                      (void *)&arg);
3191 3165                  if (err == 0) {
3192 3166                          tlm_cmd_wait(cmds->tcs_command, TLM_TAR_READER);
3193 3167                  } else {
3194      -                        NDMP_LOG(LOG_DEBUG, "launch ndmp_tar_reader: %m");
     3168 +                        syslog(LOG_ERR, "launch ndmp_tar_reader failed");
3195 3169                          return (-1);
3196 3170                  }
3197 3171  
3198 3172                  cmds->tcs_command->tc_ref++;
3199 3173                  cmds->tcs_writer_count++;
3200 3174  
3201 3175                  /* Plug-in module */
3202 3176                  if (ndmp_pl != NULL &&
3203 3177                      ndmp_pl->np_pre_restore != NULL) {
3204 3178                          (void) memset(&nctx, 0, sizeof (ndmp_context_t));
3205 3179                          nctx.nc_cmds = cmds;
3206 3180                          nctx.nc_params = params;
3207 3181                          nctx.nc_ddata = (void *) session;
3208 3182                          ep = (mem_ndmp_name_v3_t *)MOD_GETNAME(params,
3209 3183                              dar_index - 1);
3210 3184  
3211 3185                          if ((err = ndmp_pl->np_pre_restore(ndmp_pl, &nctx,
3212 3186                              ep->nm3_opath, ep->nm3_dpath))
3213 3187                              != 0) {
3214      -                                NDMP_LOG(LOG_ERR, "Pre-restore plug-in: %m");
     3188 +                                syslog(LOG_ERR, "Pre-restore plug-in: %m");
3215 3189                                  ndmp_stop_local_reader(session, cmds);
3216 3190                                  ndmp_wait_for_reader(cmds);
3217 3191                                  (void) pthread_join(rdtp, NULL);
3218 3192                                  ndmp_stop_remote_reader(session);
3219 3193                                  goto restore_out;
3220 3194                          }
3221 3195                  }
3222 3196  
3223 3197                  if (tm_tar_ops.tm_getdir != NULL) {
3224 3198                          char errbuf[256];
3225 3199  
3226 3200                          err = (tm_tar_ops.tm_getdir)(cmds, cmds->tcs_command,
3227 3201                              nlp->nlp_jstat, &rn, 1, 1, sels, &excl, flags,
3228      -                            dar_index, nlp->nlp_backup_path,
     3202 +                            dar_index, nlp->nlp_mountpoint,
3229 3203                              session->hardlink_q);
3230 3204                          /*
3231 3205                           * If the fatal error from tm_getdir looks like an
3232 3206                           * errno code, we send the error description to DMA.
3233 3207                           */
3234 3208                          if (err > 0 && strerror_r(err, errbuf,
3235 3209                              sizeof (errbuf)) == 0) {
3236 3210                                  MOD_LOGV3(params, NDMP_LOG_ERROR,
3237 3211                                      "Fatal error during the restore: %s\n",
3238 3212                                      errbuf);
3239 3213                          }
3240 3214                  }
3241 3215  
3242 3216                  cmds->tcs_writer_count--;
3243 3217                  cmds->tcs_command->tc_ref--;
3244      -                NDMP_LOG(LOG_DEBUG, "stop local reader.");
     3218 +                syslog(LOG_DEBUG, "stop local reader.");
3245 3219                  ndmp_stop_local_reader(session, cmds);
3246 3220  
3247 3221                  ndmp_wait_for_reader(cmds);
3248 3222                  (void) pthread_join(rdtp, NULL);
3249 3223  
3250 3224                  /*
3251 3225                   * If this is the last DAR entry and it is a three-way
3252 3226                   * restore then we should close the connection.
3253 3227                   */
3254 3228                  if ((data_addr_type == NDMP_ADDR_TCP) &&
3255 3229                      (dar_index == (int)session->ns_data.dd_nlist_len)) {
3256      -                        NDMP_LOG(LOG_DEBUG, "stop remote reader.");
     3230 +                        syslog(LOG_DEBUG, "stop remote reader.");
3257 3231                          ndmp_stop_remote_reader(session);
3258 3232                  }
3259 3233  
3260 3234                  /* exit as if there was an internal error */
3261 3235                  if (session->ns_eof)
3262 3236                          err = -1;
3263 3237  restore_out:
3264 3238                  /* Plug-in module */
3265 3239                  if (ndmp_pl != NULL &&
3266 3240                      ndmp_pl->np_post_restore != NULL &&
3267 3241                      ndmp_pl->np_post_restore(ndmp_pl, &nctx, err) == -1) {
3268      -                        NDMP_LOG(LOG_DEBUG, "Post-restore plug-in: %m");
     3242 +                        syslog(LOG_DEBUG, "Post-restore plug-in: %m");
3269 3243                          err = -1;
3270 3244                  }
3271 3245          }
3272 3246  
3273 3247          NDMP_FREE(sels);
3274 3248  
3275      -        free_dar_structs_v3(session, jname);
     3249 +        free_dar_structs_v3(session);
3276 3250  
3277 3251          return (err);
3278 3252  }
3279 3253  
3280 3254  /*
3281 3255   * ndmpd_dar_locate_windwos_v3
3282 3256   *
3283 3257   * Locating the right window in which the requested file is backed up.
3284 3258   * We should go through windows to find the exact location, for the
3285 3259   * file can be located in for example 10th window after the current window.
↓ open down ↓ 11 lines elided ↑ open up ↑
3297 3271  static int
3298 3272  ndmpd_dar_locate_window_v3(ndmpd_session_t *session,
3299 3273      ndmpd_module_params_t *params, u_longlong_t fh_info, u_longlong_t len)
3300 3274  {
3301 3275          int ret = 0;
3302 3276  
3303 3277  
3304 3278          for (; ; ) {
3305 3279                  ret = (*params->mp_seek_func)(session, fh_info, len);
3306 3280  
3307      -                NDMP_LOG(LOG_DEBUG, "ret %d", ret);
     3281 +                syslog(LOG_DEBUG, "ret %d", ret);
3308 3282                  if (ret == 0) /* Seek was done successfully */
3309 3283                          break;
3310 3284                  else if (ret < 0) {
3311      -                        NDMP_LOG(LOG_DEBUG, "Seek error");
     3285 +                        syslog(LOG_ERR,
     3286 +                            "Seek error in ndmpd_dar_locate_window_v3");
3312 3287                          break;
3313 3288                  }
3314 3289  
3315 3290                  /*
3316 3291                   * DMA moved to a new window.
3317 3292                   * If we are reading the remainig of the file from
3318 3293                   * new window, seek is handled by ndmpd_local_read_v3.
3319 3294                   * Here we should continue the seek inside the new
3320 3295                   * window.
3321 3296                   */
↓ open down ↓ 40 lines elided ↑ open up ↑
3362 3337           * We set the length = sizeof (tlm_tar_hdr_t)
3363 3338           * This is important for three-way DAR restore, for we should
3364 3339           * read the header first (If we ask for more data then we have
3365 3340           * to read and discard the remaining data in the socket)
3366 3341           */
3367 3342          len = tlm_tarhdr_size();
3368 3343  
3369 3344          for (i = 0; i < n; ++i) {
3370 3345                  ep = (mem_ndmp_name_v3_t *)MOD_GETNAME(params, i);
3371 3346                  if (!ep) {
3372      -                        NDMP_LOG(LOG_DEBUG, "ep NULL, i %d", i);
     3347 +                        syslog(LOG_DEBUG, "ep NULL, i %d", i);
3373 3348                          continue;
3374 3349                  }
3375      -                NDMP_LOG(LOG_DEBUG,
     3350 +                syslog(LOG_DEBUG,
3376 3351                      "restoring opath %s, dpath %s, fh_info %lld",
3377 3352                      ep->nm3_opath ? ep->nm3_opath : "NULL",
3378 3353                      ep->nm3_dpath ? ep->nm3_dpath : "NULL",
3379 3354                      ep->nm3_fh_info);
3380 3355  
3381 3356                  /*
3382 3357                   * We should seek till finding the window in which file
3383 3358                   * is located.
3384 3359                   */
3385 3360                  ret = ndmpd_dar_locate_window_v3(session, params,
3386 3361                      ep->nm3_fh_info, len);
3387 3362  
3388 3363                  if (ret < 0) /* If seek fails, restore should be aborted */
3389 3364                          break;
3390 3365                  /*
3391 3366                   * We are inside the target window.
3392 3367                   * for each restore we will use one entry as selection list
3393 3368                   */
3394      -                if ((ret = ndmpd_dar_tar_v3(session, params, nlp, jname, i+1))
     3369 +                if ((ret = ndmpd_dar_tar_v3(session, params, nlp, i+1))
3395 3370                      != 0)
3396 3371                          result = EIO;
3397 3372                  ndmpd_audit_restore(session->ns_connection,
3398 3373                      ep->nm3_opath ? ep->nm3_opath : "NULL",
3399 3374                      session->ns_data.dd_data_addr.addr_type,
3400 3375                      session->ns_tape.td_adapter_name, result);
3401 3376          }
3402 3377  
3403      -        NDMP_LOG(LOG_DEBUG, "End of restore list");
     3378 +        syslog(LOG_DEBUG, "End of restore list");
3404 3379  
3405 3380          (void) ndmpd_dar_tar_end_v3(session, params, nlp, jname);
3406 3381  
3407 3382          return (ret);
3408 3383  }
3409 3384  
3410 3385  /*
3411 3386   * ndmp_plugin_pre_restore
3412 3387   *
3413 3388   * Wrapper for pre-restore callback with multiple path
↓ open down ↓ 37 lines elided ↑ open up ↑
3451 3426  static char *
3452 3427  get_absolute_path(const char *bkpath)
3453 3428  {
3454 3429          char *pbuf;
3455 3430          char *rv;
3456 3431  
3457 3432          if (!(pbuf = ndmp_malloc(TLM_MAX_PATH_NAME)))
3458 3433                  return (NULL);
3459 3434  
3460 3435          if ((rv = realpath(bkpath, pbuf)) == NULL) {
3461      -                NDMP_LOG(LOG_DEBUG, "Invalid path [%s] err=%d",
     3436 +                syslog(LOG_ERR, "Invalid path [%s] err=%d",
3462 3437                      bkpath, errno);
3463 3438          }
3464 3439          return (rv);
3465 3440  }
3466 3441  
3467 3442  /*
3468 3443   * Expands the format string and logs the resulting message to the
3469 3444   * remote DMA
3470 3445   */
3471 3446  void
↓ open down ↓ 27 lines elided ↑ open up ↑
3499 3474   *   nlp (input) - pointer to the nlp structure
3500 3475   *
3501 3476   * Returns:
3502 3477   *   0: on success
3503 3478   *   -1: on error
3504 3479   */
3505 3480  static int
3506 3481  ndmpd_rs_sar_tar_v3(ndmpd_session_t *session, ndmpd_module_params_t *params,
3507 3482      ndmp_lbr_params_t *nlp)
3508 3483  {
3509      -        char jname[TLM_MAX_BACKUP_JOB_NAME];
3510 3484          char *excl;
3511 3485          char **sels;
3512 3486          int flags;
3513 3487          int err;
3514 3488          tlm_commands_t *cmds;
3515 3489          struct rs_name_maker rn;
3516 3490          ndmp_tar_reader_arg_t arg;
3517 3491          pthread_t rdtp;
3518 3492          int result;
3519 3493          ndmp_context_t nctx;
3520 3494  
3521 3495          result = err = 0;
3522      -        (void) ndmp_new_job_name(jname);
3523      -        if (restore_alloc_structs_v3(session, jname) < 0)
3524      -                return (-1);
3525 3496  
     3497 +        if (restore_alloc_structs_v3(session) < 0) {
     3498 +                return (-1);
     3499 +        }
3526 3500          sels = setupsels(session, params, nlp, 0);
3527 3501          if (!sels) {
3528      -                free_structs_v3(session, jname);
     3502 +                free_structs_v3(session);
3529 3503                  return (-1);
3530 3504          }
3531 3505          excl = NULL;
3532 3506          flags = RSFLG_OVR_ALWAYS;
3533 3507          rn.rn_nlp = nlp;
3534 3508          rn.rn_fp = mknewname;
3535 3509  
3536 3510          nlp->nlp_jstat->js_start_ltime = time(NULL);
3537 3511          nlp->nlp_jstat->js_start_time = nlp->nlp_jstat->js_start_ltime;
3538 3512  
3539 3513          if (!session->ns_data.dd_abort && !session->ns_data.dd_abort) {
3540 3514                  cmds = &nlp->nlp_cmds;
3541 3515                  cmds->tcs_reader = cmds->tcs_writer = TLM_RESTORE_RUN;
3542 3516                  cmds->tcs_command->tc_reader = TLM_RESTORE_RUN;
3543 3517                  cmds->tcs_command->tc_writer = TLM_RESTORE_RUN;
3544 3518  
3545      -                NDMP_LOG(LOG_DEBUG, "Restoring to \"%s\" started.",
     3519 +                syslog(LOG_DEBUG, "Restoring to \"%s\" started.",
3546 3520                      (nlp->nlp_restore_path) ? nlp->nlp_restore_path : "NULL");
3547 3521  
3548 3522                  arg.tr_session = session;
3549 3523                  arg.tr_mod_params = params;
3550 3524                  arg.tr_cmds = cmds;
3551 3525                  err = pthread_create(&rdtp, NULL, (funct_t)ndmp_tar_reader,
3552 3526                      (void *)&arg);
3553 3527                  if (err == 0) {
3554 3528                          tlm_cmd_wait(cmds->tcs_command, TLM_TAR_READER);
3555 3529                  } else {
3556      -                        NDMP_LOG(LOG_DEBUG, "Launch ndmp_tar_reader: %m");
3557      -                        free_structs_v3(session, jname);
     3530 +                        syslog(LOG_ERR, "Launch ndmp_tar_reader failed");
     3531 +                        free_structs_v3(session);
3558 3532                          return (-1);
3559 3533                  }
3560 3534  
3561 3535                  if (!ndmp_check_utf8magic(cmds->tcs_command)) {
3562      -                        NDMP_LOG(LOG_DEBUG, "UTF8Magic not found!");
     3536 +                        syslog(LOG_DEBUG, "UTF8Magic not found!");
3563 3537                  } else {
3564      -                        NDMP_LOG(LOG_DEBUG, "UTF8Magic found");
     3538 +                        syslog(LOG_DEBUG, "UTF8Magic found");
3565 3539                  }
3566 3540  
3567 3541                  /* Plug-in module */
3568 3542                  if (ndmp_pl != NULL &&
3569 3543                      ndmp_pl->np_pre_restore != NULL) {
3570 3544                          (void) memset(&nctx, 0, sizeof (ndmp_context_t));
3571 3545                          nctx.nc_cmds = cmds;
3572 3546                          nctx.nc_params = params;
3573 3547                          nctx.nc_ddata = (void *) session;
3574 3548                          if ((err = ndmp_plugin_pre_restore(&nctx, params,
3575 3549                              nlp->nlp_nfiles))
3576 3550                              != 0) {
3577      -                                NDMP_LOG(LOG_ERR, "Pre-restore plug-in: %m");
     3551 +                                syslog(LOG_ERR, "Pre-restore plug-in: %m");
3578 3552                                  ndmp_stop_local_reader(session, cmds);
3579 3553                                  ndmp_wait_for_reader(cmds);
3580 3554                                  (void) pthread_join(rdtp, NULL);
3581 3555                                  ndmp_stop_remote_reader(session);
3582 3556                                  goto restore_out;
3583 3557                          }
3584 3558                  }
3585 3559  
3586 3560                  cmds->tcs_command->tc_ref++;
3587 3561                  cmds->tcs_writer_count++;
3588 3562  
3589 3563                  if (tm_tar_ops.tm_getdir != NULL) {
3590 3564                          char errbuf[256];
3591 3565  
3592 3566                          err = (tm_tar_ops.tm_getdir)(cmds, cmds->tcs_command,
3593 3567                              nlp->nlp_jstat, &rn, 1, 1, sels, &excl, flags, 0,
3594      -                            nlp->nlp_backup_path, session->hardlink_q);
     3568 +                            nlp->nlp_mountpoint, session->hardlink_q);
3595 3569                          /*
3596 3570                           * If the fatal error from tm_getdir looks like an
3597 3571                           * errno code, we send the error description to DMA.
3598 3572                           */
3599 3573                          if (err > 0 && strerror_r(err, errbuf,
3600 3574                              sizeof (errbuf)) == 0) {
3601 3575                                  MOD_LOGV3(params, NDMP_LOG_ERROR,
3602 3576                                      "Fatal error during the restore: %s\n",
3603 3577                                      errbuf);
3604 3578                          }
↓ open down ↓ 14 lines elided ↑ open up ↑
3619 3593  
3620 3594                  /* exit as if there was an internal error */
3621 3595                  if (session->ns_eof)
3622 3596                          err = -1;
3623 3597                  if (err == -1)
3624 3598                          result = EIO;
3625 3599          }
3626 3600  
3627 3601          (void) send_unrecovered_list_v3(params, nlp); /* nothing restored. */
3628 3602          if (session->ns_data.dd_abort) {
3629      -                NDMP_LOG(LOG_DEBUG, "Restoring to \"%s\" aborted.",
     3603 +                syslog(LOG_DEBUG, "Restoring to \"%s\" aborted.",
3630 3604                      (nlp->nlp_restore_path) ? nlp->nlp_restore_path : "NULL");
3631 3605                  result = EINTR;
3632 3606                  ndmpd_audit_restore(session->ns_connection,
3633 3607                      nlp->nlp_restore_path,
3634 3608                      session->ns_data.dd_data_addr.addr_type,
3635 3609                      session->ns_tape.td_adapter_name, result);
3636 3610                  err = -1;
3637 3611          } else {
3638      -                NDMP_LOG(LOG_DEBUG, "Restoring to \"%s\" finished. (%d)",
     3612 +                syslog(LOG_DEBUG, "Restoring to \"%s\" finished. (%d)",
3639 3613                      (nlp->nlp_restore_path) ? nlp->nlp_restore_path : "NULL",
3640 3614                      err);
3641 3615                  ndmpd_audit_restore(session->ns_connection,
3642 3616                      nlp->nlp_restore_path,
3643 3617                      session->ns_data.dd_data_addr.addr_type,
3644 3618                      session->ns_tape.td_adapter_name, result);
3645 3619  
3646 3620  restore_out:
3647 3621                  /* Plug-in module */
3648 3622                  if (ndmp_pl != NULL &&
3649 3623                      ndmp_pl->np_post_restore != NULL &&
3650 3624                      ndmp_pl->np_post_restore(ndmp_pl, &nctx, err) == -1) {
3651      -                        NDMP_LOG(LOG_DEBUG, "Post-restore plug-in: %m");
     3625 +                        syslog(LOG_DEBUG, "Post-restore plug-in: %m");
3652 3626                          err = -1;
3653 3627                  }
3654 3628          }
3655 3629  
3656 3630          NDMP_FREE(sels);
3657      -        free_structs_v3(session, jname);
     3631 +        free_structs_v3(session);
3658 3632  
3659 3633          return (err);
3660 3634  }
3661 3635  
3662 3636  
3663 3637  /*
3664 3638   * ndmp_backup_get_params_v3
3665 3639   *
3666 3640   * Get the backup parameters from the NDMP env variables
3667 3641   * and log them in the system log and as normal messages
↓ open down ↓ 19 lines elided ↑ open up ↑
3687 3661          nlp = ndmp_get_nlp(session);
3688 3662          if (!nlp) {
3689 3663                  MOD_LOGV3(params, NDMP_LOG_ERROR,
3690 3664                      "Internal error: NULL nlp.\n");
3691 3665                  return (NDMP_ILLEGAL_ARGS_ERR);
3692 3666          } else {
3693 3667                  if (!(nlp->nlp_backup_path = get_backup_path_v3(params)) ||
3694 3668                      !is_valid_backup_dir_v3(params, nlp->nlp_backup_path))
3695 3669                  return (NDMP_ILLEGAL_ARGS_ERR);
3696 3670          }
3697      -
3698 3671          nlp->nlp_backup_path = get_absolute_path(nlp->nlp_backup_path);
3699 3672          if (!nlp->nlp_backup_path)
3700 3673                  return (NDMP_ILLEGAL_ARGS_ERR);
3701 3674  
3702      -        if (fs_is_chkpntvol(nlp->nlp_backup_path) ||
3703      -            fs_is_rdonly(nlp->nlp_backup_path) ||
3704      -            !fs_is_chkpnt_enabled(nlp->nlp_backup_path))
     3675 +        /*
     3676 +         * Assume volume is not checkpointed unless found to be below
     3677 +         */
     3678 +        NLP_UNSET(nlp, NLPF_CHKPNTED_PATH);
     3679 +
     3680 +        /*
     3681 +         * Get the zfs volume name from the backup path and store in
     3682 +         * nlp_vol.
     3683 +         */
     3684 +        if (get_zfsvolname(nlp->nlp_vol,
     3685 +            sizeof (nlp->nlp_vol), nlp->nlp_backup_path) == -1) {
     3686 +                syslog(LOG_ERR,
     3687 +                    "Cannot get volume from [%s] on create",
     3688 +                    nlp->nlp_backup_path);
     3689 +                NDMP_FREE(nlp->nlp_params);
     3690 +                return (-1);
     3691 +        }
     3692 +
     3693 +        /*
     3694 +         * Find out if this data is already checkpointed via. an AutoSync
     3695 +         * or HPR snapshot. If it is, set the flag, and extract the snapshot
     3696 +         * name to use as the nlp_job_name otherwise use the normal
     3697 +         * 'NdmpBackup-nnnn' format.
     3698 +         */
     3699 +        if (fs_is_checkpointed(nlp) &&
     3700 +            (ndmp_autosync_support || ndmp_hpr_support)) {
3705 3701                  NLP_SET(nlp, NLPF_CHKPNTED_PATH);
3706      -        else
3707      -                NLP_UNSET(nlp, NLPF_CHKPNTED_PATH);
     3702 +                syslog(LOG_DEBUG, ">>>> Checkpointed dataset found <<<<");
     3703 +        }
3708 3704  
     3705 +        (void) ndmp_new_job_name(nlp->nlp_job_name,
     3706 +            sizeof (nlp->nlp_job_name));
     3707 +
     3708 +        syslog(LOG_DEBUG, "New backup job name [%s]",
     3709 +            nlp->nlp_job_name);
     3710 +
3709 3711          /* Should the st_ctime be ignored when backing up? */
3710 3712          if (ndmp_ignore_ctime) {
3711      -                NDMP_LOG(LOG_DEBUG, "ignoring st_ctime");
     3713 +                syslog(LOG_DEBUG, "ignoring st_ctime");
3712 3714                  NLP_SET(nlp, NLPF_IGNCTIME);
3713 3715          } else {
3714 3716                  NLP_UNSET(nlp, NLPF_IGNCTIME);
3715 3717          }
3716 3718  
3717 3719          if (ndmp_include_lmtime == TRUE) {
3718      -                NDMP_LOG(LOG_DEBUG, "including st_lmtime");
     3720 +                syslog(LOG_DEBUG, "including st_lmtime");
3719 3721                  NLP_SET(nlp, NLPF_INCLMTIME);
3720 3722          } else {
3721 3723                  NLP_UNSET(nlp, NLPF_INCLMTIME);
3722 3724          }
3723 3725  
3724      -        NDMP_LOG(LOG_DEBUG, "flags %x", nlp->nlp_flags);
     3726 +        syslog(LOG_DEBUG, "flags %x", nlp->nlp_flags);
3725 3727  
3726 3728          get_hist_env_v3(params, nlp);
3727 3729          get_exc_env_v3(params, nlp);
3728 3730          get_inc_env_v3(params, nlp);
3729 3731          get_direct_env_v3(params, nlp);
3730 3732          return (get_backup_level_v3(params, nlp));
3731 3733  }
3732 3734  
3733 3735  
3734 3736  /*
↓ open down ↓ 11 lines elided ↑ open up ↑
3746 3748   *   0: on success
3747 3749   *   != 0: otherwise
3748 3750   */
3749 3751  int
3750 3752  ndmpd_tar_backup_starter_v3(void *arg)
3751 3753  {
3752 3754          ndmpd_module_params_t *params = arg;
3753 3755          int err;
3754 3756          ndmpd_session_t *session;
3755 3757          ndmp_lbr_params_t *nlp;
3756      -        char jname[TLM_MAX_BACKUP_JOB_NAME];
3757      -        ndmp_bkup_size_arg_t sarg;
3758      -        pthread_t tid;
3759 3758  
3760 3759          session = (ndmpd_session_t *)(params->mp_daemon_cookie);
3761 3760          *(params->mp_module_cookie) = nlp = ndmp_get_nlp(session);
3762 3761          ndmp_session_ref(session);
3763      -        (void) ndmp_new_job_name(jname);
3764 3762  
     3763 +        pthread_cleanup_push(backup_dataset_destroy, nlp);
     3764 +
3765 3765          err = 0;
3766      -        if (!NLP_ISCHKPNTED(nlp) &&
3767      -            ndmp_create_snapshot(nlp->nlp_backup_path, jname) < 0) {
     3766 +        if (backup_dataset_create(nlp) < 0) {
3768 3767                  MOD_LOGV3(params, NDMP_LOG_ERROR,
3769 3768                      "Creating checkpoint on \"%s\".\n",
3770 3769                      nlp->nlp_backup_path);
3771 3770                  err = -1;
3772 3771          }
3773 3772  
3774      -        NDMP_LOG(LOG_DEBUG, "err %d, chkpnted %c",
3775      -            err, NDMP_YORN(NLP_ISCHKPNTED(nlp)));
     3773 +        syslog(LOG_DEBUG, "BACKUP STARTED [%s]", nlp->nlp_snapname);
3776 3774  
3777 3775          if (err == 0) {
3778      -                sarg.bs_session = session;
3779      -                sarg.bs_jname = jname;
3780      -                sarg.bs_path = nlp->nlp_backup_path;
3781      -
3782 3776                  /* Get an estimate of the data size */
3783      -                if (pthread_create(&tid, NULL, (funct_t)get_backup_size,
3784      -                    (void *)&sarg) == 0)
3785      -                        (void) pthread_detach(tid);
     3777 +                (void) get_backup_size(nlp);
3786 3778  
3787      -                err = ndmp_get_cur_bk_time(nlp, &nlp->nlp_cdate, jname);
     3779 +                err = ndmp_get_cur_bk_time(nlp, &nlp->nlp_cdate);
3788 3780                  if (err != 0) {
3789      -                        NDMP_LOG(LOG_DEBUG, "err %d", err);
     3781 +                        syslog(LOG_ERR,
     3782 +                            "Failed to get current backup time %d", err);
3790 3783                  } else {
3791 3784                          log_bk_params_v3(session, params, nlp);
3792      -                        err = tar_backup_v3(session, params, nlp, jname);
     3785 +                        err = tar_backup_v3(session, params, nlp);
3793 3786                  }
3794 3787          }
3795 3788  
3796      -        if (!NLP_ISCHKPNTED(nlp))
3797      -                (void) ndmp_remove_snapshot(nlp->nlp_backup_path, jname);
     3789 +        pthread_cleanup_pop(B_TRUE);
3798 3790  
3799      -        NDMP_LOG(LOG_DEBUG, "err %d, update %c",
3800      -            err, NDMP_YORN(NLP_SHOULD_UPDATE(nlp)));
3801      -
3802 3791          if (err == 0)
3803 3792                  save_backup_date_v3(params, nlp);
3804 3793  
3805 3794          MOD_DONE(params, err);
3806 3795  
3807 3796          /* nlp_params is allocated in start_backup_v3() */
3808 3797          NDMP_FREE(nlp->nlp_params);
3809 3798          NDMP_FREE(nlp->nlp_backup_path);
3810 3799  
3811 3800          NS_DEC(nbk);
3812 3801          ndmp_session_unref(session);
     3802 +        syslog(LOG_DEBUG, "BACKUP COMPLETE [%s] (as jobname %s)",
     3803 +            nlp->nlp_snapname, nlp->nlp_job_name);
3813 3804          return (err);
3814      -
3815 3805  }
3816 3806  
3817 3807  
3818 3808  /*
3819 3809   * ndmpd_tar_backup_abort_v3
3820 3810   *
3821 3811   * Abort the backup operation and stop the reader thread.
3822 3812   *
3823 3813   * Parameters:
3824 3814   *   module_cookie (input) - pointer to the nlp structure
↓ open down ↓ 36 lines elided ↑ open up ↑
3861 3851   *   != NDMP_NO_ERR: otherwise
3862 3852   */
3863 3853  ndmp_error
3864 3854  ndmp_restore_get_params_v3(ndmpd_session_t *session,
3865 3855      ndmpd_module_params_t *params)
3866 3856  {
3867 3857          ndmp_error rv;
3868 3858          ndmp_lbr_params_t *nlp;
3869 3859  
3870 3860          if (!(nlp = ndmp_get_nlp(session))) {
3871      -                NDMP_LOG(LOG_DEBUG, "nlp is NULL");
     3861 +                syslog(LOG_DEBUG, "nlp is NULL");
3872 3862                  rv = NDMP_ILLEGAL_ARGS_ERR;
3873 3863          } else if (!(nlp->nlp_backup_path = get_backup_path_v3(params)))
3874 3864                  rv = NDMP_ILLEGAL_ARGS_ERR;
3875 3865          else if ((nlp->nlp_nfiles = session->ns_data.dd_nlist_len) == 0) {
3876      -                NDMP_LOG(LOG_DEBUG, "nfiles: %d", nlp->nlp_nfiles);
     3866 +                syslog(LOG_DEBUG, "nfiles: %d", nlp->nlp_nfiles);
3877 3867                  rv = NDMP_ILLEGAL_ARGS_ERR;
3878 3868          } else if (get_rs_path_v3(params, nlp) != NDMP_NO_ERR) {
3879 3869                  rv = NDMP_ILLEGAL_ARGS_ERR;
3880 3870          } else if ((rv = fix_nlist_v3(session, params, nlp)) != NDMP_NO_ERR) {
3881      -                NDMP_LOG(LOG_DEBUG, "fix_nlist_v3: %d", rv);
     3871 +                syslog(LOG_DEBUG, "fix_nlist_v3: %d", rv);
3882 3872          } else {
3883 3873                  rv = NDMP_NO_ERR;
3884 3874                  get_direct_env_v3(params, nlp);
3885 3875                  if (NLP_ISSET(nlp, NLPF_DIRECT)) {
3886 3876                          if (NLP_ISSET(nlp, NLPF_RECURSIVE)) {
3887 3877                                  /* Currently we dont support DAR on directory */
3888      -                                NDMP_LOG(LOG_DEBUG,
     3878 +                                syslog(LOG_DEBUG,
3889 3879                                      "Can't have RECURSIVE and DIRECT together");
3890 3880                                  rv = NDMP_ILLEGAL_ARGS_ERR;
3891 3881                                  return (rv);
3892 3882                          }
3893 3883  
3894 3884                          /*
3895 3885                           * DAR can be done if all the fh_info's are valid.
3896 3886                           */
3897 3887                          if (allvalidfh(session, params)) {
3898 3888                                  ndmp_sort_nlist_v3(session);
↓ open down ↓ 85 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX