changeset 9012:ee7366019c63

6810894 OFAST NDMP: Remote restore failed via NBU 6787737 Amber Road NDMP: Backup fails with "Out of memory" error on NDMP client 6807614 EBS744:old file recover on NAS 7000 (amber road) over new file, only recovers ACLs 6807326 ndmpd should use timeout on SCMD_TEST_UNIT_READY
author Reza Sabdar <Reza.Sabdar@Sun.COM>
date Wed, 11 Mar 2009 10:34:45 -0700
parents cb6d246c25a8
children fd216110d8a6
files usr/src/cmd/ndmpd/ndmp/ndmpd_main.c usr/src/cmd/ndmpd/ndmp/ndmpd_util.c usr/src/cmd/ndmpd/tlm/tlm_restore_writer.c usr/src/cmd/ndmpd/tlm/tlm_traverse.c
diffstat 4 files changed, 14 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/usr/src/cmd/ndmpd/ndmp/ndmpd_main.c	Wed Mar 11 15:40:10 2009 +0100
+++ b/usr/src/cmd/ndmpd/ndmp/ndmpd_main.c	Wed Mar 11 10:34:45 2009 -0700
@@ -50,7 +50,6 @@
 #include "ndmpd.h"
 #include "ndmpd_common.h"
 
-
 /* zfs library handle & mutex */
 libzfs_handle_t *zlibh;
 mutex_t	zlib_mtx;
@@ -259,10 +258,12 @@
 	(void) sigaction(SIGHUP, &act, NULL);
 	(void) sigaction(SIGINT, &act, NULL);
 	(void) sigaction(SIGUSR1, &act, NULL);
+	(void) sigaction(SIGPIPE, &act, NULL);
 	(void) sigdelset(&set, SIGTERM);
 	(void) sigdelset(&set, SIGHUP);
 	(void) sigdelset(&set, SIGINT);
 	(void) sigdelset(&set, SIGUSR1);
+	(void) sigdelset(&set, SIGPIPE);
 
 	(void) daemonize_init(argv[0]);
 
@@ -302,6 +303,9 @@
 		case 0:
 			break;
 
+		case SIGPIPE:
+			break;
+
 		case SIGHUP:
 			/* Refresh SMF properties */
 			if (ndmpd_load_prop())
--- a/usr/src/cmd/ndmpd/ndmp/ndmpd_util.c	Wed Mar 11 15:40:10 2009 +0100
+++ b/usr/src/cmd/ndmpd/ndmp/ndmpd_util.c	Wed Mar 11 10:34:45 2009 -0700
@@ -2595,6 +2595,7 @@
 	ucmd.uscsi_cdb = (caddr_t)&cdb;
 	ucmd.uscsi_cdblen = CDB_GROUP0;
 	ucmd.uscsi_flags |= USCSI_SILENT;
+	ucmd.uscsi_timeout = 60;	/* Allow maximum 1 min */
 
 	retval = ioctl(dev_id, USCSICMD, &ucmd);
 
--- a/usr/src/cmd/ndmpd/tlm/tlm_restore_writer.c	Wed Mar 11 15:40:10 2009 +0100
+++ b/usr/src/cmd/ndmpd/tlm/tlm_restore_writer.c	Wed Mar 11 10:34:45 2009 -0700
@@ -1160,7 +1160,7 @@
 		}
 		if (want_this_file) {
 
-			*fp = open(real_name, O_CREAT | O_WRONLY,
+			*fp = open(real_name, O_CREAT | O_TRUNC | O_WRONLY,
 			    S_IRUSR | S_IWUSR);
 			if (*fp == -1) {
 				NDMP_LOG(LOG_ERR,
--- a/usr/src/cmd/ndmpd/tlm/tlm_traverse.c	Wed Mar 11 15:40:10 2009 +0100
+++ b/usr/src/cmd/ndmpd/tlm/tlm_traverse.c	Wed Mar 11 10:34:45 2009 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
@@ -259,6 +259,12 @@
 		return (errno);
 
 	fh->fh_fid = st->st_ino;
+
+	if (!S_ISDIR(st->st_mode)) {
+		fh->fh_fpath = NULL;
+		return (0);
+	}
+
 	if (pl)
 		fh->fh_fpath = fs_add_pathlist(path, pl);
 	else