public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* Dropped patch: mm/mempolicy.c:sp_lookup()
@ 2004-11-16  4:15 Chuck Ebbert
  2004-11-17  1:00 ` Andi Kleen
  0 siblings, 1 reply; 11+ messages in thread
From: Chuck Ebbert @ 2004-11-16  4:15 UTC (permalink / raw)
  To: linux-kernel; +Cc: Andrea Arcangeli, Andi Kleen, Andrew Morton

Andrea posted this one-liner a while ago as part of a larger patch.  He said
it fixed return of the wrong policy in some conditions.  Was this a valid fix?


--- linux-2.6.10-rc2/mm/mempolicy.c     2004-11-11 03:23:03.000000000 -0500
+++ edited/mm/mempolicy.c       2004-11-15 22:09:41.387881104 -0500
@@ -902,7 +902,7 @@ sp_lookup(struct shared_policy *sp, unsi
                struct sp_node *p = rb_entry(n, struct sp_node, nd);
                if (start >= p->end) {
                        n = n->rb_right;
-               } else if (end < p->start) {
+               } else if (end <= p->start) {
                        n = n->rb_left;
                } else {
                        break;


--Chuck Ebbert  15-Nov-04  22:20:16

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: Dropped patch: mm/mempolicy.c:sp_lookup()
  2004-11-16  4:15 Chuck Ebbert
@ 2004-11-17  1:00 ` Andi Kleen
  0 siblings, 0 replies; 11+ messages in thread
From: Andi Kleen @ 2004-11-17  1:00 UTC (permalink / raw)
  To: Chuck Ebbert; +Cc: linux-kernel, Andrea Arcangeli, Andi Kleen, Andrew Morton

On Mon, Nov 15, 2004 at 11:15:51PM -0500, Chuck Ebbert wrote:
> Andrea posted this one-liner a while ago as part of a larger patch.  He said
> it fixed return of the wrong policy in some conditions.  Was this a valid fix?

Yes it was.

-Andi

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: Dropped patch: mm/mempolicy.c:sp_lookup()
@ 2004-11-17  3:54 Chuck Ebbert
  2004-11-17 12:08 ` Andi Kleen
  0 siblings, 1 reply; 11+ messages in thread
From: Chuck Ebbert @ 2004-11-17  3:54 UTC (permalink / raw)
  To: Andi Kleen; +Cc: Andrew Morton, Andrea Arcangeli, linux-kernel

On Wed, 17 Nov 2004 at 02:00:20 +0100, Andi Kleen wrote:

> On Mon, Nov 15, 2004 at 11:15:51PM -0500, Chuck Ebbert wrote:
> > Andrea posted this one-liner a while ago as part of a larger patch.  He said
> > it fixed return of the wrong policy in some conditions.  Was this a valid fix?
>
> Yes it was.

  At least it wasn't dropped -- it's in -mm as part of
fix-for-mpol-mm-corruption-on-tmpfs, though it's unrelated to tmpfs.
(That patch contains three separate changes...)

  Should just this part, which changes '<' to '<=', be pushed upstream?


--Chuck Ebbert  16-Nov-04  22:54:02

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: Dropped patch: mm/mempolicy.c:sp_lookup()
  2004-11-17  3:54 Dropped patch: mm/mempolicy.c:sp_lookup() Chuck Ebbert
@ 2004-11-17 12:08 ` Andi Kleen
  2004-11-17 19:13   ` Andrew Morton
  0 siblings, 1 reply; 11+ messages in thread
From: Andi Kleen @ 2004-11-17 12:08 UTC (permalink / raw)
  To: Chuck Ebbert; +Cc: Andi Kleen, Andrew Morton, Andrea Arcangeli, linux-kernel

On Tue, Nov 16, 2004 at 10:54:09PM -0500, Chuck Ebbert wrote:
> On Wed, 17 Nov 2004 at 02:00:20 +0100, Andi Kleen wrote:
> 
> > On Mon, Nov 15, 2004 at 11:15:51PM -0500, Chuck Ebbert wrote:
> > > Andrea posted this one-liner a while ago as part of a larger patch.  He said
> > > it fixed return of the wrong policy in some conditions.  Was this a valid fix?
> >
> > Yes it was.
> 
>   At least it wasn't dropped -- it's in -mm as part of
> fix-for-mpol-mm-corruption-on-tmpfs, though it's unrelated to tmpfs.
> (That patch contains three separate changes...)
> 
>   Should just this part, which changes '<' to '<=', be pushed upstream?

Yes. I'm sure Andrea will take care of that himself. 

-Andi

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: Dropped patch: mm/mempolicy.c:sp_lookup()
  2004-11-17 12:08 ` Andi Kleen
