]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
convert simple_{link,unlink,rmdir,rename,fill_super}() to new primitives
authorAl Viro <viro@zeniv.linux.org.uk>
Tue, 4 Mar 2025 01:29:46 +0000 (20:29 -0500)
committerAl Viro <viro@zeniv.linux.org.uk>
Sun, 16 Nov 2025 06:35:01 +0000 (01:35 -0500)
Note that simple_unlink() et.al. are used by many filesystems; for now
they can not assume that persistency mark will have been set back
when the object got created.  Once all conversions are done we'll
have them complain if called for something that had not been marked
persistent.

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/libfs.c

index a033f35493d0c0906e404d265251acddb1e61404..80f288a771e30f7a118c52f0cafc8254bb14bc46 100644 (file)
@@ -630,7 +630,7 @@ static void __simple_recursive_removal(struct dentry *dentry,
                                if (callback)
                                        callback(victim);
                                fsnotify_delete(inode, d_inode(victim), victim);
-                               dput(victim);           // unpin it
+                               d_make_discardable(victim);
                        }
                        if (victim == dentry) {
                                inode_set_mtime_to_ts(inode,
@@ -764,8 +764,7 @@ int simple_link(struct dentry *old_dentry, struct inode *dir, struct dentry *den
                              inode_set_ctime_to_ts(dir, inode_set_ctime_current(inode)));
        inc_nlink(inode);
        ihold(inode);
-       dget(dentry);
-       d_instantiate(dentry, inode);
+       d_make_persistent(dentry, inode);
        return 0;
 }
 EXPORT_SYMBOL(simple_link);
@@ -798,7 +797,7 @@ int simple_unlink(struct inode *dir, struct dentry *dentry)
        inode_set_mtime_to_ts(dir,
                              inode_set_ctime_to_ts(dir, inode_set_ctime_current(inode)));
        drop_nlink(inode);
-       dput(dentry);
+       d_make_discardable(dentry);
        return 0;
 }
 EXPORT_SYMBOL(simple_unlink);
@@ -1078,7 +1077,8 @@ int simple_fill_super(struct super_block *s, unsigned long magic,
                simple_inode_init_ts(inode);
                inode->i_fop = files->ops;
                inode->i_ino = i;
-               d_add(dentry, inode);
+               d_make_persistent(dentry, inode);
+               dput(dentry);
        }
        return 0;
 }