Merge branch 'for-3.14' of git://linux-nfs.org/~bfields/linux
[firefly-linux-kernel-4.4.55.git] / fs / kernfs / file.c
index ffe1bebf91970e4d48180571898f815d8b7f80c2..dbf397bfdff266d16332c57ac2de90e43ef8d8eb 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;
@@ -825,8 +829,7 @@ struct kernfs_node *__kernfs_create_file(struct kernfs_node *parent,
        if (name_is_static)
                flags |= KERNFS_STATIC_NAME;
 
-       kn = kernfs_new_node(kernfs_root(parent), name,
-                            (mode & S_IALLUGO) | S_IFREG, flags);
+       kn = kernfs_new_node(parent, name, (mode & S_IALLUGO) | S_IFREG, flags);
        if (!kn)
                return ERR_PTR(-ENOMEM);
 
@@ -852,7 +855,10 @@ struct kernfs_node *__kernfs_create_file(struct kernfs_node *parent,
        if (ops->mmap)
                kn->flags |= KERNFS_HAS_MMAP;
 
-       rc = kernfs_add_one(kn, parent);
+       kernfs_addrm_start(&acxt);
+       rc = kernfs_add_one(&acxt, kn);
+       kernfs_addrm_finish(&acxt);
+
        if (rc) {
                kernfs_put(kn);
                return ERR_PTR(rc);