Print this page
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

Split Close
Expand all
Collapse all
          --- old/usr/src/cmd/ndmpd/ndmp/ndmpd_scsi.c
          +++ new/usr/src/cmd/ndmpd/ndmp/ndmpd_scsi.c
↓ open down ↓ 30 lines elided ↑ open up ↑
  31   31   * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  32   32   * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  33   33   * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  34   34   * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  35   35   * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  36   36   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  37   37   * POSSIBILITY OF SUCH DAMAGE.
  38   38   */
  39   39  /* Copyright (c) 2007, The Storage Networking Industry Association. */
  40   40  /* Copyright (c) 1996, 1997 PDC, Network Appliance. All Rights Reserved */
       41 +/* Copyright 2017 Nexenta Systems, Inc. All rights reserved. */
  41   42  
  42   43  #include <sys/types.h>
       44 +#include <syslog.h>
  43   45  #include <ctype.h>
  44   46  #include <errno.h>
  45   47  #include <fcntl.h>
  46   48  #include <stdlib.h>
  47   49  #include "ndmpd_common.h"
  48   50  #include "ndmpd.h"
  49   51  #include <string.h>
  50   52  #include <sys/scsi/impl/uscsi.h>
  51   53  #include <sys/scsi/scsi.h>
  52   54  
