diff options
author | Chen Haiquan <[email protected]> | 2016-08-04 23:57:35 +0800 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2016-08-11 12:06:37 -0700 |
commit | d9c97ec08b995f1a36657accc4bbc6057645a72c (patch) | |
tree | f2262c55fe0e9a4cd656c90553f9e95d20e28000 /module/zfs | |
parent | d5884c3453c5de5892eaae672c5186ed02846113 (diff) |
Use file_dentry and file_inode wrappers
Fix bugs due to kernel change in torvalds/linux@4bacc9c9234c ("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 <[email protected]>
Signed-off-by: Brian Behlendorf <[email protected]>
Closes #4914
Closes #4935
Diffstat (limited to 'module/zfs')
-rw-r--r-- | module/zfs/zpl_ctldir.c | 6 | ||||
-rw-r--r-- | module/zfs/zpl_file.c | 7 |
2 files changed, 6 insertions, 7 deletions
diff --git a/module/zfs/zpl_ctldir.c b/module/zfs/zpl_ctldir.c index 069834eae..7c4fcea3e 100644 --- a/module/zfs/zpl_ctldir.c +++ b/module/zfs/zpl_ctldir.c @@ -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; diff --git a/module/zfs/zpl_file.c b/module/zfs/zpl_file.c index 4481237bc..c8ac7f8a3 100644 --- a/module/zfs/zpl_file.c +++ b/module/zfs/zpl_file.c @@ -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 */ |