diff options
author | tegge <tegge@FreeBSD.org> | 2006-05-13 20:41:37 +0000 |
---|---|---|
committer | tegge <tegge@FreeBSD.org> | 2006-05-13 20:41:37 +0000 |
commit | 7fe5e2882f4a98ffd534f1290b4d40512b024d1f (patch) | |
tree | 06a714f1dc2625dd841b793d1bcc7c2a32c6cad0 /sys/ufs | |
parent | 8059d90140c4a9ce79ab855086c8ed7747e24812 (diff) | |
download | FreeBSD-src-7fe5e2882f4a98ffd534f1290b4d40512b024d1f.zip FreeBSD-src-7fe5e2882f4a98ffd534f1290b4d40512b024d1f.tar.gz |
Expunge traces of unlinked snapshot files when making a new snapshot.
Diffstat (limited to 'sys/ufs')
-rw-r--r-- | sys/ufs/ffs/ffs_snapshot.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/sys/ufs/ffs/ffs_snapshot.c b/sys/ufs/ffs/ffs_snapshot.c index 78862b5..c8dcdcd 100644 --- a/sys/ufs/ffs/ffs_snapshot.c +++ b/sys/ufs/ffs/ffs_snapshot.c @@ -701,6 +701,13 @@ out1: else error = expunge_ufs2(vp, xp, fs, snapacct_ufs2, BLK_SNAP); + if (error == 0 && xp->i_effnlink == 0) { + error = ffs_freefile(ump, + copy_fs, + vp, + xp->i_number, + xp->i_mode); + } if (error) { fs->fs_snapinum[snaploc] = 0; goto done; @@ -989,11 +996,11 @@ expunge_ufs1(snapvp, cancelip, fs, acctfunc, expungetype) } /* * Set a snapshot inode to be a zero length file, regular files - * to be completely unallocated. + * or unlinked snapshots to be completely unallocated. */ dip = (struct ufs1_dinode *)bp->b_data + ino_to_fsbo(fs, cancelip->i_number); - if (expungetype == BLK_NOCOPY) + if (expungetype == BLK_NOCOPY || cancelip->i_effnlink == 0) dip->di_mode = 0; dip->di_size = 0; dip->di_blocks = 0; |