CURRENT_TIME macro is not appropriate for filesystems as it
doesn't use the right granularity for filesystem timestamps.
Use current_fs_time() instead.

Signed-off-by: Deepa Dinamani <[email protected]>
Cc: Joern Engel <[email protected]>
Cc: Prasad Joshi <[email protected]>
Cc: [email protected]
---
 fs/logfs/dir.c       | 11 +++++++----
 fs/logfs/file.c      |  2 +-
 fs/logfs/inode.c     |  3 +--
 fs/logfs/readwrite.c |  7 ++++---
 4 files changed, 13 insertions(+), 10 deletions(-)

diff --git a/fs/logfs/dir.c b/fs/logfs/dir.c
index 542468e..3b5f279 100644
--- a/fs/logfs/dir.c
+++ b/fs/logfs/dir.c
@@ -212,7 +212,8 @@ static void abort_transaction(struct inode *inode, struct 
logfs_transaction *ta)
 
 static int logfs_unlink(struct inode *dir, struct dentry *dentry)
 {
-       struct logfs_super *super = logfs_super(dir->i_sb);
+       struct super_block *sb = dir->i_sb;
+       struct logfs_super *super = logfs_super(sb);
        struct inode *inode = d_inode(dentry);
        struct logfs_transaction *ta;
        struct page *page;
@@ -226,7 +227,8 @@ static int logfs_unlink(struct inode *dir, struct dentry 
*dentry)
        ta->state = UNLINK_1;
        ta->ino = inode->i_ino;
 
-       inode->i_ctime = dir->i_ctime = dir->i_mtime = CURRENT_TIME;
+       inode->i_ctime = dir->i_ctime =
+               dir->i_mtime = current_fs_time(sb);
 
        page = logfs_get_dd_page(dir, dentry);
        if (!page) {
@@ -540,7 +542,8 @@ static int logfs_link(struct dentry *old_dentry, struct 
inode *dir,
 {
        struct inode *inode = d_inode(old_dentry);
 
-       inode->i_ctime = dir->i_ctime = dir->i_mtime = CURRENT_TIME;
+       inode->i_ctime = dir->i_ctime =
+               dir->i_mtime = current_fs_time(dir->i_sb);
        ihold(inode);
        inc_nlink(inode);
        mark_inode_dirty_sync(inode);
@@ -573,7 +576,7 @@ static int logfs_delete_dd(struct inode *dir, loff_t pos)
         * (crc-protected) journal.
         */
        BUG_ON(beyond_eof(dir, pos));
-       dir->i_ctime = dir->i_mtime = CURRENT_TIME;
+       dir->i_ctime = dir->i_mtime = current_fs_time(dir->i_sb);
        log_dir(" Delete dentry (%lx, %llx)\n", dir->i_ino, pos);
        return logfs_delete(dir, pos, NULL);
 }
diff --git a/fs/logfs/file.c b/fs/logfs/file.c
index 61eaeb1..339ae40 100644
--- a/fs/logfs/file.c
+++ b/fs/logfs/file.c
@@ -211,7 +211,7 @@ long logfs_ioctl(struct file *file, unsigned int cmd, 
unsigned long arg)
                li->li_flags = flags;
                inode_unlock(inode);
 
-               inode->i_ctime = CURRENT_TIME;
+               inode->i_ctime = current_fs_time(inode->i_sb);
                mark_inode_dirty_sync(inode);
                return 0;
 
diff --git a/fs/logfs/inode.c b/fs/logfs/inode.c
index db9cfc5..65eaf09 100644
--- a/fs/logfs/inode.c
+++ b/fs/logfs/inode.c
@@ -213,8 +213,7 @@ static void logfs_init_inode(struct super_block *sb, struct 
inode *inode)
        i_gid_write(inode, 0);
        inode->i_size   = 0;
        inode->i_blocks = 0;
-       inode->i_ctime  = CURRENT_TIME;
-       inode->i_mtime  = CURRENT_TIME;
+       inode->i_ctime  = inode->i_mtime = current_fs_time(sb);
        li->li_refcount = 1;
        INIT_LIST_HEAD(&li->li_freeing_list);
 
diff --git a/fs/logfs/readwrite.c b/fs/logfs/readwrite.c
index 20973c9..361a2d0 100644
--- a/fs/logfs/readwrite.c
+++ b/fs/logfs/readwrite.c
@@ -1539,14 +1539,15 @@ static int grow_inode(struct inode *inode, u64 bix, 
level_t level)
 
 static int __logfs_write_buf(struct inode *inode, struct page *page, long 
flags)
 {
-       struct logfs_super *super = logfs_super(inode->i_sb);
+       struct super_block *sb = inode->i_sb;
+       struct logfs_super *super = logfs_super(sb);
        pgoff_t index = page->index;
        u64 bix;
        level_t level;
        int err;
 
        flags |= WF_WRITE | WF_DELETE;
-       inode->i_ctime = inode->i_mtime = CURRENT_TIME;
+       inode->i_ctime = inode->i_mtime = current_fs_time(sb);
 
        logfs_unpack_index(index, &bix, &level);
        if (logfs_block(page) && logfs_block(page)->reserved_bytes)
@@ -1578,7 +1579,7 @@ static int __logfs_delete(struct inode *inode, struct 
page *page)
        long flags = WF_DELETE;
        int err;
 
-       inode->i_ctime = inode->i_mtime = CURRENT_TIME;
+       inode->i_ctime = inode->i_mtime = current_fs_time(inode->i_sb);
 
        if (page->index < I0_BLOCKS)
                return logfs_write_direct(inode, page, flags);
-- 
1.9.1

Reply via email to