[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Bug-tar] Cannot savedir: Not a directory
From: |
Jean-Louis Martineau |
Subject: |
[Bug-tar] Cannot savedir: Not a directory |
Date: |
Thu, 13 Aug 2009 12:35:17 -0400 |
User-agent: |
Thunderbird 2.0.0.21 (X11/20090320) |
A user get this error when doing incremental backup:
/bin/tar: ./opt/novell/nss/mnt/.pools/DATA: Cannot savedir: Not a
directory
He is using '--ignore-failed-read', why tar exit with code 2?
This directory is strange, a size of 0 and 1 link:
$ stat /opt/novell/nss/mnt/.pools/DATA
File: `/opt/novell/nss/mnt/.pools/DATA'
Size: 0 Blocks: 0 IO Block: 4096 directory
Device: fd08h/64776d Inode: 127 Links: 1
Access: (0000/d---------) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2009-07-31 07:29:58.270585641 -0500
Modify: 2009-07-31 07:29:58.270585641 -0500
Change: 2009-07-31 07:29:58.270585641 -0500
It is Novell Storage Services//
<http://en.wikipedia.org/wiki/Novell_Storage_Services> (NSS).
The parent is on different filesystem:
stat /opt/novell/nss/mnt/.pools
File: `/opt/novell/nss/mnt/.pools'
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: fd05h/64773d Inode: 1556530 Links: 3
Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2009-08-12 00:05:21.000000000 -0500
Modify: 2009-07-17 19:54:39.000000000 -0500
Change: 2009-07-29 15:39:22.000000000 -0500
He also use the '--one-file-system' option, why tar try to do a savedir
on the directory if it is on a different filesystem?
The attached path delay the call to savedir until it is needed.
I havent tested it on the user system, I want to know if it break
something before sending it to the user.
Jean-Louis
diff --git a/src/incremen.c b/src/incremen.c
index bb2ba2f..6da029a 100644
--- a/src/incremen.c
+++ b/src/incremen.c
@@ -691,7 +691,7 @@ makedumpdir (struct directory *directory, const char *dir)
struct directory *
scan_directory (char *dir, dev_t device, bool cmdline)
{
- char *dirp = savedir (dir); /* for scanning directory */
+ char *dirp = NULL; /* for scanning directory */
char *name_buffer; /* directory, `/', and directory member */
size_t name_buffer_size; /* allocated size of name_buffer, minus 2 */
size_t name_length; /* used length in name_buffer */
@@ -699,8 +699,6 @@ scan_directory (char *dir, dev_t device, bool cmdline)
struct directory *directory;
char ch;
- if (! dirp)
- savedir_error (dir);
name_buffer_size = strlen (dir) + NAME_FIELD_SIZE;
name_buffer = xmalloc (name_buffer_size + 2);
@@ -714,7 +712,6 @@ scan_directory (char *dir, dev_t device, bool cmdline)
children = CHANGED_CHILDREN;
but changed to: */
free (name_buffer);
- free (dirp);
return NULL;
}
@@ -730,6 +727,13 @@ scan_directory (char *dir, dev_t device, bool cmdline)
name_buffer[++name_length] = 0;
}
+ if (directory->children != NO_CHILDREN)
+ {
+ dirp = savedir (dir);
+ if (! dirp)
+ savedir_error (dir);
+ }
+
if (dirp && directory->children != NO_CHILDREN)
{
char *entry; /* directory entry being scanned */
- [Bug-tar] Cannot savedir: Not a directory,
Jean-Louis Martineau <=