On Mon 18-02-19 09:07:02, yangerkun wrote: > Since statx, every filesystem should fill the attributes/attributes_mask > in routine getattr. But the generic_fillattr has not fill that, so add > ext2_getattr to do this. This can fix generic/424 while testing ext2. > > Reviewed-by: zhangyi (F) <yi.zhang@xxxxxxxxxx> > Signed-off-by: yangerkun <yangerkun@xxxxxxxxxx> Thanks for the patch. I have added it to my tree. Honza > --- > fs/ext2/ext2.h | 1 + > fs/ext2/file.c | 1 + > fs/ext2/inode.c | 26 ++++++++++++++++++++++++++ > fs/ext2/namei.c | 2 ++ > fs/ext2/symlink.c | 2 ++ > 5 files changed, 32 insertions(+) > > diff --git a/fs/ext2/ext2.h b/fs/ext2/ext2.h > index e770cd1..ae0cd9e 100644 > --- a/fs/ext2/ext2.h > +++ b/fs/ext2/ext2.h > @@ -774,6 +774,7 @@ extern int ext2_write_inode (struct inode *, struct writeback_control *); > extern void ext2_evict_inode(struct inode *); > extern int ext2_get_block(struct inode *, sector_t, struct buffer_head *, int); > extern int ext2_setattr (struct dentry *, struct iattr *); > +extern int ext2_getattr (const struct path *, struct kstat *, u32, unsigned int); > extern void ext2_set_inode_flags(struct inode *inode); > extern int ext2_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo, > u64 start, u64 len); > diff --git a/fs/ext2/file.c b/fs/ext2/file.c > index 28b2609..39c4772 100644 > --- a/fs/ext2/file.c > +++ b/fs/ext2/file.c > @@ -199,6 +199,7 @@ const struct inode_operations ext2_file_inode_operations = { > #ifdef CONFIG_EXT2_FS_XATTR > .listxattr = ext2_listxattr, > #endif > + .getattr = ext2_getattr, > .setattr = ext2_setattr, > .get_acl = ext2_get_acl, > .set_acl = ext2_set_acl, > diff --git a/fs/ext2/inode.c b/fs/ext2/inode.c > index e4bb938..8e6f3ca 100644 > --- a/fs/ext2/inode.c > +++ b/fs/ext2/inode.c > @@ -1635,6 +1635,32 @@ int ext2_write_inode(struct inode *inode, struct writeback_control *wbc) > return __ext2_write_inode(inode, wbc->sync_mode == WB_SYNC_ALL); > } > > +int ext2_getattr(const struct path *path, struct kstat *stat, > + u32 request_mask, unsigned int query_falgs) > +{ > + struct inode *inode = d_inode(path->dentry); > + struct ext2_inode_info *ei = EXT2_I(inode); > + unsigned int flags; > + > + flags = ei->i_flags & EXT2_FL_USER_VISIBLE; > + if (flags & EXT2_APPEND_FL) > + stat->attributes |= STATX_ATTR_APPEND; > + if (flags & EXT2_COMPR_FL) > + stat->attributes |= STATX_ATTR_COMPRESSED; > + if (flags & EXT2_IMMUTABLE_FL) > + stat->attributes |= STATX_ATTR_IMMUTABLE; > + if (flags & EXT2_NODUMP_FL) > + stat->attributes |= STATX_ATTR_NODUMP; > + stat->attributes_mask |= (STATX_ATTR_APPEND | > + STATX_ATTR_COMPRESSED | > + STATX_ATTR_ENCRYPTED | > + STATX_ATTR_IMMUTABLE | > + STATX_ATTR_NODUMP); > + > + generic_fillattr(inode, stat); > + return 0; > +} > + > int ext2_setattr(struct dentry *dentry, struct iattr *iattr) > { > struct inode *inode = d_inode(dentry); > diff --git a/fs/ext2/namei.c b/fs/ext2/namei.c > index 0c26dcc..ccfbbf5 100644 > --- a/fs/ext2/namei.c > +++ b/fs/ext2/namei.c > @@ -416,6 +416,7 @@ const struct inode_operations ext2_dir_inode_operations = { > #ifdef CONFIG_EXT2_FS_XATTR > .listxattr = ext2_listxattr, > #endif > + .getattr = ext2_getattr, > .setattr = ext2_setattr, > .get_acl = ext2_get_acl, > .set_acl = ext2_set_acl, > @@ -426,6 +427,7 @@ const struct inode_operations ext2_special_inode_operations = { > #ifdef CONFIG_EXT2_FS_XATTR > .listxattr = ext2_listxattr, > #endif > + .getattr = ext2_getattr, > .setattr = ext2_setattr, > .get_acl = ext2_get_acl, > .set_acl = ext2_set_acl, > diff --git a/fs/ext2/symlink.c b/fs/ext2/symlink.c > index d5589dd..00cdb86 100644 > --- a/fs/ext2/symlink.c > +++ b/fs/ext2/symlink.c > @@ -23,6 +23,7 @@ > > const struct inode_operations ext2_symlink_inode_operations = { > .get_link = page_get_link, > + .getattr = ext2_getattr, > .setattr = ext2_setattr, > #ifdef CONFIG_EXT2_FS_XATTR > .listxattr = ext2_listxattr, > @@ -31,6 +32,7 @@ const struct inode_operations ext2_symlink_inode_operations = { > > const struct inode_operations ext2_fast_symlink_inode_operations = { > .get_link = simple_get_link, > + .getattr = ext2_getattr, > .setattr = ext2_setattr, > #ifdef CONFIG_EXT2_FS_XATTR > .listxattr = ext2_listxattr, > -- > 2.9.5 > > -- Jan Kara <jack@xxxxxxxx> SUSE Labs, CR