Merge tag 'nfs-for-3.19-3' of git://git.linux-nfs.org/projects/trondmy/linux-nfs
Pull NFS client bugfixes from Trond Myklebust: "Highlights include: - Stable fix for a NFSv4.1 Oops on mount - Stable fix for an O_DIRECT deadlock condition - Fix an issue with submounted volumes and fake duplicate inode numbers" * tag 'nfs-for-3.19-3' of git://git.linux-nfs.org/projects/trondmy/linux-nfs: NFS: Fix use of nfs_attr_use_mounted_on_fileid() NFSv4.1: Fix an Oops in nfs41_walk_client_list nfs: fix dio deadlock when O_DIRECT flag is flipped
This commit is contained in:
@@ -212,6 +212,12 @@ static int nfs_direct_cmp_commit_data_verf(struct nfs_direct_req *dreq,
|
||||
*/
|
||||
ssize_t nfs_direct_IO(int rw, struct kiocb *iocb, struct iov_iter *iter, loff_t pos)
|
||||
{
|
||||
struct inode *inode = iocb->ki_filp->f_mapping->host;
|
||||
|
||||
/* we only support swap file calling nfs_direct_IO */
|
||||
if (!IS_SWAPFILE(inode))
|
||||
return 0;
|
||||
|
||||
#ifndef CONFIG_NFS_SWAP
|
||||
dprintk("NFS: nfs_direct_IO (%pD) off/no(%Ld/%lu) EINVAL\n",
|
||||
iocb->ki_filp, (long long) pos, iter->nr_segs);
|
||||
|
@@ -352,8 +352,9 @@ nfs_fhget(struct super_block *sb, struct nfs_fh *fh, struct nfs_fattr *fattr, st
|
||||
|
||||
nfs_attr_check_mountpoint(sb, fattr);
|
||||
|
||||
if (((fattr->valid & NFS_ATTR_FATTR_FILEID) == 0) &&
|
||||
!nfs_attr_use_mounted_on_fileid(fattr))
|
||||
if (nfs_attr_use_mounted_on_fileid(fattr))
|
||||
fattr->fileid = fattr->mounted_on_fileid;
|
||||
else if ((fattr->valid & NFS_ATTR_FATTR_FILEID) == 0)
|
||||
goto out_no_inode;
|
||||
if ((fattr->valid & NFS_ATTR_FATTR_TYPE) == 0)
|
||||
goto out_no_inode;
|
||||
|
@@ -31,8 +31,6 @@ static inline int nfs_attr_use_mounted_on_fileid(struct nfs_fattr *fattr)
|
||||
(((fattr->valid & NFS_ATTR_FATTR_MOUNTPOINT) == 0) &&
|
||||
((fattr->valid & NFS_ATTR_FATTR_V4_REFERRAL) == 0)))
|
||||
return 0;
|
||||
|
||||
fattr->fileid = fattr->mounted_on_fileid;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@@ -639,7 +639,7 @@ int nfs41_walk_client_list(struct nfs_client *new,
|
||||
prev = pos;
|
||||
|
||||
status = nfs_wait_client_init_complete(pos);
|
||||
if (status == 0) {
|
||||
if (pos->cl_cons_state == NFS_CS_SESSION_INITING) {
|
||||
nfs4_schedule_lease_recovery(pos);
|
||||
status = nfs4_wait_clnt_recover(pos);
|
||||
}
|
||||
|
Reference in New Issue
Block a user