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
        
*** 36,47 ****
--- 36,49 ----
   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
   * POSSIBILITY OF SUCH DAMAGE.
   */
  /* Copyright (c) 2007, The Storage Networking Industry Association. */
  /* Copyright (c) 1996, 1997 PDC, Network Appliance. All Rights Reserved */
+ /* Copyright 2017 Nexenta Systems, Inc. All rights reserved. */
  
  #include <sys/types.h>
+ #include <syslog.h>
  #include <ctype.h>
  #include <errno.h>
  #include <fcntl.h>
  #include <stdlib.h>
  #include "ndmpd_common.h"
*** 101,111 ****
  {
          ndmp_scsi_close_reply reply;
          ndmpd_session_t *session = ndmp_get_client_data(connection);
  
          if (session->ns_scsi.sd_is_open == -1) {
!                 NDMP_LOG(LOG_ERR, "SCSI device is not open.");
                  reply.error = NDMP_DEV_NOT_OPEN_ERR;
                  ndmp_send_reply(connection, (void *) &reply,
                      "sending scsi_close reply");
                  return;
          }
--- 103,113 ----
  {
          ndmp_scsi_close_reply reply;
          ndmpd_session_t *session = ndmp_get_client_data(connection);
  
          if (session->ns_scsi.sd_is_open == -1) {
!                 syslog(LOG_ERR, "SCSI device is not open.");
                  reply.error = NDMP_DEV_NOT_OPEN_ERR;
                  ndmp_send_reply(connection, (void *) &reply,
                      "sending scsi_close reply");
                  return;
          }
*** 224,243 ****
  
          ndmpd_session_t *session = ndmp_get_client_data(connection);
          struct uscsi_cmd  cmd;
  
          if (session->ns_scsi.sd_devid == -1) {
!                 NDMP_LOG(LOG_ERR, "SCSI device is not open.");
                  reply.error = NDMP_DEV_NOT_OPEN_ERR;
          } else {
                  reply.error = NDMP_NO_ERR;
                  (void) memset((void*)&cmd, 0, sizeof (cmd));
                  cmd.uscsi_flags |= USCSI_RESET;
                  if (ioctl(session->ns_scsi.sd_devid, USCSICMD, &cmd) < 0) {
!                         NDMP_LOG(LOG_ERR, "USCSI reset failed: %m.");
!                         NDMP_LOG(LOG_DEBUG,
!                             "ioctl(USCSICMD) USCSI_RESET failed: %m.");
                          reply.error = NDMP_IO_ERR;
                  }
          }
  
          ndmp_send_reply(connection, (void *) &reply,
--- 226,243 ----
  
          ndmpd_session_t *session = ndmp_get_client_data(connection);
          struct uscsi_cmd  cmd;
  
          if (session->ns_scsi.sd_devid == -1) {
!                 syslog(LOG_ERR, "SCSI device is not open.");
                  reply.error = NDMP_DEV_NOT_OPEN_ERR;
          } else {
                  reply.error = NDMP_NO_ERR;
                  (void) memset((void*)&cmd, 0, sizeof (cmd));
                  cmd.uscsi_flags |= USCSI_RESET;
                  if (ioctl(session->ns_scsi.sd_devid, USCSICMD, &cmd) < 0) {
!                         syslog(LOG_ERR, "USCSI reset failed: %m.");
                          reply.error = NDMP_IO_ERR;
                  }
          }
  
          ndmp_send_reply(connection, (void *) &reply,
*** 263,273 ****
  void
  ndmpd_scsi_reset_bus_v2(ndmp_connection_t *connection, void *body)
  {
          ndmp_scsi_reset_bus_reply reply;
  
-         NDMP_LOG(LOG_DEBUG, "request not supported");
          reply.error = NDMP_NOT_SUPPORTED_ERR;
  
          ndmp_send_reply(connection, (void *) &reply,
              "sending scsi_reset_bus reply");
  }
--- 263,272 ----
*** 294,304 ****
  
          if (session->ns_scsi.sd_is_open == -1 ||
              !session->ns_scsi.sd_valid_target_set) {
                  (void) memset((void *) &reply, 0, sizeof (reply));
  
-                 NDMP_LOG(LOG_ERR, "SCSI device is not open.");
                  reply.error = NDMP_DEV_NOT_OPEN_ERR;
                  ndmp_send_reply(connection, (void *) &reply,
                      "sending scsi_execute_cdb reply");
          } else {
                  ndmp_execute_cdb(session, session->ns_scsi.sd_adapter_name,
--- 293,302 ----
*** 414,446 ****
          ndmpd_session_t *session = ndmp_get_client_data(connection);
          char adptnm[SCSI_MAX_NAME];
          int sid, lun;
          int err;
          scsi_adapter_t *sa;
!         int devid;
  
          err = NDMP_NO_ERR;
  
          if (session->ns_tape.td_fd != -1 || session->ns_scsi.sd_is_open != -1) {
-                 NDMP_LOG(LOG_ERR,
-                     "Session already has a tape or scsi device open.");
                  err = NDMP_DEVICE_OPENED_ERR;
          } else if ((sa = scsi_get_adapter(0)) != NULL) {
-                 NDMP_LOG(LOG_DEBUG, "Adapter device found: %s", devname);
                  (void) strlcpy(adptnm, devname, SCSI_MAX_NAME-2);
                  adptnm[SCSI_MAX_NAME-1] = '\0';
                  sid = lun = -1;
  
                  scsi_find_sid_lun(sa, devname, &sid, &lun);
                  if (ndmp_open_list_find(devname, sid, lun) == NULL &&
                      (devid = open(devname, O_RDWR | O_NDELAY)) < 0) {
!                         NDMP_LOG(LOG_ERR, "Failed to open device %s: %m.",
                              devname);
                          err = NDMP_NO_DEVICE_ERR;
                  }
          } else {
!                 NDMP_LOG(LOG_ERR, "%s: No such SCSI adapter.", devname);
                  err = NDMP_NO_DEVICE_ERR;
          }
  
          if (err != NDMP_NO_ERR) {
                  scsi_open_send_reply(connection, err);
--- 412,441 ----
          ndmpd_session_t *session = ndmp_get_client_data(connection);
          char adptnm[SCSI_MAX_NAME];
          int sid, lun;
          int err;
          scsi_adapter_t *sa;
!         int devid = -1;
  
          err = NDMP_NO_ERR;
  
          if (session->ns_tape.td_fd != -1 || session->ns_scsi.sd_is_open != -1) {
                  err = NDMP_DEVICE_OPENED_ERR;
          } else if ((sa = scsi_get_adapter(0)) != NULL) {
                  (void) strlcpy(adptnm, devname, SCSI_MAX_NAME-2);
                  adptnm[SCSI_MAX_NAME-1] = '\0';
                  sid = lun = -1;
  
                  scsi_find_sid_lun(sa, devname, &sid, &lun);
                  if (ndmp_open_list_find(devname, sid, lun) == NULL &&
                      (devid = open(devname, O_RDWR | O_NDELAY)) < 0) {
!                         syslog(LOG_ERR, "Failed to open device %s: %m.",
                              devname);
                          err = NDMP_NO_DEVICE_ERR;
                  }
          } else {
!                 syslog(LOG_ERR, "%s: No such SCSI adapter.", devname);
                  err = NDMP_NO_DEVICE_ERR;
          }
  
          if (err != NDMP_NO_ERR) {
                  scsi_open_send_reply(connection, err);
*** 510,527 ****
  
          if (session->ns_scsi.sd_is_open == -1) {
                  reply.error = NDMP_DEV_NOT_OPEN_ERR;
          } else if (!scsi_dev_exists(session->ns_scsi.sd_adapter_name, sid,
              lun)) {
!                 NDMP_LOG(LOG_ERR, "No such SCSI device: target %d lun %d.",
                      sid, lun);
                  reply.error = NDMP_NO_DEVICE_ERR;
          } else {
                  type = scsi_get_devtype(session->ns_scsi.sd_adapter_name, sid,
                      lun);
                  if (type != DTYPE_SEQUENTIAL && type != DTYPE_CHANGER) {
!                         NDMP_LOG(LOG_ERR,
                              "Not a tape or robot device: target %d lun %d.",
                              sid, lun);
                          reply.error = NDMP_ILLEGAL_ARGS_ERR;
                  }
          }
--- 505,522 ----
  
          if (session->ns_scsi.sd_is_open == -1) {
                  reply.error = NDMP_DEV_NOT_OPEN_ERR;
          } else if (!scsi_dev_exists(session->ns_scsi.sd_adapter_name, sid,
              lun)) {
!                 syslog(LOG_ERR, "No such SCSI device: target %d lun %d.",
                      sid, lun);
                  reply.error = NDMP_NO_DEVICE_ERR;
          } else {
                  type = scsi_get_devtype(session->ns_scsi.sd_adapter_name, sid,
                      lun);
                  if (type != DTYPE_SEQUENTIAL && type != DTYPE_CHANGER) {
!                         syslog(LOG_ERR,
                              "Not a tape or robot device: target %d lun %d.",
                              sid, lun);
                          reply.error = NDMP_ILLEGAL_ARGS_ERR;
                  }
          }
*** 555,565 ****
                          reply.error = NDMP_IO_ERR;
                  }
          }
  
          if (reply.error == NDMP_NO_ERR) {
-                 NDMP_LOG(LOG_DEBUG, "Updated sid %d lun %d", sid, lun);
                  session->ns_scsi.sd_sid = sid;
                  session->ns_scsi.sd_lun = lun;
                  session->ns_scsi.sd_valid_target_set = TRUE;
          }
  
--- 550,559 ----