@ 2004-11-17 19:13   ` Andrew Morton
  2004-11-17 20:06     ` Hugh Dickins
  0 siblings, 1 reply; 11+ messages in thread
From: Andrew Morton @ 2004-11-17 19:13 UTC (permalink / raw)
  To: Andi Kleen; +Cc: 76306.1226, ak, andrea, linux-kernel, Hugh Dickins

Andi Kleen <ak@suse.de> wrote:
>
> On Tue, Nov 16, 2004 at 10:54:09PM -0500, Chuck Ebbert wrote:
> > On Wed, 17 Nov 2004 at 02:00:20 +0100, Andi Kleen wrote:
> > 
> > > On Mon, Nov 15, 2004 at 11:15:51PM -0500, Chuck Ebbert wrote:
> > > > Andrea posted this one-liner a while ago as part of a larger patch.  He said
> > > > it fixed return of the wrong policy in some conditions.  Was this a valid fix?
> > >
> > > Yes it was.
> > 
> >   At least it wasn't dropped -- it's in -mm as part of
> > fix-for-mpol-mm-corruption-on-tmpfs, though it's unrelated to tmpfs.
> > (That patch contains three separate changes...)
> > 
> >   Should just this part, which changes '<' to '<=', be pushed upstream?
> 
> Yes. I'm sure Andrea will take care of that himself. 
> 

That fix is contained within fix-for-mpol-mm-corruption-on-tmpfs.patch
anyway, isn't it?  And that patch is slated for merging once I work out
whether Hugh and Andrea have sorted things out?


From: Andrea Arcangeli <andrea@novell.com>

With the inline symlink shmem_inode_info structure is overwritten with data
until vfs_inode, and that caused the ->policy to be a corrupted pointer
during unlink.  It wasn't immediatly easy to see what was going on due the
random mm corruption that generated a weird oops, it looked more like a
race condition on freed memory at first.

There's simply no need to set a policy for inodes, since the idx is always
zero.  All we have to do is to initialize the data structure (the semaphore
may need to run during the page allocation for the non-inline symlink) but
we don't need to allocate the rb nodes.  This way we don't need to call
mpol_free during the destroy_inode (not doable at all if the policy rbtree
is corrupt by the inline symlink ;).

An equivalent version of this patch based on a 2.6.5 tree with additional
numa features on top of this (i.e.  interleaved by default, and that's
prompted me to add a comment in the LNK init path), works fine in a numa
simulation on my laptop (untested on the bare hardware).

The patch includes another unrelated bugfix I did while checking
mempolicy.c code that would return the wrong policy in some case and some
unrelated optimizations again in mempolicy.c (like to avoid rebalancing the
tree while destroying it and by breaking loops early and not checking for
invariant conditions in the replace operation).  You want to review the
rebalance optimization I did in shared_policy_replace, that's tricky code.

Signed-off-by: Andrea Arcangeli <andrea@novell.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 25-akpm/mm/mempolicy.c |   18 ++++++++----------
 25-akpm/mm/shmem.c     |   12 ++++++++++--
 2 files changed, 18 insertions(+), 12 deletions(-)

