]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
configfs_create(): lift parent timestamp updates into callers
authorAl Viro <viro@zeniv.linux.org.uk>
Tue, 19 May 2026 03:48:50 +0000 (23:48 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Mon, 8 Jun 2026 18:53:41 +0000 (14:53 -0400)
... and do *not* do it in ->lookup() case.  stat foo/bar
should not update mtime of foo, TYVM...

Reviewed-by: Jan Kara <jack@suse.cz>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/configfs/dir.c
fs/configfs/inode.c

index 4a4bad1741cfe93a986ff7a6bd9f467479324b45..b382d60e7ebc2ef7c4c906c2db5adfbb741b1ab1 100644 (file)
@@ -296,6 +296,7 @@ static int configfs_create_dir(struct config_item *item, struct dentry *dentry,
        int error;
        umode_t mode = S_IFDIR| S_IRWXU | S_IRUGO | S_IXUGO;
        struct dentry *p = dentry->d_parent;
+       struct inode *p_inode = d_inode(p);
        struct inode *inode;
 
        BUG_ON(!item);
@@ -316,7 +317,8 @@ static int configfs_create_dir(struct config_item *item, struct dentry *dentry,
        /* directory inodes start off with i_nlink == 2 (for "." entry) */
        inc_nlink(inode);
        d_make_persistent(dentry, inode);
-       inc_nlink(d_inode(p));
+       inc_nlink(p_inode);
+       inode_set_mtime_to_ts(p_inode, inode_set_ctime_current(p_inode));
        item->ci_dentry = dentry;
        return 0;
 
@@ -370,6 +372,7 @@ int configfs_create_link(struct configfs_dirent *target, struct dentry *parent,
        int err = 0;
        umode_t mode = S_IFLNK | S_IRWXUGO;
        struct configfs_dirent *p = parent->d_fsdata;
+       struct inode *p_inode = d_inode(parent);
        struct inode *inode;
 
        err = configfs_make_dirent(p, dentry, target, mode, CONFIGFS_ITEM_LINK,
@@ -384,6 +387,7 @@ int configfs_create_link(struct configfs_dirent *target, struct dentry *parent,
        inode->i_link = body;
        inode->i_op = &configfs_symlink_inode_operations;
        d_make_persistent(dentry, inode);
+       inode_set_mtime_to_ts(p_inode, inode_set_ctime_current(p_inode));
        return 0;
 
 out_remove:
index 3c26b6c443be9a4972e95b74fd93afc6d7e79424..68290fe0e374fcf1a18926a2a42a15783789a1a4 100644 (file)
@@ -157,7 +157,6 @@ struct inode *configfs_create(struct dentry *dentry, umode_t mode)
 {
        struct inode *inode = NULL;
        struct configfs_dirent *sd;
-       struct inode *p_inode;
 
        if (!dentry)
                return ERR_PTR(-ENOENT);
@@ -170,8 +169,6 @@ struct inode *configfs_create(struct dentry *dentry, umode_t mode)
        if (!inode)
                return ERR_PTR(-ENOMEM);
 
-       p_inode = d_inode(dentry->d_parent);
-       inode_set_mtime_to_ts(p_inode, inode_set_ctime_current(p_inode));
        configfs_set_inode_lock_class(sd, inode);
        return inode;
 }