From patchwork Mon Apr 16 11:39:59 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [24/32] debugfs: make dump and cat cmd support inline data X-Patchwork-Submitter: Zheng Liu X-Patchwork-Id: 152808 Message-Id: <1334576407-4007-25-git-send-email-wenqing.lz@taobao.com> To: linux-ext4@vger.kernel.org Cc: Zheng Liu Date: Mon, 16 Apr 2012 19:39:59 +0800 From: Zheng Liu List-Id: From: Zheng Liu dump and cat command use the same function to read data. We can direclty read the data from inode. Signed-off-by: Zheng Liu --- debugfs/dump.c | 30 ++++++++++++++++++++++++++++++ 1 files changed, 30 insertions(+), 0 deletions(-) diff --git a/debugfs/dump.c b/debugfs/dump.c index a15a0b7..10ebe7a 100644 --- a/debugfs/dump.c +++ b/debugfs/dump.c @@ -113,6 +113,36 @@ static void dump_file(const char *cmdname, ext2_ino_t ino, int fd, if (debugfs_read_inode(ino, &inode, cmdname)) return; + if (ext2fs_has_inline_data(current_fs, ino)) { + struct ext2_inode_large *inode; + struct inline_data idata; + void *inline_start; + int inline_size; + + retval = ext2fs_get_mem(EXT2_INODE_SIZE(current_fs->super), + &inode); + if (retval) + return; + + retval = ext2fs_read_inode_full(current_fs, ino, (void *)inode, + EXT2_INODE_SIZE(current_fs->super)); + if (retval) + goto out; + write(fd, inode->i_block, EXT4_MIN_INLINE_DATA_SIZE); + + ext2fs_iget_extra_inode(current_fs, inode, &idata); + if (idata.inline_off == EXT4_MIN_INLINE_DATA_SIZE) + goto out; + + inline_start = ext2fs_get_inline_xattr_pos(inode, &idata); + inline_size = idata.inline_size - EXT4_MIN_INLINE_DATA_SIZE; + write(fd, inline_start, inline_size); + +out: + ext2fs_free_mem(&inode); + return; + } + retval = ext2fs_file_open(current_fs, ino, 0, &e2_file); if (retval) { com_err(cmdname, retval, "while opening ext2 file");