Message ID | 1386072715-9869-16-git-send-email-wenqing.lz@taobao.com |
---|---|
State | Superseded, archived |
Headers | show |
On Tue, Dec 03, 2013 at 08:11:42PM +0800, Zheng Liu wrote: > From: Zheng Liu <wenqing.lz@taobao.com> > > No physical block mapping if an inode has inline data. > > Signed-off-by: Theodore Ts'o <tytso@mit.edu> > Signed-off-by: Zheng Liu <wenqing.lz@taobao.com> > --- > lib/ext2fs/bmap.c | 7 +++++++ > 1 file changed, 7 insertions(+) > > diff --git a/lib/ext2fs/bmap.c b/lib/ext2fs/bmap.c > index 5074587..0d043bd 100644 > --- a/lib/ext2fs/bmap.c > +++ b/lib/ext2fs/bmap.c > @@ -273,6 +273,13 @@ errcode_t ext2fs_bmap2(ext2_filsys fs, ext2_ino_t ino, struct ext2_inode *inode, > block_buf = buf; > } > > + /* > + * If an inode has inline data, that means that it doesn't have > + * any blocks and we shouldn't map any blocks for it. > + */ > + if (inode->i_flags & EXT4_INLINE_DATA_FL) > + goto done; If you move this to before the ext2fs_get_array() chunk above it, you could return straight out of the function. This should return an error code of some kind, because otherwise the client will think that something happened when the function returns 0, especially if BMAP_{ALLOC,SET,UNINIT} are passed in. --D > + > if (inode->i_flags & EXT4_EXTENTS_FL) { > retval = ext2fs_extent_open2(fs, ino, inode, &handle); > if (retval) > -- > 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 -- 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
On Tue, Dec 03, 2013 at 07:11:25PM -0800, Darrick J. Wong wrote: > On Tue, Dec 03, 2013 at 08:11:42PM +0800, Zheng Liu wrote: > > From: Zheng Liu <wenqing.lz@taobao.com> > > > > No physical block mapping if an inode has inline data. > > > > Signed-off-by: Theodore Ts'o <tytso@mit.edu> > > Signed-off-by: Zheng Liu <wenqing.lz@taobao.com> > > --- > > lib/ext2fs/bmap.c | 7 +++++++ > > 1 file changed, 7 insertions(+) > > > > diff --git a/lib/ext2fs/bmap.c b/lib/ext2fs/bmap.c > > index 5074587..0d043bd 100644 > > --- a/lib/ext2fs/bmap.c > > +++ b/lib/ext2fs/bmap.c > > @@ -273,6 +273,13 @@ errcode_t ext2fs_bmap2(ext2_filsys fs, ext2_ino_t ino, struct ext2_inode *inode, > > block_buf = buf; > > } > > > > + /* > > + * If an inode has inline data, that means that it doesn't have > > + * any blocks and we shouldn't map any blocks for it. > > + */ > > + if (inode->i_flags & EXT4_INLINE_DATA_FL) > > + goto done; > > If you move this to before the ext2fs_get_array() chunk above it, you could > return straight out of the function. Good catch! > > This should return an error code of some kind, because otherwise the client > will think that something happened when the function returns 0, especially if > BMAP_{ALLOC,SET,UNINIT} are passed in. Fair enough - Zheng > > --D > > > + > > if (inode->i_flags & EXT4_EXTENTS_FL) { > > retval = ext2fs_extent_open2(fs, ino, inode, &handle); > > if (retval) > > -- > > 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 -- 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
diff --git a/lib/ext2fs/bmap.c b/lib/ext2fs/bmap.c index 5074587..0d043bd 100644 --- a/lib/ext2fs/bmap.c +++ b/lib/ext2fs/bmap.c @@ -273,6 +273,13 @@ errcode_t ext2fs_bmap2(ext2_filsys fs, ext2_ino_t ino, struct ext2_inode *inode, block_buf = buf; } + /* + * If an inode has inline data, that means that it doesn't have + * any blocks and we shouldn't map any blocks for it. + */ + if (inode->i_flags & EXT4_INLINE_DATA_FL) + goto done; + if (inode->i_flags & EXT4_EXTENTS_FL) { retval = ext2fs_extent_open2(fs, ino, inode, &handle); if (retval)