Patch "kernfs: Add support for always empty directories." has been added to the 4.0-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
kernfs: Add support for always empty directories.
to the 4.0-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
kernfs-add-support-for-always-empty-directories.patch
and it can be found in the queue-4.0 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
ea015218f2f7ace2dad9cedd21ed95bdba2886d7Mon Sep 17 00:00:00 2001
From: "Eric W. Biederman" <[email protected]>
Date: Wed, 13 May 2015 16:09:29 -0500
Subject: kernfs: Add support for always empty directories.
From: "Eric W. Biederman" <[email protected]>
commit ea015218f2f7ace2dad9cedd21ed95bdba2886d7 upstream.
Add a new function kernfs_create_empty_dir that can be used to create directory that can not be modified.
Update the code to use make_empty_dir_inode when reporting a permanently empty directory to the vfs.
Update the code to not allow adding to permanently empty directories.
--- fs/kernfs/dir.c | 38 +++++++++++++++++++++++++++++++++++++- fs/kernfs/inode.c | 2 ++ include/linux/kernfs.h | 3 +++ 3 files changed, 42 insertions(+), 1 deletion(-)
fs/kernfs/dir.c +37 -1
@@ -592,6 +592,9 @@ int kernfs_add_one(struct kernfs_node *k goto out_unlock; ret = -ENOENT ; +if (parent->flags &KERNFS_EMPTY_DIR ) + goto out_unlock; +if ((parent->flags &KERNFS_ACTIVATED ) && !kernfs_active (parent)) goto out_unlock;
@@ -783,6 +786,38 @@ struct kernfs_node *kernfs_create_dir_nsreturn ERR_PTR (rc); } +/** +* kernfs_create_empty_dir - create an always empty directory +* @parent: parent in which to create a new directory +* @name: name of the new directory +* +* Returns the created node on success, ERR_PTR() value on failure. +*/ +struct kernfs_node *kernfs_create_empty_dir (struct kernfs_node *parent, +const char *name) +{ +struct kernfs_node *kn; +int rc; + +/* allocate */ + kn =kernfs_new_node (parent, name,S_IRUGO |S_IXUGO |S_IFDIR ,KERNFS_DIR ); +if (!kn) +return ERR_PTR (-ENOMEM ); + + kn->flags |=KERNFS_EMPTY_DIR ; + kn->dir.root = parent->dir.root; + kn->ns =NULL ; + kn->priv =NULL ; + +/* link in */ + rc =kernfs_add_one (kn); +if (!rc) +return kn; + +kernfs_put (kn); +return ERR_PTR (rc); +} +static struct dentry *kernfs_iop_lookup (struct inode *dir,struct dentry *dentry,unsigned int flags)
@@ -1254,7 +1289,8 @@ int kernfs_rename_ns(struct kernfs_nodemutex_lock (&kernfs_mutex); error = -ENOENT ; -if (!kernfs_active (kn) || !kernfs_active (new_parent)) +if (!kernfs_active (kn) || !kernfs_active (new_parent) || + (new_parent->flags &KERNFS_EMPTY_DIR )) goto out; error =0 ;
fs/kernfs/inode.c +2 -0
@@ -296,6 +296,8 @@ static void kernfs_init_inode(struct kercase KERNFS_DIR : inode->i_op = &kernfs_dir_iops; inode->i_fop = &kernfs_dir_fops; +if (kn->flags &KERNFS_EMPTY_DIR ) +make_empty_dir_inode (inode);break ;case KERNFS_FILE : inode->i_size = kn->attr.size;
include/linux/kernfs.h +3 -0
@@ -45,6 +45,7 @@ enum kernfs_node_flag {KERNFS_LOCKDEP =0x0100 ,KERNFS_SUICIDAL =0x0400 ,KERNFS_SUICIDED =0x0800 , + KERNFS_EMPTY_DIR = 0x1000, };/* @flags for kernfs_create_root() */
@@ -285,6 +286,8 @@ void kernfs_destroy_root(struct kernfs_rstruct kernfs_node *kernfs_create_dir_ns (struct kernfs_node *parent,const char *name,umode_t mode,void *priv,const void *ns); +struct kernfs_node *kernfs_create_empty_dir (struct kernfs_node *parent, +const char *name); struct kernfs_node *__kernfs_create_file(struct kernfs_node *parent, const char *name, umode_t mode, loff_t size,
Patches currently in stable-queue which might be from [email protected] are
queue-4.0/sysfs-create-mountpoints-with-sysfs_create_mount_point.patch queue-4.0/sysfs-add-support-for-permanently-empty-directories-to-serve-as-mount-points.patch queue-4.0/mnt-update-fs_fully_visible-to-test-for-permanently-empty-directories.patch queue-4.0/mnt-refactor-the-logic-for-mounting-sysfs-and-proc-in-a-user-namespace.patch queue-4.0/mnt-modify-fs_fully_visible-to-deal-with-locked-ro-nodev-and-atime.patch queue-4.0/fs-add-helper-functions-for-permanently-empty-directories.patch queue-4.0/sysctl-allow-creating-permanently-empty-directories-that-serve-as-mountpoints.patch queue-4.0/kernfs-add-support-for-always-empty-directories.patch queue-4.0/proc-allow-creating-permanently-empty-directories-that-serve-as-mount-points.patch