linux-ext4.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Radosław Smogura" <mail@smogura.eu>
To: linux-mm@kvack.org
Cc: Yongqiang Yang <xiaoqiangnk@gmail.com>,
	mail@smogura.eu, linux-ext4@vger.kernel.org
Subject: [PATCH 04/18] Page flag for tracking compound deque
Date: Thu, 16 Feb 2012 15:31:31 +0100	[thread overview]
Message-ID: <1329402705-25454-4-git-send-email-mail@smogura.eu> (raw)
In-Reply-To: <1329402705-25454-1-git-send-email-mail@smogura.eu>

This flag is to inform caller that page is about to be splitted, caller
should not depend on fact that page is compound during page mapping.

In first approach we assumed page may be splitted conurently during
operations that makes compound cache pages not coherent with mapping
indices - e. g. when someone replaces 1st page in page cache, but at
this palce exists huge page.

Problem with above is that if two threads makes such change, they may
concurently deadlock. It's quite reasonable that both will have page
lock and should achieve compound lock (compound lock will be achieved
after page lock in many situations, probably during split), split method
should aquire page lock for each tail page at it changes some important
flags.

This is mainly dictated because of LRU, we can't use tail->lru as it
stores some compound data, from other side some code depends on PageLRU,
which should evolve to, event those it's quite reasonable that tail
pages should have LRU flag set, and mainly isolate_lru_pages should bug
on tail.

Signed-off-by: Radosław Smogura <mail@smogura.eu>
---
 include/linux/page-flags.h |   31 +++++++++++++++++++++++++++++++
 1 files changed, 31 insertions(+), 0 deletions(-)

diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h
index 393b8af..0d17a6f 100644
--- a/include/linux/page-flags.h
+++ b/include/linux/page-flags.h
@@ -108,6 +108,18 @@ enum pageflags {
 	/** For page head it's raised to protect page from spliting */
 	PG_compound_lock,
 #endif
+#ifdef CONFIG_HUGEPAGECACHE
+	/** Setted on head to inform that page is subject to split, but split
+	 * hasn't started yet or is it in progress. When this flag is set
+	 * caller should not belive that this compound page represents some
+	 * "continous data".<br/>
+	 * It's currently used for huge page cache and file base mapping,
+	 * and it informs that compound page dosen't represents continuous
+	 * region of file, in particullary some pages including head may be
+	 * removed or replaced in cache by other pages, or may be "invalid"
+	 */
+	PG_split_deque,
+#endif
 	__NR_PAGEFLAGS,
 
 	/* Filesystems */
@@ -433,6 +445,25 @@ static inline int PageTransCompound(struct page *page)
 }
 #endif
 
+#ifdef CONFIG_HUGEPAGECACHE
+TESTPAGEFLAG(SplitDeque, split_deque);
+TESTSETFLAG(SplitDeque, split_deque);
+TESTCLEARFLAG(SplitDeque, split_deque);
+#else
+static inline int PageSplitDeque(struct page *page)
+{
+	return 0;
+}
+static inline int TestClearPageSplitDeque(struct page *page)
+{
+	return 0;
+}
+static inline int TestSetPageSplitDeque(struct page *page)
+{
+	return 0;
+}
+#endif
+
 #ifdef CONFIG_MMU
 #define __PG_MLOCKED		(1 << PG_mlocked)
 #else
-- 
1.7.3.4

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

  parent reply	other threads:[~2012-02-16 14:31 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-02-16 14:31 [PATCH 01/18] Added hacking menu for override optimization by GCC Radosław Smogura
2012-02-16 14:31 ` [PATCH 02/18] Change of refcounting method for compound pages and atomic heads Radosław Smogura
2012-02-16 14:31 ` [PATCH 03/18] Compound read / write locking aka get / put Radosław Smogura
2012-02-16 14:31 ` Radosław Smogura [this message]
2012-02-16 14:31 ` [PATCH 05/18] Various VM_BUG_ON for securing tail pages usage Radosław Smogura
2012-02-16 14:31 ` [PATCH 06/18] Make migrate pages fucntion more flexible Radosław Smogura
2012-02-16 14:31 ` [PATCH 07/18] Configuration menu for Huge Page Cache Radosław Smogura
2012-02-16 14:31 ` [PATCH 08/18] Generic routines for defragmenting pagecache Radosław Smogura
2012-02-16 14:31 ` [PATCH 09/18] Allowing usage of MAP_HUGETLB in mmap Radosław Smogura
2012-02-16 14:31 ` [PATCH 10/18] Support for huge page faulting Radosław Smogura
2012-02-16 14:31 ` [PATCH 11/18] Basic support (faulting) for huge pages for shmfs Radosław Smogura
2012-02-16 14:31 ` [PATCH 12/18] Additional macros for pmd operations Radosław Smogura
2012-02-16 14:31 ` [PATCH 13/18] Zapping and freeing huge mappings Radosław Smogura
2012-02-16 14:31 ` [PATCH 14/18] Fixes for proc memory Radosław Smogura
2012-02-16 14:31 ` [PATCH 15/18] Splitting and truncating Radosław Smogura
2012-02-16 14:31 ` [PATCH 16/18] SHM: Support for splitting on truncation Radosław Smogura
2012-02-16 14:31 ` [PATCH 17/18] [Experimental] Support for huge pages in EXT 4 Radosław Smogura
2012-02-16 14:31 ` [PATCH 18/18] [WIP] Dummy patch for details Radosław Smogura
2012-02-16 15:44 ` [PATCH 01/18] Added hacking menu for override optimization by GCC Randy Dunlap
2012-02-16 16:11   ` Radosław Smogura
2012-02-16 19:09 ` Michal Nazarewicz
2012-02-16 20:26   ` Radosław Smogura
2012-02-16 21:59     ` Michal Nazarewicz
2012-02-16 22:40       ` Radosław Smogura
2012-02-16 23:11         ` Michal Nazarewicz
2012-02-17 14:33           ` [PATCH] " Radosław Smogura

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1329402705-25454-4-git-send-email-mail@smogura.eu \
    --to=mail@smogura.eu \
    --cc=linux-ext4@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=xiaoqiangnk@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).