xfs: initialize default acls for ->tmpfile()
PATCH v2 1/1 xfs: initialize default acls for ->tmpfile()
The current tmpfile handler does not initialize default ACLs. Doing so within xfs_vn_tmpfile() makes it roughly equivalent to xfs_vn_mknod(), which is already used as a common create handler.
xfs_vn_mknod() does not currently have a mechanism to determine whether to link the file into the namespace. Therefore, further abstract xfs_vn_mknod() into a new xfs_generic_create() handler with a tmpfile parameter. This new handler calls xfs_create_tmpfile() and d_tmpfile() on the dentry when called via ->tmpfile().
Signed-off-by Brian Foster <[email protected]>
---
v2: rebased to 3.15-rc4
fs/xfs/xfs_iops.c | 55 +++++++++++++++++++++++++++++-------------------------- 1 file changed, 29 insertions(+), 26 deletions(-)
fs/xfs/xfs_iops.c +29 -26
@@ -124,15 +124,15 @@ xfs_cleanup_inode(xfs_dentry_to_name (&teardown, dentry,0 );xfs_remove (XFS_I (dir), &teardown,XFS_I (inode)); -iput (inode); } STATIC int -xfs_vn_mknod ( +xfs_generic_create (struct inode *dir,struct dentry *dentry,umode_t mode, -dev_t rdev) +dev_t rdev, +bool tmpfile)/* unnamed file */ {struct inode *inode;struct xfs_inode *ip =NULL ;
@@ -156,8 +156,12 @@ xfs_vn_mknod(if (error)return error; -xfs_dentry_to_name (&name, dentry, mode); - error =xfs_create (XFS_I (dir), &name, mode, rdev, &ip); +if (!tmpfile) { +xfs_dentry_to_name (&name, dentry, mode); + error =xfs_create (XFS_I (dir), &name, mode, rdev, &ip); + }else { + error =xfs_create_tmpfile (XFS_I (dir), dentry, mode, &ip); + }if (unlikely (error)) goto out_free_acl;
@@ -180,7 +184,11 @@ xfs_vn_mknod( }#endif -d_instantiate (dentry, inode); +if (tmpfile) +d_tmpfile (dentry, inode); +else +d_instantiate (dentry, inode); + out_free_acl:if (default_acl)posix_acl_release (default_acl);
@@ -189,11 +197,23 @@ xfs_vn_mknod(return -error; out_cleanup_inode: -xfs_cleanup_inode (dir, inode, dentry); +if (!tmpfile) +xfs_cleanup_inode (dir, inode, dentry); +iput (inode); goto out_free_acl; } STATIC int +xfs_vn_mknod ( +struct inode *dir, +struct dentry *dentry, +umode_t mode, +dev_t rdev) +{ +return xfs_generic_create (dir, dentry, mode, rdev, false); +} + +STATIC int xfs_vn_create( struct inode *dir, struct dentry *dentry,
@@ -353,6 +373,7 @@ xfs_vn_symlink( out_cleanup_inode:xfs_cleanup_inode (dir, inode, dentry); +iput (inode); out:return -error; }
@@ -1053,25 +1074,7 @@ xfs_vn_tmpfile( struct dentry *dentry, umode_t mode) { - int error; -struct xfs_inode *ip; -struct inode *inode; - - error =xfs_create_tmpfile (XFS_I (dir), dentry, mode, &ip); -if (unlikely (error)) -return -error; - - inode =VFS_I (ip); - - error =xfs_init_security (inode, dir, &dentry->d_name); -if (unlikely (error)) { -iput (inode); -return -error; - } - -d_tmpfile (dentry, inode); - -return 0 ; +return xfs_generic_create (dir, dentry, mode,0 , true); }static const struct inode_operations xfs_inode_operations = {
Signature · 6 lines
1.8.3.1 _______________________________________________ xfs mailing list [email protected] http://oss.sgi.com/mailman/listinfo/xfs