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