diff options
| author | Mel Gorman <[email protected]> | 2015-09-04 15:47:35 -0700 |
|---|---|---|
| committer | Linus Torvalds <[email protected]> | 2015-09-04 16:54:41 -0700 |
| commit | d950c9477d51f0cefc2ed3cf76e695d46af0d9c1 (patch) | |
| tree | d6ba89db328ec09b2140a84dcdf1bd8ca5cbeaa4 /include/linux | |
| parent | 72b252aed506b8f1a03f7abd29caef4cdf6a043b (diff) | |
mm: defer flush of writable TLB entries
If a PTE is unmapped and it's dirty then it was writable recently. Due to
deferred TLB flushing, it's best to assume a writable TLB cache entry
exists. With that assumption, the TLB must be flushed before any IO can
start or the page is freed to avoid lost writes or data corruption. This
patch defers flushing of potentially writable TLBs as long as possible.
Signed-off-by: Mel Gorman <[email protected]>
Reviewed-by: Rik van Riel <[email protected]>
Cc: Dave Hansen <[email protected]>
Acked-by: Ingo Molnar <[email protected]>
Cc: Linus Torvalds <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/sched.h | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/include/linux/sched.h b/include/linux/sched.h index 3c602c20c717..a4ab9daa387c 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -1354,6 +1354,13 @@ struct tlbflush_unmap_batch { /* True if any bit in cpumask is set */ bool flush_required; + + /* + * If true then the PTE was dirty when unmapped. The entry must be + * flushed before IO is initiated or a stale TLB entry potentially + * allows an update without redirtying the page. + */ + bool writable; }; struct task_struct { |