Revert "kernfs: invoke kernfs_unmap_bin_file() directly from __kernfs_remove()"
[deliverable/linux.git] / fs / kernfs / file.c
index ffe1bebf91970e4d48180571898f815d8b7f80c2..231a171f48b6f107f729594a82165f4973e56073 100644 (file)
@@ -700,11 +700,14 @@ static int kernfs_fop_release(struct inode *inode, struct file *filp)
        return 0;
 }
 
-void kernfs_unmap_file(struct kernfs_node *kn)
+void kernfs_unmap_bin_file(struct kernfs_node *kn)
 {
        struct kernfs_open_node *on;
        struct kernfs_open_file *of;
 
+       if (!(kn->flags & KERNFS_HAS_MMAP))
+               return;
+
        spin_lock_irq(&kernfs_open_node_lock);
        on = kn->attr.open;
        if (on)
@@ -817,6 +820,7 @@ struct kernfs_node *__kernfs_create_file(struct kernfs_node *parent,
                                         bool name_is_static,
                                         struct lock_class_key *key)
 {
+       struct kernfs_addrm_cxt acxt;
        struct kernfs_node *kn;
        unsigned flags;
        int rc;
@@ -852,7 +856,14 @@ struct kernfs_node *__kernfs_create_file(struct kernfs_node *parent,
        if (ops->mmap)
                kn->flags |= KERNFS_HAS_MMAP;
 
-       rc = kernfs_add_one(kn, parent);
+       rc = -ENOENT;
+       if (kernfs_get_active(parent)) {
+               kernfs_addrm_start(&acxt);
+               rc = kernfs_add_one(&acxt, kn, parent);
+               kernfs_addrm_finish(&acxt);
+               kernfs_put_active(parent);
+       }
+
        if (rc) {
                kernfs_put(kn);
                return ERR_PTR(rc);
This page took 0.026253 seconds and 5 git commands to generate.