Signed-off-by: Stefan Ring <stefanrin@xxxxxxxxx> --- db/metadump.c | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/db/metadump.c b/db/metadump.c index 59765263..57d6bc09 100644 --- a/db/metadump.c +++ b/db/metadump.c @@ -2269,6 +2269,25 @@ process_inode_data( return 1; } +static int +process_dev_inode( + xfs_dinode_t *dip) +{ + if (XFS_DFORK_NEXTENTS(dip, XFS_DATA_FORK)) { + if (show_warnings) + print_warning("inode %llu has unexpected extents", + (unsigned long long)cur_ino); + return 0; + } else { + if (zero_stale_data) { + unsigned int size = sizeof(xfs_dev_t); + memset(XFS_DFORK_DPTR(dip) + size, 0, + XFS_DFORK_DSIZE(dip, mp) - size); + } + return 1; + } +} + /* * when we process the inode, we may change the data in the data and/or * attribute fork if they are in short form and we are obfuscating names. @@ -2321,7 +2340,15 @@ process_inode( case S_IFREG: success = process_inode_data(dip, TYP_DATA); break; - default: ; + case S_IFIFO: + case S_IFCHR: + case S_IFBLK: + case S_IFSOCK: + success = process_dev_inode(dip); + need_new_crc = 1; + break; + default: + break; } nametable_clear(); -- 2.14.5