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)
bool name_is_static,
struct lock_class_key *key)
{
+ struct kernfs_addrm_cxt acxt;
struct kernfs_node *kn;
unsigned flags;
int rc;
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);