Merge tag 'for-6.7-rc1-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave...
[sfrench/cifs-2.6.git] / fs / btrfs / inode.c
index 137c4824ff912ed2e306b80cd919d02c3f9aafa4..9f5a9894f88f49156e9ddb7c4baac8ef1be252df 100644 (file)
@@ -3762,11 +3762,11 @@ static int btrfs_read_locked_inode(struct inode *inode,
        btrfs_inode_set_file_extent_range(BTRFS_I(inode), 0,
                        round_up(i_size_read(inode), fs_info->sectorsize));
 
-       inode->i_atime.tv_sec = btrfs_timespec_sec(leaf, &inode_item->atime);
-       inode->i_atime.tv_nsec = btrfs_timespec_nsec(leaf, &inode_item->atime);
+       inode_set_atime(inode, btrfs_timespec_sec(leaf, &inode_item->atime),
+                       btrfs_timespec_nsec(leaf, &inode_item->atime));
 
-       inode->i_mtime.tv_sec = btrfs_timespec_sec(leaf, &inode_item->mtime);
-       inode->i_mtime.tv_nsec = btrfs_timespec_nsec(leaf, &inode_item->mtime);
+       inode_set_mtime(inode, btrfs_timespec_sec(leaf, &inode_item->mtime),
+                       btrfs_timespec_nsec(leaf, &inode_item->mtime));
 
        inode_set_ctime(inode, btrfs_timespec_sec(leaf, &inode_item->ctime),
                        btrfs_timespec_nsec(leaf, &inode_item->ctime));
@@ -3928,19 +3928,19 @@ static void fill_inode_item(struct btrfs_trans_handle *trans,
        btrfs_set_token_inode_nlink(&token, item, inode->i_nlink);
 
        btrfs_set_token_timespec_sec(&token, &item->atime,
-                                    inode->i_atime.tv_sec);
+                                    inode_get_atime_sec(inode));
        btrfs_set_token_timespec_nsec(&token, &item->atime,
-                                     inode->i_atime.tv_nsec);
+                                     inode_get_atime_nsec(inode));
 
        btrfs_set_token_timespec_sec(&token, &item->mtime,
-                                    inode->i_mtime.tv_sec);
+                                    inode_get_mtime_sec(inode));
        btrfs_set_token_timespec_nsec(&token, &item->mtime,
-                                     inode->i_mtime.tv_nsec);
+                                     inode_get_mtime_nsec(inode));
 
        btrfs_set_token_timespec_sec(&token, &item->ctime,
-                                    inode_get_ctime(inode).tv_sec);
+                                    inode_get_ctime_sec(inode));
        btrfs_set_token_timespec_nsec(&token, &item->ctime,
-                                     inode_get_ctime(inode).tv_nsec);
+                                     inode_get_ctime_nsec(inode));
 
        btrfs_set_token_timespec_sec(&token, &item->otime, BTRFS_I(inode)->i_otime_sec);
        btrfs_set_token_timespec_nsec(&token, &item->otime, BTRFS_I(inode)->i_otime_nsec);
@@ -4135,8 +4135,7 @@ err:
        btrfs_i_size_write(dir, dir->vfs_inode.i_size - name->len * 2);
        inode_inc_iversion(&inode->vfs_inode);
        inode_inc_iversion(&dir->vfs_inode);
-       inode_set_ctime_current(&inode->vfs_inode);
-       dir->vfs_inode.i_mtime = inode_set_ctime_current(&dir->vfs_inode);
+       inode_set_mtime_to_ts(&dir->vfs_inode, inode_set_ctime_current(&dir->vfs_inode));
        ret = btrfs_update_inode(trans, dir);
 out:
        return ret;
