Mercurial > illumos > illumos-gate
changeset 13940:e2277f14d676
3508 NFS4 data corruption (client side)
Reviewed by: Marcel Telka <marcel@telka.sk>
Reviewed by: Robert Gordon <rbg@openrbg.com>
Approved by: Gordon Ross <gwr@nexenta.com>
author | Arne Jansen <sensille@gmx.net> |
---|---|
date | Wed, 30 Jan 2013 13:18:22 +0100 |
parents | 20e4d8d8da6d |
children | d48547176ab4 |
files | usr/src/uts/common/fs/nfs/nfs4_client.c |
diffstat | 1 files changed, 15 insertions(+), 14 deletions(-) [+] |
line wrap: on
line diff
--- a/usr/src/uts/common/fs/nfs/nfs4_client.c Fri Dec 28 12:32:23 2012 -0800 +++ b/usr/src/uts/common/fs/nfs/nfs4_client.c Wed Jan 30 13:18:22 2013 +0100 @@ -1783,8 +1783,7 @@ noasync: - if (curproc == proc_pageout || curproc == proc_fsflush || - nfs_zone() == mi->mi_zone) { + if (curproc == proc_pageout || curproc == proc_fsflush) { /* * If we get here in the context of the pageout/fsflush, * or we have run out of memory or we're attempting to @@ -1804,18 +1803,20 @@ return (0); } - /* - * We'll get here only if (nfs_zone() != mi->mi_zone) - * which means that this was a cross-zone sync putpage. - * - * We pass in B_ERROR to pvn_write_done() to re-mark the pages - * as dirty and unlock them. - * - * We don't want to clear B_FORCE here as the caller presumably - * knows what they're doing if they set it. - */ - pvn_write_done(pp, flags | B_ERROR); - return (EPERM); + if (nfs_zone() != mi->mi_zone) { + /* + * So this was a cross-zone sync putpage. + * + * We pass in B_ERROR to pvn_write_done() to re-mark the pages + * as dirty and unlock them. + * + * We don't want to clear B_FORCE here as the caller presumably + * knows what they're doing if they set it. + */ + pvn_write_done(pp, flags | B_ERROR); + return (EPERM); + } + return ((*putapage)(vp, pp, off, len, flags, cr)); } int