↓ open down ↓ 43 lines elided ↑ open up ↑
  96   98   *   void
  97   99   */
  98  100  /*ARGSUSED*/
  99  101  void
 100  102  ndmpd_scsi_close_v2(ndmp_connection_t *connection, void *body)
 101  103  {
 102  104          ndmp_scsi_close_reply reply;
 103  105          ndmpd_session_t *session = ndmp_get_client_data(connection);
 104  106  
 105  107          if (session->ns_scsi.sd_is_open == -1) {
 106      -                NDMP_LOG(LOG_ERR, "SCSI device is not open.");
      108 +                syslog(LOG_ERR, "SCSI device is not open.");
 107  109                  reply.error = NDMP_DEV_NOT_OPEN_ERR;
 108  110                  ndmp_send_reply(connection, (void *) &reply,
 109  111                      "sending scsi_close reply");
 110  112                  return;
 111  113          }
 112  114          (void) ndmp_open_list_del(session->ns_scsi.sd_adapter_name,
 113  115              session->ns_scsi.sd_sid,
 114  116              session->ns_scsi.sd_lun);
 115  117          (void) close(session->ns_scsi.sd_devid);
 116  118  
↓ open down ↓ 102 lines elided ↑ open up ↑
 219  221  void
 220  222  ndmpd_scsi_reset_device_v2(ndmp_connection_t *connection, void *body)
 221  223  {
 222  224          ndmp_scsi_reset_device_reply reply;
 223  225  
 224  226  
 225  227          ndmpd_session_t *session = ndmp_get_client_data(connection);
 226  228          struct uscsi_cmd  cmd;
 227  229  
 228  230          if (session->ns_scsi.sd_devid == -1) {
 229      -                NDMP_LOG(LOG_ERR, "SCSI device is not open.");
      231 +                syslog(LOG_ERR, "SCSI device is not open.");
 230  232                  reply.error = NDMP_DEV_NOT_OPEN_ERR;
 231  233          } else {
 232  234                  reply.error = NDMP_NO_ERR;
 233  235                  (void) memset((void*)&cmd, 0, sizeof (cmd));
 234  236                  cmd.uscsi_flags |= USCSI_RESET;
 235  237                  if (ioctl(session->ns_scsi.sd_devid, USCSICMD, &cmd) < 0) {
 236      -                        NDMP_LOG(LOG_ERR, "USCSI reset failed: %m.");
 237      -                        NDMP_LOG(LOG_DEBUG,
 238      -                            "ioctl(USCSICMD) USCSI_RESET failed: %m.");
      238 +                        syslog(LOG_ERR, "USCSI reset failed: %m.");
 239  239                          reply.error = NDMP_IO_ERR;
 240  240                  }
 241  241          }
 242  242  
 243  243          ndmp_send_reply(connection, (void *) &reply,
 244  244              "sending scsi_reset_device reply");
 245  245  }
 246  246  
 247  247  
 248  248  /*
↓ open down ↓ 9 lines elided ↑ open up ↑
 258  258   *
 259  259   * Returns:
 260  260   *   void
 261  261   */
 262  262  /*ARGSUSED*/
 263  263  void
 264  264  ndmpd_scsi_reset_bus_v2(ndmp_connection_t *connection, void *body)
 265  265  {
 266  266          ndmp_scsi_reset_bus_reply reply;
 267  267  
 268      -        NDMP_LOG(LOG_DEBUG, "request not supported");
 269  268          reply.error = NDMP_NOT_SUPPORTED_ERR;
 270  269  
 271  270          ndmp_send_reply(connection, (void *) &reply,
 272  271              "sending scsi_reset_bus reply");
 273  272  }
 274  273  
 275  274  
 276  275  /*
 277  276   * ndmpd_scsi_execute_cdb_v2
 278  277   *
↓ open down ↓ 10 lines elided ↑ open up ↑
 289  288  ndmpd_scsi_execute_cdb_v2(ndmp_connection_t *connection, void *body)
 290  289  {
 291  290          ndmp_execute_cdb_request *request = (ndmp_execute_cdb_request *) body;
 292  291          ndmp_execute_cdb_reply reply;
 293  292          ndmpd_session_t *session = ndmp_get_client_data(connection);
 294  293  
 295  294          if (session->ns_scsi.sd_is_open == -1 ||
 296  295              !session->ns_scsi.sd_valid_target_set) {
 297  296                  (void) memset((void *) &reply, 0, sizeof (reply));
 298  297  
 299      -                NDMP_LOG(LOG_ERR, "SCSI device is not open.");
 300  298                  reply.error = NDMP_DEV_NOT_OPEN_ERR;
 301  299                  ndmp_send_reply(connection, (void *) &reply,
 302  300                      "sending scsi_execute_cdb reply");
 303  301          } else {
 304  302                  ndmp_execute_cdb(session, session->ns_scsi.sd_adapter_name,
 305  303                      session->ns_scsi.sd_sid, session->ns_scsi.sd_lun, request);
 306  304          }
 307  305  }
 308  306  
 309  307  
↓ open down ↓ 99 lines elided ↑ open up ↑
 409  407   *   void
 410  408   */
 411  409  static void
 412  410  common_open(ndmp_connection_t *connection, char *devname)
 413  411  {
 414  412          ndmpd_session_t *session = ndmp_get_client_data(connection);
 415  413          char adptnm[SCSI_MAX_NAME];
 416  414          int sid, lun;
 417  415          int err;
 418  416          scsi_adapter_t *sa;
 419      -        int devid;
      417 +        int devid = -1;
 420  418  
 421  419          err = NDMP_NO_ERR;
 422  420  
 423  421          if (session->ns_tape.td_fd != -1 || session->ns_scsi.sd_is_open != -1) {
 424      -                NDMP_LOG(LOG_ERR,
 425      -                    "Session already has a tape or scsi device open.");
 426  422                  err = NDMP_DEVICE_OPENED_ERR;
 427  423          } else if ((sa = scsi_get_adapter(0)) != NULL) {
 428      -                NDMP_LOG(LOG_DEBUG, "Adapter device found: %s", devname);
 429  424                  (void) strlcpy(adptnm, devname, SCSI_MAX_NAME-2);
 430  425                  adptnm[SCSI_MAX_NAME-1] = '\0';
 431  426                  sid = lun = -1;
 432  427  
 433  428                  scsi_find_sid_lun(sa, devname, &sid, &lun);
 434  429                  if (ndmp_open_list_find(devname, sid, lun) == NULL &&
 435  430                      (devid = open(devname, O_RDWR | O_NDELAY)) < 0) {
 436      -                        NDMP_LOG(LOG_ERR, "Failed to open device %s: %m.",
      431 +                        syslog(LOG_ERR, "Failed to open device %s: %m.",
 437  432                              devname);
 438  433                          err = NDMP_NO_DEVICE_ERR;
 439  434                  }
 440  435          } else {
 441      -                NDMP_LOG(LOG_ERR, "%s: No such SCSI adapter.", devname);
      436 +                syslog(LOG_ERR, "%s: No such SCSI adapter.", devname);
 442  437                  err = NDMP_NO_DEVICE_ERR;
 443  438          }
 444  439  
 445  440          if (err != NDMP_NO_ERR) {
 446  441                  scsi_open_send_reply(connection, err);
 447  442                  return;
 448  443          }
 449  444  
 450  445          switch (ndmp_open_list_add(connection, adptnm, sid, lun, devid)) {
 451  446          case 0:
↓ open down ↓ 53 lines elided ↑ open up ↑
 505  500          ndmp_scsi_set_target_reply reply;
 506  501          ndmpd_session_t *session = ndmp_get_client_data(connection);
 507  502          int type;
 508  503  
 509  504          reply.error = NDMP_NO_ERR;
 510  505  
 511  506          if (session->ns_scsi.sd_is_open == -1) {
 512  507                  reply.error = NDMP_DEV_NOT_OPEN_ERR;
 513  508          } else if (!scsi_dev_exists(session->ns_scsi.sd_adapter_name, sid,
 514  509              lun)) {
 515      -                NDMP_LOG(LOG_ERR, "No such SCSI device: target %d lun %d.",
      510 +                syslog(LOG_ERR, "No such SCSI device: target %d lun %d.",
 516  511                      sid, lun);
 517  512                  reply.error = NDMP_NO_DEVICE_ERR;
 518  513          } else {
 519  514                  type = scsi_get_devtype(session->ns_scsi.sd_adapter_name, sid,
 520  515                      lun);
 521  516                  if (type != DTYPE_SEQUENTIAL && type != DTYPE_CHANGER) {
 522      -                        NDMP_LOG(LOG_ERR,
      517 +                        syslog(LOG_ERR,
 523  518                              "Not a tape or robot device: target %d lun %d.",
 524  519                              sid, lun);
 525  520                          reply.error = NDMP_ILLEGAL_ARGS_ERR;
 526  521                  }
 527  522          }
 528  523  
 529  524          if (reply.error != NDMP_NO_ERR) {
 530  525                  ndmp_send_reply(connection, (void *) &reply,
 531  526                      "sending scsi_set_target reply");
 532  527                  return;
↓ open down ↓ 17 lines elided ↑ open up ↑
 550  545                          break;
 551  546                  case ENOMEM:
 552  547                          reply.error = NDMP_NO_MEM_ERR;
 553  548                          break;
 554  549                  default:
 555  550                          reply.error = NDMP_IO_ERR;
 556  551                  }
 557  552          }
 558  553  
 559  554          if (reply.error == NDMP_NO_ERR) {
 560      -                NDMP_LOG(LOG_DEBUG, "Updated sid %d lun %d", sid, lun);
 561  555                  session->ns_scsi.sd_sid = sid;
 562  556                  session->ns_scsi.sd_lun = lun;
 563  557                  session->ns_scsi.sd_valid_target_set = TRUE;
 564  558          }
 565  559  
 566  560          ndmp_send_reply(connection, (void *) &reply,
 567  561              "sending scsi_set_target reply");
 568  562  }
 569  563  
 570  564  /*
↓ open down ↓ 23 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX