mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-22 02:27:36 +03:00
Linux 6.1 compat: open inside tmpfile()
commit d27c81847b upstream
Linux 863f144 modified the .tmpfile interface to pass a struct file,
rather than a struct dentry, and expect the tmpfile implementation to
open inside of tmpfile().
This patch implements a configuration test that checks for this new API
and appropriately sets a HAVE_TMPFILE_DENTRY flag that tracks this old
API. Contingent on this flag, the appropriate API is implemented.
Reviewed-by: Richard Yao <richard.yao@alumni.stonybrook.edu>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Antonio Russo <aerusso@aerusso.net>
Closes #14301
Closes #14343
This commit is contained in:
committed by
Brian Behlendorf
parent
5371d8dae7
commit
138d2b29dd
@@ -224,12 +224,17 @@ zpl_mknod(struct inode *dir, struct dentry *dentry, umode_t mode,
|
||||
|
||||
#ifdef HAVE_TMPFILE
|
||||
static int
|
||||
#ifndef HAVE_TMPFILE_DENTRY
|
||||
zpl_tmpfile(struct user_namespace *userns, struct inode *dir,
|
||||
struct file *file, umode_t mode)
|
||||
#else
|
||||
#ifdef HAVE_TMPFILE_USERNS
|
||||
zpl_tmpfile(struct user_namespace *userns, struct inode *dir,
|
||||
struct dentry *dentry, umode_t mode)
|
||||
#else
|
||||
zpl_tmpfile(struct inode *dir, struct dentry *dentry, umode_t mode)
|
||||
#endif
|
||||
#endif
|
||||
{
|
||||
cred_t *cr = CRED();
|
||||
struct inode *ip;
|
||||
@@ -252,11 +257,21 @@ zpl_tmpfile(struct inode *dir, struct dentry *dentry, umode_t mode)
|
||||
if (error == 0) {
|
||||
/* d_tmpfile will do drop_nlink, so we should set it first */
|
||||
set_nlink(ip, 1);
|
||||
#ifndef HAVE_TMPFILE_DENTRY
|
||||
d_tmpfile(file, ip);
|
||||
|
||||
error = zpl_xattr_security_init(ip, dir,
|
||||
&file->f_path.dentry->d_name);
|
||||
#else
|
||||
d_tmpfile(dentry, ip);
|
||||
|
||||
error = zpl_xattr_security_init(ip, dir, &dentry->d_name);
|
||||
#endif
|
||||
if (error == 0)
|
||||
error = zpl_init_acl(ip, dir);
|
||||
#ifndef HAVE_TMPFILE_DENTRY
|
||||
error = finish_open_simple(file, error);
|
||||
#endif
|
||||
/*
|
||||
* don't need to handle error here, file is already in
|
||||
* unlinked set.
|
||||
|
||||
Reference in New Issue
Block a user