NFS client bugfixes for Linux 3.19
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 -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAABAgAGBQJUyqe0AAoJEGcL54qWCgDyIDcP/RZmf7SasgP+i1c4oWGMrqsn 69DaPRjakbCEJcX00DIp3x2Ulq4uUgJ5v9WDEPkQBKe2lAg7uaQBTzY6x1erDs+3 bBZFXd0SByfRD8M6UXQwxtbxksBfozItLNU7vbln/0BiIoabO8QVxNhX6fMfK7yt tl4Ik/Dr/o3Oe3pVR0wW+0eqEYcGGXzTpPdYoN470z1/DjV9w5rkm3HsPzoq3QHI CN3acBJXFrWdCMSJcyzjmeaWRO93FwLSwKS4KKB7hcFY1+pUgA9qhnA5W4GY/0/7 1ovakR778CPD2YAaQuY9iJG561QixiTSRQHRWoI6LgawQ3JyBMt/eqtcfFI6Olxp Mjs+EMjf6hlrFUpBNZ/8dAROJYSU35sZ6y9C5Ch7ZGBhcgbiQCOVyKjNiBWRG8KX +xnufzs4tnSIScMHuPyGYpkXy/xEdRhbtm+NjVbvel7Hr37q0jlV2M0/4i54HJ8U UWMyHfGFnODKkFGByJc9w1XWSGcEZmRsCAsevGI9Yzf+FSTxrdkLWwdVFFOonHQw OfAlYmO29v4zdTbl1dCgU1pyqdDb47Js/07TQCLb2YcRiUfAuysUTFtBSkRDbwCf eYKnRvXahPqTB84TDM62HUCJ7y4D945wt+/6FvuYnDYgOeTARXGzAZ+jhv1i8UbJ 8xX2xcdW6fe2DIfZM/9h =eGYe -----END PGP SIGNATURE----- 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:
Коммит
353a0c6fcc
|
@ -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);
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче