Print this page
OS-881 To workaround OS-580 add support to only invalidate mappings from a single process
        
@@ -19,10 +19,11 @@
  * CDDL HEADER END
  */
 /*
  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
+ * Copyright 2012 Joyent, Inc.  All rights reserved.
  */
 
 /*      Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
 /*        All Rights Reserved   */
 
@@ -184,10 +185,11 @@
 #define B_RETRYWRI      0x400000        /* retry write til works or bfinval */
 #define B_FAILFAST      0x1000000       /* Fail promptly if device goes away */
 #define B_STARTED       0x2000000       /* io:::start probe called for buf */
 #define B_ABRWRITE      0x4000000       /* Application based recovery active */
 #define B_PAGE_NOWAIT   0x8000000       /* Skip the page if it is locked */
+#define B_INVALCURONLY  0x10000000      /* invalidate only for curproc */
 
 /*
  * There is some confusion over the meaning of B_FREE and B_INVAL and what
  * the use of one over the other implies.
  *
@@ -196,10 +198,16 @@
  * In the case of B_INVAL, the page will be destroyed (hashed out of it's
  * vnode) and placed on the freelist.  Beyond this, there is no difference
  * between the sole use of these two flags.  In both cases, IO will be done
  * if the page is not yet committed to storage.
  *
+ * The B_INVALCURONLY flag modifies the behavior of the B_INVAL flag and is
+ * intended to be used in conjunction with B_INVAL.  B_INVALCURONLY has no
+ * meaning on its own.  When both B_INVALCURONLY and B_INVAL are set, then
+ * the mapping for the page is only invalidated for the current process.
+ * In this case, the page is not destroyed unless this was the final mapping.
+ *
  * In order to discard pages without writing them back, (B_INVAL | B_TRUNC)
  * should be used.
  *
  * Use (B_INVAL | B_FORCE) to force the page to be destroyed even if we
  * could not successfuly write out the page.