diff options
-rw-r--r-- | fs/ext4/ext4.h | 1 | ||||
-rw-r--r-- | fs/ext4/file.c | 2 | ||||
-rw-r--r-- | fs/ext4/inode.c | 35 | ||||
-rw-r--r-- | fs/ext4/namei.c | 2 | ||||
-rw-r--r-- | fs/ext4/symlink.c | 3 |
5 files changed, 39 insertions, 4 deletions
diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h index f493af666591..fb69ee2388db 100644 --- a/fs/ext4/ext4.h +++ b/fs/ext4/ext4.h | |||
@@ -2466,6 +2466,7 @@ extern int ext4_setattr(struct dentry *, struct iattr *); | |||
2466 | extern int ext4_getattr(const struct path *, struct kstat *, u32, unsigned int); | 2466 | extern int ext4_getattr(const struct path *, struct kstat *, u32, unsigned int); |
2467 | extern void ext4_evict_inode(struct inode *); | 2467 | extern void ext4_evict_inode(struct inode *); |
2468 | extern void ext4_clear_inode(struct inode *); | 2468 | extern void ext4_clear_inode(struct inode *); |
2469 | extern int ext4_file_getattr(const struct path *, struct kstat *, u32, unsigned int); | ||
2469 | extern int ext4_sync_inode(handle_t *, struct inode *); | 2470 | extern int ext4_sync_inode(handle_t *, struct inode *); |
2470 | extern void ext4_dirty_inode(struct inode *, int); | 2471 | extern void ext4_dirty_inode(struct inode *, int); |
2471 | extern int ext4_change_inode_journal_flag(struct inode *, int); | 2472 | extern int ext4_change_inode_journal_flag(struct inode *, int); |
diff --git a/fs/ext4/file.c b/fs/ext4/file.c index 8210c1f43556..cefa9835f275 100644 --- a/fs/ext4/file.c +++ b/fs/ext4/file.c | |||
@@ -744,7 +744,7 @@ const struct file_operations ext4_file_operations = { | |||
744 | 744 | ||
745 | const struct inode_operations ext4_file_inode_operations = { | 745 | const struct inode_operations ext4_file_inode_operations = { |
746 | .setattr = ext4_setattr, | 746 | .setattr = ext4_setattr, |
747 | .getattr = ext4_getattr, | 747 | .getattr = ext4_file_getattr, |
748 | .listxattr = ext4_listxattr, | 748 | .listxattr = ext4_listxattr, |
749 | .get_acl = ext4_get_acl, | 749 | .get_acl = ext4_get_acl, |
750 | .set_acl = ext4_set_acl, | 750 | .set_acl = ext4_set_acl, |
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index 4247d8d25687..5d02b922afa3 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c | |||
@@ -5390,11 +5390,40 @@ err_out: | |||
5390 | int ext4_getattr(const struct path *path, struct kstat *stat, | 5390 | int ext4_getattr(const struct path *path, struct kstat *stat, |
5391 | u32 request_mask, unsigned int query_flags) | 5391 | u32 request_mask, unsigned int query_flags) |
5392 | { | 5392 | { |
5393 | struct inode *inode; | 5393 | struct inode *inode = d_inode(path->dentry); |
5394 | unsigned long long delalloc_blocks; | 5394 | struct ext4_inode *raw_inode; |
5395 | struct ext4_inode_info *ei = EXT4_I(inode); | ||
5396 | unsigned int flags; | ||
5397 | |||
5398 | if (EXT4_FITS_IN_INODE(raw_inode, ei, i_crtime)) { | ||
5399 | stat->result_mask |= STATX_BTIME; | ||
5400 | stat->btime.tv_sec = ei->i_crtime.tv_sec; | ||
5401 | stat->btime.tv_nsec = ei->i_crtime.tv_nsec; | ||
5402 | } | ||
5403 | |||
5404 | flags = ei->i_flags & EXT4_FL_USER_VISIBLE; | ||
5405 | if (flags & EXT4_APPEND_FL) | ||
5406 | stat->attributes |= STATX_ATTR_APPEND; | ||
5407 | if (flags & EXT4_COMPR_FL) | ||
5408 | stat->attributes |= STATX_ATTR_COMPRESSED; | ||
5409 | if (flags & EXT4_ENCRYPT_FL) | ||
5410 | stat->attributes |= STATX_ATTR_ENCRYPTED; | ||
5411 | if (flags & EXT4_IMMUTABLE_FL) | ||
5412 | stat->attributes |= STATX_ATTR_IMMUTABLE; | ||
5413 | if (flags & EXT4_NODUMP_FL) | ||
5414 | stat->attributes |= STATX_ATTR_NODUMP; | ||
5395 | 5415 | ||
5396 | inode = d_inode(path->dentry); | ||
5397 | generic_fillattr(inode, stat); | 5416 | generic_fillattr(inode, stat); |
5417 | return 0; | ||
5418 | } | ||
5419 | |||
5420 | int ext4_file_getattr(const struct path *path, struct kstat *stat, | ||
5421 | u32 request_mask, unsigned int query_flags) | ||
5422 | { | ||
5423 | struct inode *inode = d_inode(path->dentry); | ||
5424 | u64 delalloc_blocks; | ||
5425 | |||
5426 | ext4_getattr(path, stat, request_mask, query_flags); | ||
5398 | 5427 | ||
5399 | /* | 5428 | /* |
5400 | * If there is inline data in the inode, the inode will normally not | 5429 | * If there is inline data in the inode, the inode will normally not |
diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c index 6ad612c576fc..07e5e1405771 100644 --- a/fs/ext4/namei.c +++ b/fs/ext4/namei.c | |||
@@ -3912,6 +3912,7 @@ const struct inode_operations ext4_dir_inode_operations = { | |||
3912 | .tmpfile = ext4_tmpfile, | 3912 | .tmpfile = ext4_tmpfile, |
3913 | .rename = ext4_rename2, | 3913 | .rename = ext4_rename2, |
3914 | .setattr = ext4_setattr, | 3914 | .setattr = ext4_setattr, |
3915 | .getattr = ext4_getattr, | ||
3915 | .listxattr = ext4_listxattr, | 3916 | .listxattr = ext4_listxattr, |
3916 | .get_acl = ext4_get_acl, | 3917 | .get_acl = ext4_get_acl, |
3917 | .set_acl = ext4_set_acl, | 3918 | .set_acl = ext4_set_acl, |
@@ -3920,6 +3921,7 @@ const struct inode_operations ext4_dir_inode_operations = { | |||
3920 | 3921 | ||
3921 | const struct inode_operations ext4_special_inode_operations = { | 3922 | const struct inode_operations ext4_special_inode_operations = { |
3922 | .setattr = ext4_setattr, | 3923 | .setattr = ext4_setattr, |
3924 | .getattr = ext4_getattr, | ||
3923 | .listxattr = ext4_listxattr, | 3925 | .listxattr = ext4_listxattr, |
3924 | .get_acl = ext4_get_acl, | 3926 | .get_acl = ext4_get_acl, |
3925 | .set_acl = ext4_set_acl, | 3927 | .set_acl = ext4_set_acl, |
diff --git a/fs/ext4/symlink.c b/fs/ext4/symlink.c index 73b184d161fc..5c8fc53cb0e5 100644 --- a/fs/ext4/symlink.c +++ b/fs/ext4/symlink.c | |||
@@ -85,17 +85,20 @@ errout: | |||
85 | const struct inode_operations ext4_encrypted_symlink_inode_operations = { | 85 | const struct inode_operations ext4_encrypted_symlink_inode_operations = { |
86 | .get_link = ext4_encrypted_get_link, | 86 | .get_link = ext4_encrypted_get_link, |
87 | .setattr = ext4_setattr, | 87 | .setattr = ext4_setattr, |
88 | .getattr = ext4_getattr, | ||
88 | .listxattr = ext4_listxattr, | 89 | .listxattr = ext4_listxattr, |
89 | }; | 90 | }; |
90 | 91 | ||
91 | const struct inode_operations ext4_symlink_inode_operations = { | 92 | const struct inode_operations ext4_symlink_inode_operations = { |
92 | .get_link = page_get_link, | 93 | .get_link = page_get_link, |
93 | .setattr = ext4_setattr, | 94 | .setattr = ext4_setattr, |
95 | .getattr = ext4_getattr, | ||
94 | .listxattr = ext4_listxattr, | 96 | .listxattr = ext4_listxattr, |
95 | }; | 97 | }; |
96 | 98 | ||
97 | const struct inode_operations ext4_fast_symlink_inode_operations = { | 99 | const struct inode_operations ext4_fast_symlink_inode_operations = { |
98 | .get_link = simple_get_link, | 100 | .get_link = simple_get_link, |
99 | .setattr = ext4_setattr, | 101 | .setattr = ext4_setattr, |
102 | .getattr = ext4_getattr, | ||
100 | .listxattr = ext4_listxattr, | 103 | .listxattr = ext4_listxattr, |
101 | }; | 104 | }; |