Properly deal with inodes excluded from incremental dump
authorStelian Pop <stelian@popies.net>
Mon, 22 Mar 2010 16:08:10 +0000 (16:08 +0000)
committerStelian Pop <stelian@popies.net>
Mon, 22 Mar 2010 16:08:10 +0000 (16:08 +0000)
commitf6e1ffa4b425c735543d6c87f93c2e4bf207f1bb
tree7ba48bd4ef52f96ee117201ac15181d02a1869a7
parente6e3df1becf6e9bc6a28049f098791fa4f74ec43
Properly deal with inodes excluded from incremental dump

Files which are excluded from a dump (via -e or the nodump attribute)
still have their inode marked as in-use in the dump header.  This can
cause problems when restoring from an incremental dump, if that inode is
currently assigned in the symtable:

  - If assigned to a file that is being overwritten by another inode,
    the old entry will be renamed away, but never reclaimed, thus
    leaving the TMPNAME flag turned on and preventing its removal.

  - If assigned to a directory, that directory will not be removed by
    removeoldleaves(), and its entry will linger on in its parent's
    e_entries.

    - If its parent is being updated, removeleaf() will wrongly be
      called on the entry.  The above comment about TMPNAME also
      applies.

    - If its parent is being deleted, this will fail due to the entry's
      presence.
CHANGES
restore/restore.c