diff -puN mm/mempolicy.c~fix-for-mpol-mm-corruption-on-tmpfs mm/mempolicy.c
--- 25/mm/mempolicy.c~fix-for-mpol-mm-corruption-on-tmpfs	2004-11-15 20:01:14.174522104 -0800
+++ 25-akpm/mm/mempolicy.c	2004-11-15 20:01:14.179521344 -0800
@@ -1078,13 +1078,13 @@ sp_lookup(struct shared_policy *sp, unsi
 
 	while (n) {
 		struct sp_node *p = rb_entry(n, struct sp_node, nd);
-		if (start >= p->end) {
+
+		if (start >= p->end)
 			n = n->rb_right;
-		} else if (end < p->start) {
+		else if (end <= p->start)
 			n = n->rb_left;
-		} else {
+		else
 			break;
-		}
 	}
 	if (!n)
 		return NULL;
@@ -1197,12 +1197,10 @@ restart:
 						return -ENOMEM;
 					goto restart;
 				}
-				n->end = end;
+				n->end = start;
 				sp_insert(sp, new2);
-				new2 = NULL;
-			}
-			/* Old crossing beginning, but not end (easy) */
-			if (n->start < start && n->end > start)
+				break;
+			} else
 				n->end = start;
 		}
 		if (!next)
@@ -1256,11 +1254,11 @@ void mpol_free_shared_policy(struct shar
 	while (next) {
 		n = rb_entry(next, struct sp_node, nd);
 		next = rb_next(&n->nd);
-		rb_erase(&n->nd, &p->root);
 		mpol_free(n->policy);
 		kmem_cache_free(sn_cache, n);
 	}
 	spin_unlock(&p->lock);
+	p->root = RB_ROOT;
 }
 
 struct page *
