This shaves 8 bytes off struct inode with a garden-variety Fedora
Kconfig.

Signed-off-by: Jeff Layton <jlay...@kernel.org>
---
 include/linux/fs.h | 53 ++++++++++++++++++++++++++--------------------
 1 file changed, 30 insertions(+), 23 deletions(-)

diff --git a/include/linux/fs.h b/include/linux/fs.h
index 84fdaf399fbe..485b5e21c8e5 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -671,9 +671,12 @@ struct inode {
        };
        dev_t                   i_rdev;
        loff_t                  i_size;
-       struct timespec64       __i_atime;
-       struct timespec64       __i_mtime;
-       struct timespec64       __i_ctime; /* use inode_*_ctime accessors! */
+       time64_t                i_atime_sec;
+       time64_t                i_mtime_sec;
+       time64_t                i_ctime_sec;
+       u32                     i_atime_nsec;
+       u32                     i_mtime_nsec;
+       u32                     i_ctime_nsec;
        spinlock_t              i_lock; /* i_blocks, i_bytes, maybe i_size */
        unsigned short          i_bytes;
        u8                      i_blkbits;
@@ -1517,23 +1520,27 @@ struct timespec64 inode_set_ctime_current(struct inode 
*inode);
 
 static inline time64_t inode_get_atime_sec(const struct inode *inode)
 {
-       return inode->__i_atime.tv_sec;
+       return inode->i_atime_sec;
 }
 
 static inline long inode_get_atime_nsec(const struct inode *inode)
 {
-       return inode->__i_atime.tv_nsec;
+       return inode->i_atime_nsec;
 }
 
 static inline struct timespec64 inode_get_atime(const struct inode *inode)
 {
-       return inode->__i_atime;
+       struct timespec64 ts = { .tv_sec  = inode_get_atime_sec(inode),
+                                .tv_nsec = inode_get_atime_nsec(inode) };
+
+       return ts;
 }
 
 static inline struct timespec64 inode_set_atime_to_ts(struct inode *inode,
                                                      struct timespec64 ts)
 {
-       inode->__i_atime = ts;
+       inode->i_atime_sec = ts.tv_sec;
+       inode->i_atime_nsec = ts.tv_nsec;
        return ts;
 }
 
@@ -1542,28 +1549,32 @@ static inline struct timespec64 inode_set_atime(struct 
inode *inode,
 {
        struct timespec64 ts = { .tv_sec  = sec,
                                 .tv_nsec = nsec };
+
        return inode_set_atime_to_ts(inode, ts);
 }
 
 static inline time64_t inode_get_mtime_sec(const struct inode *inode)
 {
-       return inode->__i_mtime.tv_sec;
+       return inode->i_mtime_sec;
 }
 
 static inline long inode_get_mtime_nsec(const struct inode *inode)
 {
-       return inode->__i_mtime.tv_nsec;
+       return inode->i_mtime_nsec;
 }
 
 static inline struct timespec64 inode_get_mtime(const struct inode *inode)
 {
-       return inode->__i_mtime;
+       struct timespec64 ts = { .tv_sec  = inode_get_mtime_sec(inode),
+                                .tv_nsec = inode_get_mtime_nsec(inode) };
+       return ts;
 }
 
 static inline struct timespec64 inode_set_mtime_to_ts(struct inode *inode,
                                                      struct timespec64 ts)
 {
-       inode->__i_mtime = ts;
+       inode->i_mtime_sec = ts.tv_sec;
+       inode->i_mtime_nsec = ts.tv_nsec;
        return ts;
 }
 
@@ -1577,34 +1588,30 @@ static inline struct timespec64 inode_set_mtime(struct 
inode *inode,
 
 static inline time64_t inode_get_ctime_sec(const struct inode *inode)
 {
-       return inode->__i_ctime.tv_sec;
+       return inode->i_ctime_sec;
 }
 
 static inline long inode_get_ctime_nsec(const struct inode *inode)
 {
-       return inode->__i_ctime.tv_nsec;
+       return inode->i_ctime_nsec;
 }
 
 static inline struct timespec64 inode_get_ctime(const struct inode *inode)
 {
-       return inode->__i_ctime;
+       struct timespec64 ts = { .tv_sec  = inode_get_ctime_sec(inode),
+                                .tv_nsec = inode_get_ctime_nsec(inode) };
+
+       return ts;
 }
 
 static inline struct timespec64 inode_set_ctime_to_ts(struct inode *inode,
                                                      struct timespec64 ts)
 {
-       inode->__i_ctime = ts;
+       inode->i_ctime_sec = ts.tv_sec;
+       inode->i_ctime_nsec = ts.tv_nsec;
        return ts;
 }
 
-/**
- * inode_set_ctime - set the ctime in the inode
- * @inode: inode in which to set the ctime
- * @sec: tv_sec value to set
- * @nsec: tv_nsec value to set
- *
- * Set the ctime in @inode to { @sec, @nsec }
- */
 static inline struct timespec64 inode_set_ctime(struct inode *inode,
                                                time64_t sec, long nsec)
 {
-- 
2.41.0

Reply via email to