From: Zheng Liu <gnehzuil.liu@gmail.com>
To: "Darrick J. Wong" <darrick.wong@oracle.com>
Cc: linux-ext4@vger.kernel.org, Theodore Ts'o <tytso@mit.edu>,
Zheng Liu <wenqing.lz@taobao.com>
Subject: Re: [PATCH v1 12/22] debugfs: handle inline_data in punch command
Date: Sat, 12 Oct 2013 15:22:38 +0800 [thread overview]
Message-ID: <20131012072238.GC3191@gmail.com> (raw)
In-Reply-To: <20131012003700.GV6860@birch.djwong.org>
Good catch! I will fix these problems.
Thanks,
- Zheng
On Fri, Oct 11, 2013 at 05:37:00PM -0700, Darrick J. Wong wrote:
> On Fri, Aug 02, 2013 at 05:49:39PM +0800, Zheng Liu wrote:
> > From: Zheng Liu <wenqing.lz@taobao.com>
> >
> > Now punch command only can truncate an inode with inline_data. The
> > start block must be 0 because the size of an inode shouldn't be greater
> > than one block.
> >
> > Signed-off-by: Theodore Ts'o <tytso@mit.edu>
> > Signed-off-by: Zheng Liu <wenqing.lz@taobao.com>
> > ---
> > lib/ext2fs/ext2fsP.h | 3 +++
> > lib/ext2fs/inline_data.c | 9 +++----
> > lib/ext2fs/punch.c | 59 ++++++++++++++++++++++++++++++++++++++++++++--
> > 3 files changed, 63 insertions(+), 8 deletions(-)
> >
> > diff --git a/lib/ext2fs/ext2fsP.h b/lib/ext2fs/ext2fsP.h
> > index ed89272..1e5aa32 100644
> > --- a/lib/ext2fs/ext2fsP.h
> > +++ b/lib/ext2fs/ext2fsP.h
> > @@ -110,6 +110,9 @@ extern errcode_t ext2fs_inline_data_find(ext2_filsys fs,
> > struct inline_data *data);
> > extern errcode_t ext2fs_inline_data_convert(ext2_filsys fs, ext2_ino_t ino,
> > void *priv_data);
> > +extern errcode_t ext2fs_inline_data_destory_data(ext2_filsys fs, ext2_ino_t ino,
>
> "destroy", not "destory" ?
>
> > + struct ext2_inode_large *inode,
> > + struct inline_data *data);
> >
> > /* Generic numeric progress meter */
> >
> > diff --git a/lib/ext2fs/inline_data.c b/lib/ext2fs/inline_data.c
> > index 5ca95ee..52ac133 100644
> > --- a/lib/ext2fs/inline_data.c
> > +++ b/lib/ext2fs/inline_data.c
> > @@ -28,9 +28,6 @@ static void ext2fs_inline_data_finish_convert(ext2_filsys fs, ext2_ino_t ino,
> > int inline_size);
> > static void ext2fs_update_final_de(ext2_filsys fs, char *de_buf,
> > int old_size, int new_size);
> > -static errcode_t ext2fs_inline_data_destory_data(ext2_filsys fs, ext2_ino_t ino,
> > - struct ext2_inode_large *inode,
> > - struct inline_data *data);
> >
> > errcode_t ext2fs_inline_data_find(ext2_filsys fs,
> > struct ext2_inode_large *inode,
> > @@ -78,9 +75,9 @@ static void *ext2fs_get_inline_xattr_pos(struct ext2_inode_large *inode,
> > return (void *) (IFIRST(header) + entry->e_value_offs);
> > }
> >
> > -static errcode_t ext2fs_inline_data_destory_data(ext2_filsys fs, ext2_ino_t ino,
> > - struct ext2_inode_large *inode,
> > - struct inline_data *data)
> > +errcode_t ext2fs_inline_data_destory_data(ext2_filsys fs, ext2_ino_t ino,
> > + struct ext2_inode_large *inode,
> > + struct inline_data *data)
> > {
> > struct ext2_ext_attr_ibody_header *header;
> > struct ext2_ext_attr_search s = {
> > diff --git a/lib/ext2fs/punch.c b/lib/ext2fs/punch.c
> > index b53653a..3bfbd4d 100644
> > --- a/lib/ext2fs/punch.c
> > +++ b/lib/ext2fs/punch.c
> > @@ -19,6 +19,7 @@
> >
> > #include "ext2_fs.h"
> > #include "ext2fs.h"
> > +#include "ext2fsP.h"
> >
> > #undef PUNCH_DEBUG
> >
> > @@ -281,7 +282,59 @@ errout:
> > ext2fs_extent_free(handle);
> > return retval;
> > }
> > -
> > +
> > +static errcode_t ext2fs_punch_inline_data(ext2_filsys fs, ext2_ino_t ino,
> > + blk64_t start, blk64_t end)
> > +{
> > + struct ext2_inode_large *inode;
> > + struct inline_data data;
> > + errcode_t retval;
> > +
> > + /*
> > + * 'start' must be 0 because here it's a block and the size of
> > + * an inode shouldn't greater than a block.
> > + */
> > + if (start != 0)
> > + return 0;
> > +
> > + /* Punching hole for inline_data is not supported */
> > + if ((unsigned int)end != ~0U)
> > + return EXT2_ET_OP_NOT_SUPPORTED;
>
> Um... shouldn't this be ~0ULL since end is blk64_t?
>
> For an inline_data file I doubt it matters, but ripping off high bits looks
> suspicious to me.
>
> --D
>
> > +
> > + retval = ext2fs_get_mem(EXT2_INODE_SIZE(fs->super), &inode);
> > + if (retval)
> > + return retval;
> > +
> > + retval = ext2fs_read_inode_full(fs, ino, (void *)inode,
> > + EXT2_INODE_SIZE(fs->super));
> > + if (retval)
> > + goto out;
> > +
> > + retval = ext2fs_inline_data_find(fs, inode, &data);
> > + if (retval)
> > + goto out;
> > +
> > + if (!data.inline_off)
> > + goto out;
> > +
> > + if (inode->i_extra_isize > (EXT2_INODE_SIZE(fs->super) -
> > + EXT2_GOOD_OLD_INODE_SIZE)) {
> > + retval = EXT2_ET_BAD_EXTRA_SIZE;
> > + goto out;
> > + }
> > +
> > + retval = ext2fs_inline_data_destory_data(fs, ino, inode, &data);
> > + if (retval)
> > + goto out;
> > +
> > + inode->i_size = 0;
> > + retval = ext2fs_write_inode_full(fs, ino, (void *)inode,
> > + EXT2_INODE_SIZE(fs->super));
> > +out:
> > + ext2fs_free_mem(&inode);
> > + return retval;
> > +}
> > +
> > /*
> > * Deallocate all logical blocks starting at start to end, inclusive.
> > * If end is ~0, then this is effectively truncate.
> > @@ -307,7 +360,9 @@ extern errcode_t ext2fs_punch(ext2_filsys fs, ext2_ino_t ino,
> > return retval;
> > inode = &inode_buf;
> > }
> > - if (inode->i_flags & EXT4_EXTENTS_FL)
> > + if (inode->i_flags & EXT4_INLINE_DATA_FL)
> > + return ext2fs_punch_inline_data(fs, ino, start, end);
> > + else if (inode->i_flags & EXT4_EXTENTS_FL)
> > retval = ext2fs_punch_extent(fs, ino, inode, start, end);
> > else {
> > blk_t count;
> > --
> > 1.7.9.7
> >
> > --
> > To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
> > the body of a message to majordomo@vger.kernel.org
> > More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2013-10-12 7:20 UTC|newest]
Thread overview: 67+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-08-02 9:49 [PATCH v1 00/22] e2fsprogs: inline data refinement patch set Zheng Liu
2013-08-02 9:49 ` [PATCH v1 01/22] libext2fs: add INLINE_DATA into EXT2_LIB_SOFTSUPP_INCOMPAT Zheng Liu
2013-10-13 3:21 ` Theodore Ts'o
2013-08-02 9:49 ` [PATCH v1 02/22] libext2fs: add function to check inline_data flag for an inode Zheng Liu
2013-08-02 9:49 ` [PATCH v1 03/22] libext2fs: add functions to operate on extended attribute Zheng Liu
2013-08-05 17:34 ` Darrick J. Wong
2013-08-05 23:14 ` Zheng Liu
2013-10-14 1:55 ` Theodore Ts'o
2013-10-14 2:41 ` Zheng Liu
2013-10-11 22:51 ` Darrick J. Wong
2013-10-12 5:51 ` Zheng Liu
2013-10-12 8:32 ` Darrick J. Wong
2013-10-12 8:41 ` Zheng Liu
2013-10-12 9:02 ` Darrick J. Wong
2013-10-12 9:08 ` Zheng Liu
2013-08-02 9:49 ` [PATCH v1 04/22] libext2fs: handle inline data in dir iterator function Zheng Liu
2013-10-11 23:33 ` Darrick J. Wong
2013-10-12 5:55 ` Zheng Liu
2013-10-13 22:51 ` Theodore Ts'o
2013-10-14 3:07 ` Zheng Liu
2013-10-14 1:58 ` Theodore Ts'o
2013-08-02 9:49 ` [PATCH v1 05/22] libext2fs: handle inline_data in block " Zheng Liu
2013-10-13 3:55 ` Theodore Ts'o
2013-10-14 0:44 ` Theodore Ts'o
2013-10-14 2:49 ` Zheng Liu
2013-08-02 9:49 ` [PATCH v1 06/22] debugfs: make stat command support inline data Zheng Liu
2013-10-11 23:43 ` Darrick J. Wong
2013-10-12 0:07 ` Darrick J. Wong
2013-08-02 9:49 ` [PATCH v1 07/22] debugfs: make mkdir and expanddir " Zheng Liu
2013-10-12 0:21 ` Darrick J. Wong
2013-10-12 7:15 ` Zheng Liu
2013-08-02 9:49 ` [PATCH v1 08/22] debugfs: make lsdel " Zheng Liu
2013-08-02 9:49 ` [PATCH v1 09/22] libext2fs: handle inline data in read/write function Zheng Liu
2013-08-02 9:49 ` [PATCH v1 10/22] debugfs: handle inline_data feature in dirsearch command Zheng Liu
2013-10-12 0:30 ` Darrick J. Wong
2013-10-12 7:21 ` Zheng Liu
2013-08-02 9:49 ` [PATCH v1 11/22] debugfs: handle inline_data feature in bmap command Zheng Liu
2013-08-02 9:49 ` [PATCH v1 12/22] debugfs: handle inline_data in punch command Zheng Liu
2013-10-12 0:37 ` Darrick J. Wong
2013-10-12 7:22 ` Zheng Liu [this message]
2013-08-02 9:49 ` [PATCH v1 13/22] libext2fs: add inline_data feature into EXT2_LIB_FEATURE_INCOMPAT_SUPP Zheng Liu
2013-08-02 9:49 ` [PATCH v1 14/22] mke2fs: add inline_data support in mke2fs Zheng Liu
2013-10-12 0:27 ` Darrick J. Wong
2013-10-12 8:08 ` Zheng Liu
2013-10-12 8:18 ` Darrick J. Wong
2013-10-12 8:31 ` Zheng Liu
2013-10-12 8:32 ` Darrick J. Wong
2013-08-02 9:49 ` [PATCH v1 15/22] tune2fs: add inline_data feature in tune2fs Zheng Liu
2013-10-12 0:39 ` Darrick J. Wong
2013-10-12 8:16 ` Zheng Liu
2013-10-12 8:23 ` Darrick J. Wong
2013-10-12 8:33 ` Zheng Liu
2013-08-02 9:49 ` [PATCH v1 16/22] e2fsck: add problem descriptions and check inline data feature Zheng Liu
2013-08-02 9:49 ` [PATCH v1 17/22] e2fsck: check inline_data in pass1 Zheng Liu
2013-10-12 0:47 ` Darrick J. Wong
2013-10-12 8:17 ` Zheng Liu
2013-08-02 9:49 ` [PATCH v1 18/22] e2fsck: check inline_data in pass2 Zheng Liu
2013-08-02 9:49 ` [PATCH v1 19/22] e2fsck: check inline_data in pass3 Zheng Liu
2013-10-12 0:54 ` Darrick J. Wong
2013-10-12 9:06 ` Zheng Liu
2013-10-12 9:09 ` Darrick J. Wong
2013-10-12 9:17 ` Zheng Liu
2013-10-12 9:22 ` Darrick J. Wong
2013-10-12 9:32 ` Zheng Liu
2013-08-02 9:49 ` [PATCH v1 20/22] tests: change result in f_bad_disconnected_inode Zheng Liu
2013-08-02 9:49 ` [PATCH v1 21/22] mke2fs: enable inline_data feature on ext4dev filesystem Zheng Liu
2013-08-02 9:49 ` [PATCH v1 22/22] libext2fs: add a unit test for inline data Zheng Liu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20131012072238.GC3191@gmail.com \
--to=gnehzuil.liu@gmail.com \
--cc=darrick.wong@oracle.com \
--cc=linux-ext4@vger.kernel.org \
--cc=tytso@mit.edu \
--cc=wenqing.lz@taobao.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.