On Thu, Jul 12, 2018 at 09:13:46AM +0800, Shan Hai wrote: > > > On 2018年07月12日 09:03, Shan Hai wrote: > > > > > > On 2018年07月11日 21:08, Carlos Maiolino wrote: > > > On Fri, Jul 06, 2018 at 11:12:28AM +0800, Shan Hai wrote: > > > > Return non-zero blocks for inline data even though the inode has > > > > no external blocks, otherwise the "ls -ls" would show zero blocks > > > > occupied by the file. > > > > > > > Is there any issue you ran into while leaving inodes with zero > > > blocks allocated? > > > Inodes should actually report the real amount of allocated blocks, > > > not fake it. > > > Inodes with inlined data should actually report 0 blocks, otherwise, > > > many > > > applications which actually relies on the amount of allocated blocks > > > for each > > > file will misbehave. > > > > > > > Man ls(1) reads: > > > > -s, --size > > print the allocated size of each file, in blocks > > > > So the 'ls -ls' would report 0 blocks when the data is inlined, a file > > holds data > > but it consumes 0 blocks, how is it possible :), this patch fixes this > > problem. > > > > This patch is inspired by the > upstream commit 9206c561554c9 (ext4: return non-zero st_blocks for inline > data), > please refer it for details. The fact that we're following precedent set by ext4 is worth mentioning in the commit message. --D > Thanks > Shan Hai > > > Thanks > > Shan Hai > > > > Signed-off-by: Shan Hai <shan.hai@xxxxxxxxxx> > > > > --- > > > > fs/xfs/xfs_iops.c | 8 +++++++- > > > > 1 file changed, 7 insertions(+), 1 deletion(-) > > > > > > > > diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c > > > > index 0fa29f39d658..63be1355a473 100644 > > > > --- a/fs/xfs/xfs_iops.c > > > > +++ b/fs/xfs/xfs_iops.c > > > > @@ -500,8 +500,14 @@ xfs_vn_getattr( > > > > stat->atime = inode->i_atime; > > > > stat->mtime = inode->i_mtime; > > > > stat->ctime = inode->i_ctime; > > > > - stat->blocks = > > > > + > > > > + if (xfs_sb_version_hasinlinedata(&mp->m_sb) && > > > > + XFS_IFORK_FORMAT(ip, XFS_DATA_FORK) == XFS_DINODE_FMT_LOCAL) { > > > > + stat->blocks = BTOBB(XFS_ISIZE(ip)); > > > > + } else { > > > > + stat->blocks = > > > > XFS_FSB_TO_BB(mp, ip->i_d.di_nblocks + ip->i_delayed_blks); > > > > + } > > > > if (ip->i_d.di_version == 3) { > > > > if (request_mask & STATX_BTIME) { > > > > -- > > > > 2.11.0 > > > > > > > > -- > > > > To unsubscribe from this list: send the line "unsubscribe linux-xfs" in > > > > the body of a message to majordomo@xxxxxxxxxxxxxxx > > > > More majordomo info at http://vger.kernel.org/majordomo-info.html > > > > -- > > To unsubscribe from this list: send the line "unsubscribe linux-xfs" in > > the body of a message to majordomo@xxxxxxxxxxxxxxx > > More majordomo info at http://vger.kernel.org/majordomo-info.html > > -- > To unsubscribe from this list: send the line "unsubscribe linux-xfs" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-xfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html