@@ -4309,7 +4308,7 @@ static int btrfs_unlink_subvol(struct btrfs_trans_handle *trans,
 
        btrfs_i_size_write(dir, dir->vfs_inode.i_size - fname.disk_name.len * 2);
        inode_inc_iversion(&dir->vfs_inode);
-       dir->vfs_inode.i_mtime = inode_set_ctime_current(&dir->vfs_inode);
+       inode_set_mtime_to_ts(&dir->vfs_inode, inode_set_ctime_current(&dir->vfs_inode));
        ret = btrfs_update_inode_fallback(trans, dir);
        if (ret)
                btrfs_abort_transaction(trans, ret);
@@ -4959,7 +4958,8 @@ static int btrfs_setsize(struct inode *inode, struct iattr *attr)
        if (newsize != oldsize) {
                inode_inc_iversion(inode);
                if (!(mask & (ATTR_CTIME | ATTR_MTIME))) {
-                       inode->i_mtime = inode_set_ctime_current(inode);
+                       inode_set_mtime_to_ts(inode,
+                                             inode_set_ctime_current(inode));
                }
        }
 
@@ -5585,6 +5585,7 @@ static struct inode *new_simple_dir(struct inode *dir,
                                    struct btrfs_key *key,
                                    struct btrfs_root *root)
 {
+       struct timespec64 ts;
        struct inode *inode = new_inode(dir->i_sb);
 
        if (!inode)
@@ -5603,10 +5604,13 @@ static struct inode *new_simple_dir(struct inode *dir,
        inode->i_opflags &= ~IOP_XATTR;
        inode->i_fop = &simple_dir_operations;
        inode->i_mode = S_IFDIR | S_IRUGO | S_IWUSR | S_IXUGO;
-       inode->i_mtime = inode_set_ctime_current(inode);
-       inode->i_atime = dir->i_atime;
-       BTRFS_I(inode)->i_otime_sec = inode->i_mtime.tv_sec;
-       BTRFS_I(inode)->i_otime_nsec = inode->i_mtime.tv_nsec;
+
+       ts = inode_set_ctime_current(inode);
+       inode_set_mtime_to_ts(inode, ts);
+       inode_set_atime_to_ts(inode, inode_get_atime(dir));
+       BTRFS_I(inode)->i_otime_sec = ts.tv_sec;
+       BTRFS_I(inode)->i_otime_nsec = ts.tv_nsec;
+
        inode->i_uid = dir->i_uid;
        inode->i_gid = dir->i_gid;
 
@@ -6164,6 +6168,7 @@ static void btrfs_inherit_iflags(struct btrfs_inode *inode, struct btrfs_inode *
 int btrfs_create_new_inode(struct btrfs_trans_handle *trans,
                           struct btrfs_new_inode_args *args)
 {
+       struct timespec64 ts;
        struct inode *dir = args->dir;
        struct inode *inode = args->inode;
        const struct fscrypt_str *name = args->orphan ? NULL : &args->fname.disk_name;
@@ -6281,10 +6286,9 @@ int btrfs_create_new_inode(struct btrfs_trans_handle *trans,
                goto discard;
        }
 
-       inode->i_mtime = inode_set_ctime_current(inode);
-       inode->i_atime = inode->i_mtime;
-       BTRFS_I(inode)->i_otime_sec = inode->i_mtime.tv_sec;
-       BTRFS_I(inode)->i_otime_nsec = inode->i_mtime.tv_nsec;
+       ts = simple_inode_init_ts(inode);
+       BTRFS_I(inode)->i_otime_sec = ts.tv_sec;
+       BTRFS_I(inode)->i_otime_nsec = ts.tv_nsec;
 
        /*
         * We're going to fill the inode item now, so at this point the inode
@@ -6449,8 +6453,8 @@ int btrfs_add_link(struct btrfs_trans_handle *trans,
         * values (the ones it had when the fsync was done).
         */
        if (!test_bit(BTRFS_FS_LOG_RECOVERING, &root->fs_info->flags))
-               parent_inode->vfs_inode.i_mtime =
-                       inode_set_ctime_current(&parent_inode->vfs_inode);
+               inode_set_mtime_to_ts(&parent_inode->vfs_inode,
+                                     inode_set_ctime_current(&parent_inode->vfs_inode));
 
        ret = btrfs_update_inode(trans, parent_inode);
        if (ret)