summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
authorReza Sabdar <Reza.Sabdar@Sun.COM>2009-10-26 09:32:50 -0700
committerReza Sabdar <Reza.Sabdar@Sun.COM>2009-10-26 09:32:50 -0700
commit5a3c8170a75e81911cf43e0eb9ad5cdabb5f1e39 (patch)
tree20ec18222c52c2c58925dee2e536b821a6783c37 /usr/src
parente23de8e200dff2773d80ce69c9f2e745b544b9b1 (diff)
downloadillumos-gate-5a3c8170a75e81911cf43e0eb9ad5cdabb5f1e39.tar.gz
6886789 NDMP backups skip files in certain situations -- sometimes silently
Diffstat (limited to 'usr/src')
-rw-r--r--usr/src/cmd/ndmpd/tlm/tlm_traverse.c23
1 files changed, 12 insertions, 11 deletions
diff --git a/usr/src/cmd/ndmpd/tlm/tlm_traverse.c b/usr/src/cmd/ndmpd/tlm/tlm_traverse.c
index 27c9b5d456..0af343a92f 100644
--- a/usr/src/cmd/ndmpd/tlm/tlm_traverse.c
+++ b/usr/src/cmd/ndmpd/tlm/tlm_traverse.c
@@ -255,22 +255,19 @@ fs_getdents(int fildes, struct dirent *buf, size_t *nbyte,
(void) strlcat(file_path, ptr->d_name, PATH_MAX);
(void) memset(&fh, 0, sizeof (fs_fhandle_t));
- rv = lstat64(file_path, &st);
- if (rv != 0)
+ if (lstat64(file_path, &st) != 0) {
+ rv = -1;
break;
+ }
fh.fh_fid = st.st_ino;
if (S_ISDIR(st.st_mode))
goto skip_entry;
- rv = fs_populate_dents(darg, strlen(ptr->d_name),
- (char *)ptr->d_name, n_entries, &st, &fh);
-
- if (rv != 0) {
- rv = 0;
+ if (fs_populate_dents(darg, strlen(ptr->d_name),
+ (char *)ptr->d_name, n_entries, &st, &fh) != 0)
break;
- }
skip_entry:
p = p + ptr->d_reclen;
@@ -672,9 +669,7 @@ traverse_level_nondir(struct fs_traverse *ftp,
n_entries = 0;
rv = fs_getdents(fd, buf, &len, pnp->tn_path, &tsp->ts_dpos,
&cookie_verf, &n_entries, darg);
- if (n_entries == 0)
- break;
- if (rv != 0) {
+ if (rv < 0) {
traverse_stats.fss_readdir_err++;
NDMP_LOG(LOG_DEBUG, "Error %d on readdir(%s) pos %d",
@@ -689,6 +684,12 @@ traverse_level_nondir(struct fs_traverse *ftp,
*/
rv = SKIP_ENTRY;
continue;
+ } else {
+ /* Break at the end of directory */
+ if (rv > 0)
+ rv = 0;
+ else
+ break;
}
/* LINTED imporper alignment */