mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-22 10:37:35 +03:00
Use file_dentry and file_inode wrappers
Fix bugs due to kernel change in torvalds/linux@4bacc9c923 ("overlayfs: Make f_path always point to the overlay and f_inode to the underlay"). This problem crashes system when use zfs as a layer of overlayfs. Signed-off-by: Chen Haiquan <oc@yunify.com> Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Closes #4914 Closes #4935
This commit is contained in:
committed by
Brian Behlendorf
parent
d5884c3453
commit
d9c97ec08b
@@ -52,7 +52,7 @@ zpl_common_open(struct inode *ip, struct file *filp)
|
||||
static int
|
||||
zpl_root_iterate(struct file *filp, struct dir_context *ctx)
|
||||
{
|
||||
zfs_sb_t *zsb = ITOZSB(filp->f_path.dentry->d_inode);
|
||||
zfs_sb_t *zsb = ITOZSB(file_inode(filp));
|
||||
int error = 0;
|
||||
|
||||
ZFS_ENTER(zsb);
|
||||
@@ -249,7 +249,7 @@ zpl_snapdir_lookup(struct inode *dip, struct dentry *dentry,
|
||||
static int
|
||||
zpl_snapdir_iterate(struct file *filp, struct dir_context *ctx)
|
||||
{
|
||||
zfs_sb_t *zsb = ITOZSB(filp->f_path.dentry->d_inode);
|
||||
zfs_sb_t *zsb = ITOZSB(file_inode(filp));
|
||||
fstrans_cookie_t cookie;
|
||||
char snapname[MAXNAMELEN];
|
||||
boolean_t case_conflict;
|
||||
@@ -447,7 +447,7 @@ zpl_shares_iterate(struct file *filp, struct dir_context *ctx)
|
||||
{
|
||||
fstrans_cookie_t cookie;
|
||||
cred_t *cr = CRED();
|
||||
zfs_sb_t *zsb = ITOZSB(filp->f_path.dentry->d_inode);
|
||||
zfs_sb_t *zsb = ITOZSB(file_inode(filp));
|
||||
znode_t *dzp;
|
||||
int error = 0;
|
||||
|
||||
|
||||
@@ -78,14 +78,13 @@ zpl_release(struct inode *ip, struct file *filp)
|
||||
static int
|
||||
zpl_iterate(struct file *filp, struct dir_context *ctx)
|
||||
{
|
||||
struct dentry *dentry = filp->f_path.dentry;
|
||||
cred_t *cr = CRED();
|
||||
int error;
|
||||
fstrans_cookie_t cookie;
|
||||
|
||||
crhold(cr);
|
||||
cookie = spl_fstrans_mark();
|
||||
error = -zfs_readdir(dentry->d_inode, ctx, cr);
|
||||
error = -zfs_readdir(file_inode(filp), ctx, cr);
|
||||
spl_fstrans_unmark(cookie);
|
||||
crfree(cr);
|
||||
ASSERT3S(error, <=, 0);
|
||||
@@ -135,7 +134,7 @@ static int
|
||||
zpl_aio_fsync(struct kiocb *kiocb, int datasync)
|
||||
{
|
||||
struct file *filp = kiocb->ki_filp;
|
||||
return (zpl_fsync(filp, filp->f_path.dentry, datasync));
|
||||
return (zpl_fsync(filp, file_dentry(filp), datasync));
|
||||
}
|
||||
#elif defined(HAVE_FSYNC_WITHOUT_DENTRY)
|
||||
/*
|
||||
@@ -688,7 +687,7 @@ zpl_fallocate_common(struct inode *ip, int mode, loff_t offset, loff_t len)
|
||||
static long
|
||||
zpl_fallocate(struct file *filp, int mode, loff_t offset, loff_t len)
|
||||
{
|
||||
return zpl_fallocate_common(filp->f_path.dentry->d_inode,
|
||||
return zpl_fallocate_common(file_inode(filp),
|
||||
mode, offset, len);
|
||||
}
|
||||
#endif /* HAVE_FILE_FALLOCATE */
|
||||
|
||||
Reference in New Issue
Block a user