diff options
author | Reza Sabdar <Reza.Sabdar@Sun.COM> | 2009-10-26 09:32:50 -0700 |
---|---|---|
committer | Reza Sabdar <Reza.Sabdar@Sun.COM> | 2009-10-26 09:32:50 -0700 |
commit | 5a3c8170a75e81911cf43e0eb9ad5cdabb5f1e39 (patch) | |
tree | 20ec18222c52c2c58925dee2e536b821a6783c37 /usr/src | |
parent | e23de8e200dff2773d80ce69c9f2e745b544b9b1 (diff) | |
download | illumos-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.c | 23 |
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 */ |