diff -puN mm/shmem.c~fix-for-mpol-mm-corruption-on-tmpfs mm/shmem.c
--- 25/mm/shmem.c~fix-for-mpol-mm-corruption-on-tmpfs	2004-11-15 20:01:14.175521952 -0800
+++ 25-akpm/mm/shmem.c	2004-11-15 20:01:14.181521040 -0800
@@ -1283,7 +1283,6 @@ shmem_get_inode(struct super_block *sb, 
 		info = SHMEM_I(inode);
 		memset(info, 0, (char *)inode - (char *)info);
 		spin_lock_init(&info->lock);
- 		mpol_shared_policy_init(&info->policy);
 		INIT_LIST_HEAD(&info->swaplist);
 
 		switch (mode & S_IFMT) {
@@ -1294,6 +1293,7 @@ shmem_get_inode(struct super_block *sb, 
 		case S_IFREG:
 			inode->i_op = &shmem_inode_operations;
 			inode->i_fop = &shmem_file_operations;
+			mpol_shared_policy_init(&info->policy);
 			break;
 		case S_IFDIR:
 			inode->i_nlink++;
@@ -1303,6 +1303,11 @@ shmem_get_inode(struct super_block *sb, 
 			inode->i_fop = &simple_dir_operations;
 			break;
 		case S_IFLNK:
+			/*
+			 * Must not load anything in the rbtree,
+			 * mpol_free_shared_policy will not be called.
+			 */
+			mpol_shared_policy_init(&info->policy);
 			break;
 		}
 	} else if (sbinfo) {
@@ -2021,7 +2026,10 @@ static struct inode *shmem_alloc_inode(s
 
 static void shmem_destroy_inode(struct inode *inode)
 {
-	mpol_free_shared_policy(&SHMEM_I(inode)->policy);
+	if ((inode->i_mode & S_IFMT) == S_IFREG) {
+		/* only struct inode is valid if it's an inline symlink */
+		mpol_free_shared_policy(&SHMEM_I(inode)->policy);
+	}
 	kmem_cache_free(shmem_inode_cachep, SHMEM_I(inode));
 }
 
_


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: Dropped patch: mm/mempolicy.c:sp_lookup()
  2004-11-17 19:13   ` Andrew Morton
@ 2004-11-17 20:06     ` Hugh Dickins
  2004-11-17 20:21       ` Andrew Morton
  2004-11-18  3:08       ` Andrea Arcangeli
  0 siblings, 2 replies; 11+ messages in thread
From: Hugh Dickins @ 2004-11-17 20:06 UTC (permalink / raw)
  To: Andrew Morton; +Cc: Andi Kleen, 76306.1226, Andrea Arcangeli, linux-kernel

On Wed, 17 Nov 2004, Andrew Morton wrote:
> Andi Kleen <ak@suse.de> wrote:
> > On Tue, Nov 16, 2004 at 10:54:09PM -0500, Chuck Ebbert wrote:
> > > On Wed, 17 Nov 2004 at 02:00:20 +0100, Andi Kleen wrote:
> > > > On Mon, Nov 15, 2004 at 11:15:51PM -0500, Chuck Ebbert wrote:
> > > > > Andrea posted this one-liner a while ago as part of a larger patch.  He said
> > > > > it fixed return of the wrong policy in some conditions.  Was this a valid fix?
> > > >
> > > > Yes it was.
> > > 
> > >   At least it wasn't dropped -- it's in -mm as part of
> > > fix-for-mpol-mm-corruption-on-tmpfs, though it's unrelated to tmpfs.
> > > (That patch contains three separate changes...)
> > > 
> > >   Should just this part, which changes '<' to '<=', be pushed upstream?
> > 
> > Yes. I'm sure Andrea will take care of that himself. 
> 
> That fix is contained within fix-for-mpol-mm-corruption-on-tmpfs.patch
> anyway, isn't it?

Yes; and Chuck is right that it's three patches not one.

I think at the least you should split it by file into mm/shmem.c
and mm/mempolicy.c parts, they're entirely independent.

I've seen Andi's ack on the '<=' fix,
I've not seen his ack on the mempolicy optimizations.

> And that patch is slated for merging once I work out
> whether Hugh and Andrea have sorted things out?

Well... it remains the case that Andrea prefers his shmem.c
patch to mine, and I prefer mine to his, while we both agree
the other's works.  I'm a lot more anxious to see the fix go
into 2.6.10 than to lose it amidst debate back and forth; and
I bet Andrea feels just the same.  Choose whichever you prefer
or find easier to go with - I expect that'll be Andrea's since
you have it there in your tree.

I'm rather more relaxed about it since observing that you now have
Steve Longerbeam's patch, acked by Andi, in your tree.  I presume
you're intending that to go in 2.6.11 or 12, rather than just putting
it there to experiment?  It's a bit silly at present since it leaves
the shmem info->policy in place, while adding a mapping->policy:
I need to go in to convert over and remove shmem's info->policy.
Whereupon the whole problem fixed by Andrea, and the area of our
disagreement, will just vanish.

Hugh


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: Dropped patch: mm/mempolicy.c:sp_lookup()
  2004-11-17 20:06     ` Hugh Dickins
@ 2004-11-17 20:21       ` Andrew Morton
  2004-11-17 20:29         ` Andrew Morton
  2004-11-18  3:08         ` Andrea Arcangeli
  2004-11-18  3:08       ` Andrea Arcangeli
  1 sibling, 2 replies; 11+ messages in thread
From: Andrew Morton @ 2004-11-17 20:21 UTC (permalink / raw)
  To: Hugh Dickins; +Cc: ak, 76306.1226, andrea, linux-kernel

Hugh Dickins <hugh@veritas.com> wrote:
>
> On Wed, 17 Nov 2004, Andrew Morton wrote:
> > Andi Kleen <ak@suse.de> wrote:
> > > On Tue, Nov 16, 2004 at 10:54:09PM -0500, Chuck Ebbert wrote:
> > > > On Wed, 17 Nov 2004 at 02:00:20 +0100, Andi Kleen wrote:
> > > > > On Mon, Nov 15, 2004 at 11:15:51PM -0500, Chuck Ebbert wrote:
> > > > > > Andrea posted this one-liner a while ago as part of a larger patch.  He said
> > > > > > it fixed return of the wrong policy in some conditions.  Was this a valid fix?
> > > > >
> > > > > Yes it was.
> > > > 
> > > >   At least it wasn't dropped -- it's in -mm as part of
> > > > fix-for-mpol-mm-corruption-on-tmpfs, though it's unrelated to tmpfs.
> > > > (That patch contains three separate changes...)
> > > > 
> > > >   Should just this part, which changes '<' to '<=', be pushed upstream?
> > > 
> > > Yes. I'm sure Andrea will take care of that himself. 
> > 
> > That fix is contained within fix-for-mpol-mm-corruption-on-tmpfs.patch
> > anyway, isn't it?
> 
> Yes; and Chuck is right that it's three patches not one.

Always a source of hassles, that.

> I think at the least you should split it by file into mm/shmem.c
> and mm/mempolicy.c parts, they're entirely independent.
> 
> I've seen Andi's ack on the '<=' fix,
> I've not seen his ack on the mempolicy optimizations.

Sigh.  OK, I'll split the patch into three and will feed the `<=' fix and
the symlink fix into 2.6.10.  The mempolicy optimisation can await 2.6.11.


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: Dropped patch: mm/mempolicy.c:sp_lookup()
  2004-11-17 20:21       ` Andrew Morton
@ 2004-11-17 20:29         ` Andrew Morton
  2004-11-18  5:05           ` Andi Kleen
  2004-11-18  3:08         ` Andrea Arcangeli
  1 sibling, 1 reply; 11+ messages in thread
From: Andrew Morton @ 2004-11-17 20:29 UTC (permalink / raw)
  To: hugh, ak, 76306.1226, andrea, linux-kernel

Andrew Morton <akpm@osdl.org> wrote:
>
> OK, I'll split the patch into three and will feed the `<=' fix and
>  the symlink fix into 2.6.10.

Here's the splitup:


fix-for-mpol-mm-corruption-on-tmpfs.patch:


From: Andrea Arcangeli <andrea@novell.com>

With the inline symlink shmem_inode_info structure is overwritten with data
until vfs_inode, and that caused the ->policy to be a corrupted pointer
during unlink.  It wasn't immediatly easy to see what was going on due the
random mm corruption that generated a weird oops, it looked more like a
race condition on freed memory at first.

There's simply no need to set a policy for inodes, since the idx is always
zero.  All we have to do is to initialize the data structure (the semaphore
may need to run during the page allocation for the non-inline symlink) but
we don't need to allocate the rb nodes.  This way we don't need to call
mpol_free during the destroy_inode (not doable at all if the policy rbtree
is corrupt by the inline symlink ;).

An equivalent version of this patch based on a 2.6.5 tree with additional
numa features on top of this (i.e.  interleaved by default, and that's
prompted me to add a comment in the LNK init path), works fine in a numa
simulation on my laptop (untested on the bare hardware).

Signed-off-by: Andrea Arcangeli <andrea@novell.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 25-akpm/mm/shmem.c |   12 ++++++++++--
 1 files changed, 10 insertions(+), 2 deletions(-)

diff -puN mm/shmem.c~fix-for-mpol-mm-corruption-on-tmpfs mm/shmem.c
--- 25/mm/shmem.c~fix-for-mpol-mm-corruption-on-tmpfs	2004-11-17 12:25:10.202621096 -0800
+++ 25-akpm/mm/shmem.c	2004-11-17 12:25:10.208620184 -0800
@@ -1283,7 +1283,6 @@ shmem_get_inode(struct super_block *sb, 
 		info = SHMEM_I(inode);
 		memset(info, 0, (char *)inode - (char *)info);
 		spin_lock_init(&info->lock);
- 		mpol_shared_policy_init(&info->policy);
 		INIT_LIST_HEAD(&info->swaplist);
 
 		switch (mode & S_IFMT) {
@@ -1294,6 +1293,7 @@ shmem_get_inode(struct super_block *sb, 
 		case S_IFREG:
 			inode->i_op = &shmem_inode_operations;
 			inode->i_fop = &shmem_file_operations;
+			mpol_shared_policy_init(&info->policy);
 			break;
 		case S_IFDIR:
 			inode->i_nlink++;
@@ -1303,6 +1303,11 @@ shmem_get_inode(struct super_block *sb, 
 			inode->i_fop = &simple_dir_operations;
 			break;
 		case S_IFLNK:
+			/*
+			 * Must not load anything in the rbtree,
+			 * mpol_free_shared_policy will not be called.
+			 */
+			mpol_shared_policy_init(&info->policy);
 			break;
 		}
 	} else if (sbinfo) {
@@ -2021,7 +2026,10 @@ static struct inode *shmem_alloc_inode(s
 
 static void shmem_destroy_inode(struct inode *inode)
 {
-	mpol_free_shared_policy(&SHMEM_I(inode)->policy);
+	if ((inode->i_mode & S_IFMT) == S_IFREG) {
+		/* only struct inode is valid if it's an inline symlink */
+		mpol_free_shared_policy(&SHMEM_I(inode)->policy);
+	}
 	kmem_cache_free(shmem_inode_cachep, SHMEM_I(inode));
 }
 
_

mempolicy-selects-wrong-policy-fix.patch:


From: Andrea Arcangeli <andrea@novell.com>

mempolicy.c code will return the wrong policy in some cases.

Signed-off-by: Andrea Arcangeli <andrea@novell.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 25-akpm/mm/mempolicy.c |    8 ++++----
 1 files changed, 4 insertions(+), 4 deletions(-)

diff -puN mm/mempolicy.c~mempolicy-selects-wrong-policy-fix mm/mempolicy.c
--- 25/mm/mempolicy.c~mempolicy-selects-wrong-policy-fix	2004-11-17 12:25:42.253748584 -0800
+++ 25-akpm/mm/mempolicy.c	2004-11-17 12:25:42.257747976 -0800
@@ -1092,13 +1092,13 @@ sp_lookup(struct shared_policy *sp, unsi
 
 	while (n) {
 		struct sp_node *p = rb_entry(n, struct sp_node, nd);
-		if (start >= p->end) {
+
+		if (start >= p->end)
 			n = n->rb_right;
-		} else if (end < p->start) {
+		else if (end <= p->start)
 			n = n->rb_left;
-		} else {
+		else
 			break;
-		}
 	}
 	if (!n)
 		return NULL;
_


mempolicy-optimization.patch:

From: Andrea Arcangeli <andrea@novell.com>

Some optimizations in mempolicy.c (like to avoid rebalancing the tree while
destroying it and by breaking loops early and not checking for invariant
conditions in the replace operation).

Signed-off-by: Andrea Arcangeli <andrea@novell.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 25-akpm/mm/mempolicy.c |   10 ++++------
 1 files changed, 4 insertions(+), 6 deletions(-)

diff -puN mm/mempolicy.c~mempolicy-optimization mm/mempolicy.c
--- 25/mm/mempolicy.c~mempolicy-optimization	2004-11-17 12:26:40.149947024 -0800
+++ 25-akpm/mm/mempolicy.c	2004-11-17 12:26:40.153946416 -0800
@@ -1211,12 +1211,10 @@ restart:
 						return -ENOMEM;
 					goto restart;
 				}
-				n->end = end;
+				n->end = start;
 				sp_insert(sp, new2);
-				new2 = NULL;
-			}
-			/* Old crossing beginning, but not end (easy) */
-			if (n->start < start && n->end > start)
+				break;
+			} else
 				n->end = start;
 		}
 		if (!next)
@@ -1270,11 +1268,11 @@ void mpol_free_shared_policy(struct shar
 	while (next) {
 		n = rb_entry(next, struct sp_node, nd);
 		next = rb_next(&n->nd);
-		rb_erase(&n->nd, &p->root);
 		mpol_free(n->policy);
 		kmem_cache_free(sn_cache, n);
 	}
 	spin_unlock(&p->lock);
+	p->root = RB_ROOT;
 }
 
 struct page *
_


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: Dropped patch: mm/mempolicy.c:sp_lookup()
  2004-11-17 20:21       ` Andrew Morton
  2004-11-17 20:29         ` Andrew Morton
@ 2004-11-18  3:08         ` Andrea Arcangeli
  1 sibling, 0 replies; 11+ messages in thread
From: Andrea Arcangeli @ 2004-11-18  3:08 UTC (permalink / raw)
  To: Andrew Morton; +Cc: Hugh Dickins, ak, 76306.1226, linux-kernel

On Wed, Nov 17, 2004 at 12:21:23PM -0800, Andrew Morton wrote:
> Sigh.  OK, I'll split the patch into three and will feed the `<=' fix and
> the symlink fix into 2.6.10. [..]

thanks.

> [..] The mempolicy optimisation can await 2.6.11.

sure.

About Hugh's version of the shmem.c part, I'm fine with it, but I find
more robust to destroy the mpol in the delete_inode callback than in
delete_inode (for shmfs is the same due the dcache pin), since delete_inode
is normally associated with the unlink operation, but the mpol must go
away before the inode is freed, and the inode is freed in the
destroy_inode (again for shmfs it's the same as delete_inode), plus I
find my version a bit simpler.

As Hugh said as far as one of the two ges merged I'm fine of course ;).

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: Dropped patch: mm/mempolicy.c:sp_lookup()
  2004-11-17 20:06     ` Hugh Dickins
  2004-11-17 20:21       ` Andrew Morton
@ 2004-11-18  3:08       ` Andrea Arcangeli
  1 sibling, 0 replies; 11+ messages in thread
From: Andrea Arcangeli @ 2004-11-18  3:08 UTC (permalink / raw)
  To: Hugh Dickins; +Cc: Andrew Morton, Andi Kleen, 76306.1226, linux-kernel

On Wed, Nov 17, 2004 at 08:06:35PM +0000, Hugh Dickins wrote:
> I bet Andrea feels just the same. [..]

indeed

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: Dropped patch: mm/mempolicy.c:sp_lookup()
  2004-11-17 20:29         ` Andrew Morton
@ 2004-11-18  5:05           ` Andi Kleen
  0 siblings, 0 replies; 11+ messages in thread
From: Andi Kleen @ 2004-11-18  5:05 UTC (permalink / raw)
  To: Andrew Morton; +Cc: hugh, ak, 76306.1226, andrea, linux-kernel

> Some optimizations in mempolicy.c (like to avoid rebalancing the tree while
> destroying it and by breaking loops early and not checking for invariant
> conditions in the replace operation).

[...]
> 
> diff -puN mm/mempolicy.c~mempolicy-optimization mm/mempolicy.c
> --- 25/mm/mempolicy.c~mempolicy-optimization	2004-11-17 12:26:40.149947024 -0800
> +++ 25-akpm/mm/mempolicy.c	2004-11-17 12:26:40.153946416 -0800
> @@ -1211,12 +1211,10 @@ restart:
>  						return -ENOMEM;
>  					goto restart;
>  				}
> -				n->end = end;
> +				n->end = start;
>  				sp_insert(sp, new2);
> -				new2 = NULL;
> -			}
> -			/* Old crossing beginning, but not end (easy) */
> -			if (n->start < start && n->end > start)
> +				break;
> +			} else
>  				n->end = start;
>  		}
>  		if (!next)

I'm not quite sure about this one.

> @@ -1270,11 +1268,11 @@ void mpol_free_shared_policy(struct shar
>  	while (next) {
>  		n = rb_entry(next, struct sp_node, nd);
>  		next = rb_next(&n->nd);
> -		rb_erase(&n->nd, &p->root);
>  		mpol_free(n->policy);
>  		kmem_cache_free(sn_cache, n);
>  	}
>  	spin_unlock(&p->lock);
> +	p->root = RB_ROOT;
>  }

This hunk is fine.

-Andi

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2004-11-18  5:21 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-11-17  3:54 Dropped patch: mm/mempolicy.c:sp_lookup() Chuck Ebbert
2004-11-17 12:08 ` Andi Kleen
2004-11-17 19:13   ` Andrew Morton
2004-11-17 20:06     ` Hugh Dickins
2004-11-17 20:21       ` Andrew Morton
2004-11-17 20:29         ` Andrew Morton
2004-11-18  5:05           ` Andi Kleen
2004-11-18  3:08         ` Andrea Arcangeli
2004-11-18  3:08       ` Andrea Arcangeli
  -- strict thread matches above, loose matches on Subject: below --
2004-11-16  4:15 Chuck Ebbert
2004-11-17  1:00 ` Andi Kleen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox