All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] kernel/fork.c : remove local 'oldmm' and retval
@ 2013-11-27  3:12 ` Daeseok Youn
  0 siblings, 0 replies; 9+ messages in thread
From: Daeseok Youn @ 2013-11-27  3:12 UTC (permalink / raw)
  To: akpm; +Cc: oleg, viro, ebiederm, luto, linux-kernel, kernel-janitors

From cec2f201f0dc99a33a58d9d1e0452140bb0993a1 Mon Sep 17 00:00:00 2001
From: Daeseok Youn <daeseok.youn@lge.com>
Date: Wed, 27 Nov 2013 09:54:41 +0900
Subject: [PATCH] kernel/fork.c : remove local 'oldmm' and retval

 Local oldmm is used only for increaing mm_users field
 in current->mm. When clone_flags have a CLONE_VM flag,
 current->mm is assigning to local 'mm'.
 Local retval is used only for returning -ENOMEM value.
 When dup_mm() is failed, just return -ENOMEM.

 Signed-off-by: Daeseok Youn <daeseok.youn@gmail.com>
---
 kernel/fork.c |   16 +++++-----------
 1 file changed, 5 insertions(+), 11 deletions(-)

diff --git a/kernel/fork.c b/kernel/fork.c
index 728d5be..022a0af 100644
--- a/kernel/fork.c
+++ b/kernel/fork.c
@@ -857,8 +857,7 @@ fail_nocontext:
 
 static int copy_mm(unsigned long clone_flags, struct task_struct *tsk)
 {
-	struct mm_struct *mm, *oldmm;
-	int retval;
+	struct mm_struct *mm;
 
 	tsk->min_flt = tsk->maj_flt = 0;
 	tsk->nvcsw = tsk->nivcsw = 0;
@@ -874,28 +873,23 @@ static int copy_mm(unsigned long clone_flags, struct task_struct *tsk)
 	 *
 	 * We need to steal a active VM for that..
 	 */
-	oldmm = current->mm;
-	if (!oldmm)
+	if (!current->mm)
 		return 0;
 
 	if (clone_flags & CLONE_VM) {
-		atomic_inc(&oldmm->mm_users);
-		mm = oldmm;
+		mm = current->mm;
+		atomic_inc(&mm->mm_users);
 		goto good_mm;
 	}
 
-	retval = -ENOMEM;
 	mm = dup_mm(tsk);
 	if (!mm)
-		goto fail_nomem;
+		return -ENOMEM;
 
 good_mm:
 	tsk->mm = mm;
 	tsk->active_mm = mm;
 	return 0;
-
-fail_nomem:
-	return retval;
 }
 
 static int copy_fs(unsigned long clone_flags, struct task_struct *tsk)
-- 
1.7.9.5

---

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

* [PATCH] kernel/fork.c : remove local 'oldmm' and retval
@ 2013-11-27  3:12 ` Daeseok Youn
  0 siblings, 0 replies; 9+ messages in thread
From: Daeseok Youn @ 2013-11-27  3:12 UTC (permalink / raw)
  To: akpm; +Cc: oleg, viro, ebiederm, luto, linux-kernel, kernel-janitors

>From cec2f201f0dc99a33a58d9d1e0452140bb0993a1 Mon Sep 17 00:00:00 2001
From: Daeseok Youn <daeseok.youn@lge.com>
Date: Wed, 27 Nov 2013 09:54:41 +0900
Subject: [PATCH] kernel/fork.c : remove local 'oldmm' and retval

 Local oldmm is used only for increaing mm_users field
 in current->mm. When clone_flags have a CLONE_VM flag,
 current->mm is assigning to local 'mm'.
 Local retval is used only for returning -ENOMEM value.
 When dup_mm() is failed, just return -ENOMEM.

 Signed-off-by: Daeseok Youn <daeseok.youn@gmail.com>
---
 kernel/fork.c |   16 +++++-----------
 1 file changed, 5 insertions(+), 11 deletions(-)

diff --git a/kernel/fork.c b/kernel/fork.c
index 728d5be..022a0af 100644
--- a/kernel/fork.c
+++ b/kernel/fork.c
@@ -857,8 +857,7 @@ fail_nocontext:
 
 static int copy_mm(unsigned long clone_flags, struct task_struct *tsk)
 {
-	struct mm_struct *mm, *oldmm;
-	int retval;
+	struct mm_struct *mm;
 
 	tsk->min_flt = tsk->maj_flt = 0;
 	tsk->nvcsw = tsk->nivcsw = 0;
@@ -874,28 +873,23 @@ static int copy_mm(unsigned long clone_flags, struct task_struct *tsk)
 	 *
 	 * We need to steal a active VM for that..
 	 */
-	oldmm = current->mm;
-	if (!oldmm)
+	if (!current->mm)
 		return 0;
 
 	if (clone_flags & CLONE_VM) {
-		atomic_inc(&oldmm->mm_users);
-		mm = oldmm;
+		mm = current->mm;
+		atomic_inc(&mm->mm_users);
 		goto good_mm;
 	}
 
-	retval = -ENOMEM;
 	mm = dup_mm(tsk);
 	if (!mm)
-		goto fail_nomem;
+		return -ENOMEM;
 
 good_mm:
 	tsk->mm = mm;
 	tsk->active_mm = mm;
 	return 0;
-
-fail_nomem:
-	return retval;
 }
 
 static int copy_fs(unsigned long clone_flags, struct task_struct *tsk)
-- 
1.7.9.5

---

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

* Re: [PATCH] kernel/fork.c : remove local 'oldmm' and retval
  2013-11-27  3:12 ` Daeseok Youn
@ 2013-11-27  3:24   ` Eric W. Biederman
  -1 siblings, 0 replies; 9+ messages in thread
From: Eric W. Biederman @ 2013-11-27  3:24 UTC (permalink / raw)
  To: Daeseok Youn; +Cc: akpm, oleg, viro, luto, linux-kernel, kernel-janitors

Daeseok Youn <daeseok.youn@gmail.com> writes:

> From cec2f201f0dc99a33a58d9d1e0452140bb0993a1 Mon Sep 17 00:00:00 2001
> From: Daeseok Youn <daeseok.youn@lge.com>
> Date: Wed, 27 Nov 2013 09:54:41 +0900
> Subject: [PATCH] kernel/fork.c : remove local 'oldmm' and retval
>
>  Local oldmm is used only for increaing mm_users field
>  in current->mm. When clone_flags have a CLONE_VM flag,
>  current->mm is assigning to local 'mm'.
>  Local retval is used only for returning -ENOMEM value.
>  When dup_mm() is failed, just return -ENOMEM.

You are making the generated code worse, and the source less
comprehensible.

You are adding additional exit points making it harder to analyze the
function.

You are introducing races and expense by not caching current->mm in
oldmm.

This looks like code churn for no good reason, and that will result in
worse code.

ick.

Eric

>  Signed-off-by: Daeseok Youn <daeseok.youn@gmail.com>
> ---
>  kernel/fork.c |   16 +++++-----------
>  1 file changed, 5 insertions(+), 11 deletions(-)
>
> diff --git a/kernel/fork.c b/kernel/fork.c
> index 728d5be..022a0af 100644
> --- a/kernel/fork.c
> +++ b/kernel/fork.c
> @@ -857,8 +857,7 @@ fail_nocontext:
>  
>  static int copy_mm(unsigned long clone_flags, struct task_struct *tsk)
>  {
> -	struct mm_struct *mm, *oldmm;
> -	int retval;
> +	struct mm_struct *mm;
>  
>  	tsk->min_flt = tsk->maj_flt = 0;
>  	tsk->nvcsw = tsk->nivcsw = 0;
> @@ -874,28 +873,23 @@ static int copy_mm(unsigned long clone_flags, struct task_struct *tsk)
>  	 *
>  	 * We need to steal a active VM for that..
>  	 */
> -	oldmm = current->mm;
> -	if (!oldmm)
> +	if (!current->mm)
>  		return 0;
>  
>  	if (clone_flags & CLONE_VM) {
> -		atomic_inc(&oldmm->mm_users);
> -		mm = oldmm;
> +		mm = current->mm;
> +		atomic_inc(&mm->mm_users);
>  		goto good_mm;
>  	}
>  
> -	retval = -ENOMEM;
>  	mm = dup_mm(tsk);
>  	if (!mm)
> -		goto fail_nomem;
> +		return -ENOMEM;
>  
>  good_mm:
>  	tsk->mm = mm;
>  	tsk->active_mm = mm;
>  	return 0;
> -
> -fail_nomem:
> -	return retval;
>  }
>  
>  static int copy_fs(unsigned long clone_flags, struct task_struct *tsk)

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

* Re: [PATCH] kernel/fork.c : remove local 'oldmm' and retval
@ 2013-11-27  3:24   ` Eric W. Biederman
  0 siblings, 0 replies; 9+ messages in thread
From: Eric W. Biederman @ 2013-11-27  3:24 UTC (permalink / raw)
  To: Daeseok Youn; +Cc: akpm, oleg, viro, luto, linux-kernel, kernel-janitors

Daeseok Youn <daeseok.youn@gmail.com> writes:

> From cec2f201f0dc99a33a58d9d1e0452140bb0993a1 Mon Sep 17 00:00:00 2001
> From: Daeseok Youn <daeseok.youn@lge.com>
> Date: Wed, 27 Nov 2013 09:54:41 +0900
> Subject: [PATCH] kernel/fork.c : remove local 'oldmm' and retval
>
>  Local oldmm is used only for increaing mm_users field
>  in current->mm. When clone_flags have a CLONE_VM flag,
>  current->mm is assigning to local 'mm'.
>  Local retval is used only for returning -ENOMEM value.
>  When dup_mm() is failed, just return -ENOMEM.

You are making the generated code worse, and the source less
comprehensible.

You are adding additional exit points making it harder to analyze the
function.

You are introducing races and expense by not caching current->mm in
oldmm.

This looks like code churn for no good reason, and that will result in
worse code.

ick.

Eric

>  Signed-off-by: Daeseok Youn <daeseok.youn@gmail.com>
> ---
>  kernel/fork.c |   16 +++++-----------
>  1 file changed, 5 insertions(+), 11 deletions(-)
>
> diff --git a/kernel/fork.c b/kernel/fork.c
> index 728d5be..022a0af 100644
> --- a/kernel/fork.c
> +++ b/kernel/fork.c
> @@ -857,8 +857,7 @@ fail_nocontext:
>  
>  static int copy_mm(unsigned long clone_flags, struct task_struct *tsk)
>  {
> -	struct mm_struct *mm, *oldmm;
> -	int retval;
> +	struct mm_struct *mm;
>  
>  	tsk->min_flt = tsk->maj_flt = 0;
>  	tsk->nvcsw = tsk->nivcsw = 0;
> @@ -874,28 +873,23 @@ static int copy_mm(unsigned long clone_flags, struct task_struct *tsk)
>  	 *
>  	 * We need to steal a active VM for that..
>  	 */
> -	oldmm = current->mm;
> -	if (!oldmm)
> +	if (!current->mm)
>  		return 0;
>  
>  	if (clone_flags & CLONE_VM) {
> -		atomic_inc(&oldmm->mm_users);
> -		mm = oldmm;
> +		mm = current->mm;
> +		atomic_inc(&mm->mm_users);
>  		goto good_mm;
>  	}
>  
> -	retval = -ENOMEM;
>  	mm = dup_mm(tsk);
>  	if (!mm)
> -		goto fail_nomem;
> +		return -ENOMEM;
>  
>  good_mm:
>  	tsk->mm = mm;
>  	tsk->active_mm = mm;
>  	return 0;
> -
> -fail_nomem:
> -	return retval;
>  }
>  
>  static int copy_fs(unsigned long clone_flags, struct task_struct *tsk)

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

* Re: [PATCH] kernel/fork.c : remove local 'oldmm' and retval
       [not found]   ` <CAHb8M2A5h==bu76m1AitY3G6gaTrTdL+VMUw9XUWTC5HB4=79Q@mail.gmail.com>
@ 2013-11-27  5:28       ` DaeSeok Youn
  0 siblings, 0 replies; 9+ messages in thread
From: DaeSeok Youn @ 2013-11-27  5:28 UTC (permalink / raw)
  To: Eric W. Biederman
  Cc: Andrew Morton, oleg, viro, luto, linux-kernel, kernel-janitors

Sorry.
my e-mail was rejected by vger.kernel.org server.
resend my e-mail.

2013/11/27 DaeSeok Youn <daeseok.youn@gmail.com>
>
> Thank you for reviewing my patch.
>
> I am a newbie who want to know kernel source deeply. :)
>
> I agree your comments but I want to explain my patch why it is sent.
>
> I think "ENOMEM" is enough to explain to fail by dup_mm().
> So I replace the goto line to "return -ENOMEM" in if(!mm).
>
> And I think oldmm doesn't use any meaning control in copy_mm(),
> so re-use local 'mm' variable. If the source has less comprehensible,
> how about adding a comment like 'parent and child share address space'
> above "mm = current->mm" in my patch.
>
> just my opinion, let me know if i am wrong.
> Actually I need to learn about kernel source code.
>
> Thanks.
> Daeseok Youn.
>
>
>
> 2013/11/27 Eric W. Biederman <ebiederm@xmission.com>
>
>> Daeseok Youn <daeseok.youn@gmail.com> writes:
>>
>> > From cec2f201f0dc99a33a58d9d1e0452140bb0993a1 Mon Sep 17 00:00:00 2001
>> > From: Daeseok Youn <daeseok.youn@lge.com>
>> > Date: Wed, 27 Nov 2013 09:54:41 +0900
>> > Subject: [PATCH] kernel/fork.c : remove local 'oldmm' and retval
>> >
>> >  Local oldmm is used only for increaing mm_users field
>> >  in current->mm. When clone_flags have a CLONE_VM flag,
>> >  current->mm is assigning to local 'mm'.
>> >  Local retval is used only for returning -ENOMEM value.
>> >  When dup_mm() is failed, just return -ENOMEM.
>>
>> You are making the generated code worse, and the source less
>> comprehensible.
>>
>> You are adding additional exit points making it harder to analyze the
>> function.
>>
>> You are introducing races and expense by not caching current->mm in
>> oldmm.
>>
>> This looks like code churn for no good reason, and that will result in
>> worse code.
>>
>> ick.
>>
>> Eric
>>
>> >  Signed-off-by: Daeseok Youn <daeseok.youn@gmail.com>
>> > ---
>> >  kernel/fork.c |   16 +++++-----------
>> >  1 file changed, 5 insertions(+), 11 deletions(-)
>> >
>> > diff --git a/kernel/fork.c b/kernel/fork.c
>> > index 728d5be..022a0af 100644
>> > --- a/kernel/fork.c
>> > +++ b/kernel/fork.c
>> > @@ -857,8 +857,7 @@ fail_nocontext:
>> >
>> >  static int copy_mm(unsigned long clone_flags, struct task_struct *tsk)
>> >  {
>> > -     struct mm_struct *mm, *oldmm;
>> > -     int retval;
>> > +     struct mm_struct *mm;
>> >
>> >       tsk->min_flt = tsk->maj_flt = 0;
>> >       tsk->nvcsw = tsk->nivcsw = 0;
>> > @@ -874,28 +873,23 @@ static int copy_mm(unsigned long clone_flags, struct task_struct *tsk)
>> >        *
>> >        * We need to steal a active VM for that..
>> >        */
>> > -     oldmm = current->mm;
>> > -     if (!oldmm)
>> > +     if (!current->mm)
>> >               return 0;
>> >
>> >       if (clone_flags & CLONE_VM) {
>> > -             atomic_inc(&oldmm->mm_users);
>> > -             mm = oldmm;
>> > +             mm = current->mm;
>> > +             atomic_inc(&mm->mm_users);
>> >               goto good_mm;
>> >       }
>> >
>> > -     retval = -ENOMEM;
>> >       mm = dup_mm(tsk);
>> >       if (!mm)
>> > -             goto fail_nomem;
>> > +             return -ENOMEM;
>> >
>> >  good_mm:
>> >       tsk->mm = mm;
>> >       tsk->active_mm = mm;
>> >       return 0;
>> > -
>> > -fail_nomem:
>> > -     return retval;
>> >  }
>> >
>> >  static int copy_fs(unsigned long clone_flags, struct task_struct *tsk)
>
>

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

* Re: [PATCH] kernel/fork.c : remove local 'oldmm' and retval
@ 2013-11-27  5:28       ` DaeSeok Youn
  0 siblings, 0 replies; 9+ messages in thread
From: DaeSeok Youn @ 2013-11-27  5:28 UTC (permalink / raw)
  To: Eric W. Biederman
  Cc: Andrew Morton, oleg, viro, luto, linux-kernel, kernel-janitors

Sorry.
my e-mail was rejected by vger.kernel.org server.
resend my e-mail.

2013/11/27 DaeSeok Youn <daeseok.youn@gmail.com>
>
> Thank you for reviewing my patch.
>
> I am a newbie who want to know kernel source deeply. :)
>
> I agree your comments but I want to explain my patch why it is sent.
>
> I think "ENOMEM" is enough to explain to fail by dup_mm().
> So I replace the goto line to "return -ENOMEM" in if(!mm).
>
> And I think oldmm doesn't use any meaning control in copy_mm(),
> so re-use local 'mm' variable. If the source has less comprehensible,
> how about adding a comment like 'parent and child share address space'
> above "mm = current->mm" in my patch.
>
> just my opinion, let me know if i am wrong.
> Actually I need to learn about kernel source code.
>
> Thanks.
> Daeseok Youn.
>
>
>
> 2013/11/27 Eric W. Biederman <ebiederm@xmission.com>
>
>> Daeseok Youn <daeseok.youn@gmail.com> writes:
>>
>> > From cec2f201f0dc99a33a58d9d1e0452140bb0993a1 Mon Sep 17 00:00:00 2001
>> > From: Daeseok Youn <daeseok.youn@lge.com>
>> > Date: Wed, 27 Nov 2013 09:54:41 +0900
>> > Subject: [PATCH] kernel/fork.c : remove local 'oldmm' and retval
>> >
>> >  Local oldmm is used only for increaing mm_users field
>> >  in current->mm. When clone_flags have a CLONE_VM flag,
>> >  current->mm is assigning to local 'mm'.
>> >  Local retval is used only for returning -ENOMEM value.
>> >  When dup_mm() is failed, just return -ENOMEM.
>>
>> You are making the generated code worse, and the source less
>> comprehensible.
>>
>> You are adding additional exit points making it harder to analyze the
>> function.
>>
>> You are introducing races and expense by not caching current->mm in
>> oldmm.
>>
>> This looks like code churn for no good reason, and that will result in
>> worse code.
>>
>> ick.
>>
>> Eric
>>
>> >  Signed-off-by: Daeseok Youn <daeseok.youn@gmail.com>
>> > ---
>> >  kernel/fork.c |   16 +++++-----------
>> >  1 file changed, 5 insertions(+), 11 deletions(-)
>> >
>> > diff --git a/kernel/fork.c b/kernel/fork.c
>> > index 728d5be..022a0af 100644
>> > --- a/kernel/fork.c
>> > +++ b/kernel/fork.c
>> > @@ -857,8 +857,7 @@ fail_nocontext:
>> >
>> >  static int copy_mm(unsigned long clone_flags, struct task_struct *tsk)
>> >  {
>> > -     struct mm_struct *mm, *oldmm;
>> > -     int retval;
>> > +     struct mm_struct *mm;
>> >
>> >       tsk->min_flt = tsk->maj_flt = 0;
>> >       tsk->nvcsw = tsk->nivcsw = 0;
>> > @@ -874,28 +873,23 @@ static int copy_mm(unsigned long clone_flags, struct task_struct *tsk)
>> >        *
>> >        * We need to steal a active VM for that..
>> >        */
>> > -     oldmm = current->mm;
>> > -     if (!oldmm)
>> > +     if (!current->mm)
>> >               return 0;
>> >
>> >       if (clone_flags & CLONE_VM) {
>> > -             atomic_inc(&oldmm->mm_users);
>> > -             mm = oldmm;
>> > +             mm = current->mm;
>> > +             atomic_inc(&mm->mm_users);
>> >               goto good_mm;
>> >       }
>> >
>> > -     retval = -ENOMEM;
>> >       mm = dup_mm(tsk);
>> >       if (!mm)
>> > -             goto fail_nomem;
>> > +             return -ENOMEM;
>> >
>> >  good_mm:
>> >       tsk->mm = mm;
>> >       tsk->active_mm = mm;
>> >       return 0;
>> > -
>> > -fail_nomem:
>> > -     return retval;
>> >  }
>> >
>> >  static int copy_fs(unsigned long clone_flags, struct task_struct *tsk)
>
>

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

* Re: [PATCH] kernel/fork.c : remove local 'oldmm' and retval
  2013-11-27  3:24   ` Eric W. Biederman
@ 2013-11-27  6:35     ` Julia Lawall
  -1 siblings, 0 replies; 9+ messages in thread
From: Julia Lawall @ 2013-11-27  6:35 UTC (permalink / raw)
  To: Eric W. Biederman
  Cc: Daeseok Youn, akpm, oleg, viro, luto, linux-kernel,
	kernel-janitors

On Tue, 26 Nov 2013, Eric W. Biederman wrote:

> Daeseok Youn <daeseok.youn@gmail.com> writes:
> 
> > From cec2f201f0dc99a33a58d9d1e0452140bb0993a1 Mon Sep 17 00:00:00 2001
> > From: Daeseok Youn <daeseok.youn@lge.com>
> > Date: Wed, 27 Nov 2013 09:54:41 +0900
> > Subject: [PATCH] kernel/fork.c : remove local 'oldmm' and retval
> >
> >  Local oldmm is used only for increaing mm_users field
> >  in current->mm. When clone_flags have a CLONE_VM flag,
> >  current->mm is assigning to local 'mm'.
> >  Local retval is used only for returning -ENOMEM value.
> >  When dup_mm() is failed, just return -ENOMEM.
> 
> You are making the generated code worse, and the source less
> comprehensible.
> 
> You are adding additional exit points making it harder to analyze the
> function.

There is neverthless a lot of code that just does return XXX; if there is 
nothng else to do in the error-handling code.

Here I find at least the retval = -ENOMEM; at top level confusing.  
Already, the previous if+goto that is not error handling code is a little 
bit of a surprise, but the retval = -ENOMEM; in the main flow of execution 
suggests that for some reason the error handling code is being put after 
the if, for some reason, which does sometimes happen too.  But then it 
turns out that this is not error handling code.  It may still succeed or 
fail.  So it could be clearer to put the retval = -ENOMEM; inside the if 
just before the goto, if the goto is what is wanted.

On the other hand for kernel code maybe it is better not to touch what 
work, so it is more of a general esthetic comment.

julia


> You are introducing races and expense by not caching current->mm in
> oldmm.
> 
> This looks like code churn for no good reason, and that will result in
> worse code.
> 
> ick.
> 
> Eric
> 
> >  Signed-off-by: Daeseok Youn <daeseok.youn@gmail.com>
> > ---
> >  kernel/fork.c |   16 +++++-----------
> >  1 file changed, 5 insertions(+), 11 deletions(-)
> >
> > diff --git a/kernel/fork.c b/kernel/fork.c
> > index 728d5be..022a0af 100644
> > --- a/kernel/fork.c
> > +++ b/kernel/fork.c
> > @@ -857,8 +857,7 @@ fail_nocontext:
> >  
> >  static int copy_mm(unsigned long clone_flags, struct task_struct *tsk)
> >  {
> > -	struct mm_struct *mm, *oldmm;
> > -	int retval;
> > +	struct mm_struct *mm;
> >  
> >  	tsk->min_flt = tsk->maj_flt = 0;
> >  	tsk->nvcsw = tsk->nivcsw = 0;
> > @@ -874,28 +873,23 @@ static int copy_mm(unsigned long clone_flags, struct task_struct *tsk)
> >  	 *
> >  	 * We need to steal a active VM for that..
> >  	 */
> > -	oldmm = current->mm;
> > -	if (!oldmm)
> > +	if (!current->mm)
> >  		return 0;
> >  
> >  	if (clone_flags & CLONE_VM) {
> > -		atomic_inc(&oldmm->mm_users);
> > -		mm = oldmm;
> > +		mm = current->mm;
> > +		atomic_inc(&mm->mm_users);
> >  		goto good_mm;
> >  	}
> >  
> > -	retval = -ENOMEM;
> >  	mm = dup_mm(tsk);
> >  	if (!mm)
> > -		goto fail_nomem;
> > +		return -ENOMEM;
> >  
> >  good_mm:
> >  	tsk->mm = mm;
> >  	tsk->active_mm = mm;
> >  	return 0;
> > -
> > -fail_nomem:
> > -	return retval;
> >  }
> >  
> >  static int copy_fs(unsigned long clone_flags, struct task_struct *tsk)
> --
> To unsubscribe from this list: send the line "unsubscribe kernel-janitors" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 

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

* Re: [PATCH] kernel/fork.c : remove local 'oldmm' and retval
@ 2013-11-27  6:35     ` Julia Lawall
  0 siblings, 0 replies; 9+ messages in thread
From: Julia Lawall @ 2013-11-27  6:35 UTC (permalink / raw)
  To: Eric W. Biederman
  Cc: Daeseok Youn, akpm, oleg, viro, luto, linux-kernel,
	kernel-janitors

On Tue, 26 Nov 2013, Eric W. Biederman wrote:

> Daeseok Youn <daeseok.youn@gmail.com> writes:
> 
> > From cec2f201f0dc99a33a58d9d1e0452140bb0993a1 Mon Sep 17 00:00:00 2001
> > From: Daeseok Youn <daeseok.youn@lge.com>
> > Date: Wed, 27 Nov 2013 09:54:41 +0900
> > Subject: [PATCH] kernel/fork.c : remove local 'oldmm' and retval
> >
> >  Local oldmm is used only for increaing mm_users field
> >  in current->mm. When clone_flags have a CLONE_VM flag,
> >  current->mm is assigning to local 'mm'.
> >  Local retval is used only for returning -ENOMEM value.
> >  When dup_mm() is failed, just return -ENOMEM.
> 
> You are making the generated code worse, and the source less
> comprehensible.
> 
> You are adding additional exit points making it harder to analyze the
> function.

There is neverthless a lot of code that just does return XXX; if there is 
nothng else to do in the error-handling code.

Here I find at least the retval = -ENOMEM; at top level confusing.  
Already, the previous if+goto that is not error handling code is a little 
bit of a surprise, but the retval = -ENOMEM; in the main flow of execution 
suggests that for some reason the error handling code is being put after 
the if, for some reason, which does sometimes happen too.  But then it 
turns out that this is not error handling code.  It may still succeed or 
fail.  So it could be clearer to put the retval = -ENOMEM; inside the if 
just before the goto, if the goto is what is wanted.

On the other hand for kernel code maybe it is better not to touch what 
work, so it is more of a general esthetic comment.

julia


> You are introducing races and expense by not caching current->mm in
> oldmm.
> 
> This looks like code churn for no good reason, and that will result in
> worse code.
> 
> ick.
> 
> Eric
> 
> >  Signed-off-by: Daeseok Youn <daeseok.youn@gmail.com>
> > ---
> >  kernel/fork.c |   16 +++++-----------
> >  1 file changed, 5 insertions(+), 11 deletions(-)
> >
> > diff --git a/kernel/fork.c b/kernel/fork.c
> > index 728d5be..022a0af 100644
> > --- a/kernel/fork.c
> > +++ b/kernel/fork.c
> > @@ -857,8 +857,7 @@ fail_nocontext:
> >  
> >  static int copy_mm(unsigned long clone_flags, struct task_struct *tsk)
> >  {
> > -	struct mm_struct *mm, *oldmm;
> > -	int retval;
> > +	struct mm_struct *mm;
> >  
> >  	tsk->min_flt = tsk->maj_flt = 0;
> >  	tsk->nvcsw = tsk->nivcsw = 0;
> > @@ -874,28 +873,23 @@ static int copy_mm(unsigned long clone_flags, struct task_struct *tsk)
> >  	 *
> >  	 * We need to steal a active VM for that..
> >  	 */
> > -	oldmm = current->mm;
> > -	if (!oldmm)
> > +	if (!current->mm)
> >  		return 0;
> >  
> >  	if (clone_flags & CLONE_VM) {
> > -		atomic_inc(&oldmm->mm_users);
> > -		mm = oldmm;
> > +		mm = current->mm;
> > +		atomic_inc(&mm->mm_users);
> >  		goto good_mm;
> >  	}
> >  
> > -	retval = -ENOMEM;
> >  	mm = dup_mm(tsk);
> >  	if (!mm)
> > -		goto fail_nomem;
> > +		return -ENOMEM;
> >  
> >  good_mm:
> >  	tsk->mm = mm;
> >  	tsk->active_mm = mm;
> >  	return 0;
> > -
> > -fail_nomem:
> > -	return retval;
> >  }
> >  
> >  static int copy_fs(unsigned long clone_flags, struct task_struct *tsk)
> --
> To unsubscribe from this list: send the line "unsubscribe kernel-janitors" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 

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

* Re: [PATCH] kernel/fork.c : remove local 'oldmm' and retval
  2013-11-27  3:12 ` Daeseok Youn
  (?)
  (?)
@ 2013-11-27  7:33 ` DaeSeok Youn
  -1 siblings, 0 replies; 9+ messages in thread
From: DaeSeok Youn @ 2013-11-27  7:33 UTC (permalink / raw)
  To: kernel-janitors

2013/11/27 Julia Lawall <julia.lawall@lip6.fr>:
> On Tue, 26 Nov 2013, Eric W. Biederman wrote:
>
>> Daeseok Youn <daeseok.youn@gmail.com> writes:
>>
>> > From cec2f201f0dc99a33a58d9d1e0452140bb0993a1 Mon Sep 17 00:00:00 2001
>> > From: Daeseok Youn <daeseok.youn@lge.com>
>> > Date: Wed, 27 Nov 2013 09:54:41 +0900
>> > Subject: [PATCH] kernel/fork.c : remove local 'oldmm' and retval
>> >
>> >  Local oldmm is used only for increaing mm_users field
>> >  in current->mm. When clone_flags have a CLONE_VM flag,
>> >  current->mm is assigning to local 'mm'.
>> >  Local retval is used only for returning -ENOMEM value.
>> >  When dup_mm() is failed, just return -ENOMEM.
>>
>> You are making the generated code worse, and the source less
>> comprehensible.
>>
>> You are adding additional exit points making it harder to analyze the
>> function.
>
> There is neverthless a lot of code that just does return XXX; if there is
> nothng else to do in the error-handling code.
>
> Here I find at least the retval = -ENOMEM; at top level confusing.
> Already, the previous if+goto that is not error handling code is a little
> bit of a surprise, but the retval = -ENOMEM; in the main flow of execution
> suggests that for some reason the error handling code is being put after
> the if, for some reason, which does sometimes happen too.  But then it
> turns out that this is not error handling code.  It may still succeed or
> fail.  So it could be clearer to put the retval = -ENOMEM; inside the if
> just before the goto, if the goto is what is wanted.

Thanks for your comment.
actually I sent a e-mail before I get your e-mail.
I think "-ENOMEM" is enough to explain to fail by dup_mm() without
it has not error handling in "if (!mm)".

>
> On the other hand for kernel code maybe it is better not to touch what
> work, so it is more of a general esthetic comment.

Yes, you're right. if codes is explained what it is wanted without any comment,
I think that codes are good, too.

As a newbie, I didn't understand local oldmm what it means.
Because I found if clone flags has "CLONE_VM", child will be shared
address space with
parent. And then oldmm doesn't match completely what it is meaning of.
(just my opinion :) )

please let me know if I'm wrong.

Thanks.
Daeseok Youn.

>
> julia
>
>
>> You are introducing races and expense by not caching current->mm in
>> oldmm.
>>
>> This looks like code churn for no good reason, and that will result in
>> worse code.
>>
>> ick.
>>
>> Eric
>>
>> >  Signed-off-by: Daeseok Youn <daeseok.youn@gmail.com>
>> > ---
>> >  kernel/fork.c |   16 +++++-----------
>> >  1 file changed, 5 insertions(+), 11 deletions(-)
>> >
>> > diff --git a/kernel/fork.c b/kernel/fork.c
>> > index 728d5be..022a0af 100644
>> > --- a/kernel/fork.c
>> > +++ b/kernel/fork.c
>> > @@ -857,8 +857,7 @@ fail_nocontext:
>> >
>> >  static int copy_mm(unsigned long clone_flags, struct task_struct *tsk)
>> >  {
>> > -   struct mm_struct *mm, *oldmm;
>> > -   int retval;
>> > +   struct mm_struct *mm;
>> >
>> >     tsk->min_flt = tsk->maj_flt = 0;
>> >     tsk->nvcsw = tsk->nivcsw = 0;
>> > @@ -874,28 +873,23 @@ static int copy_mm(unsigned long clone_flags, struct task_struct *tsk)
>> >      *
>> >      * We need to steal a active VM for that..
>> >      */
>> > -   oldmm = current->mm;
>> > -   if (!oldmm)
>> > +   if (!current->mm)
>> >             return 0;
>> >
>> >     if (clone_flags & CLONE_VM) {
>> > -           atomic_inc(&oldmm->mm_users);
>> > -           mm = oldmm;
>> > +           mm = current->mm;
>> > +           atomic_inc(&mm->mm_users);
>> >             goto good_mm;
>> >     }
>> >
>> > -   retval = -ENOMEM;
>> >     mm = dup_mm(tsk);
>> >     if (!mm)
>> > -           goto fail_nomem;
>> > +           return -ENOMEM;
>> >
>> >  good_mm:
>> >     tsk->mm = mm;
>> >     tsk->active_mm = mm;
>> >     return 0;
>> > -
>> > -fail_nomem:
>> > -   return retval;
>> >  }
>> >
>> >  static int copy_fs(unsigned long clone_flags, struct task_struct *tsk)
>> --
>> To unsubscribe from this list: send the line "unsubscribe kernel-janitors" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>>

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

end of thread, other threads:[~2013-11-27  7:33 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-11-27  3:12 [PATCH] kernel/fork.c : remove local 'oldmm' and retval Daeseok Youn
2013-11-27  3:12 ` Daeseok Youn
2013-11-27  3:24 ` Eric W. Biederman
2013-11-27  3:24   ` Eric W. Biederman
     [not found]   ` <CAHb8M2A5h==bu76m1AitY3G6gaTrTdL+VMUw9XUWTC5HB4=79Q@mail.gmail.com>
2013-11-27  5:28     ` DaeSeok Youn
2013-11-27  5:28       ` DaeSeok Youn
2013-11-27  6:35   ` Julia Lawall
2013-11-27  6:35     ` Julia Lawall
2013-11-27  7:33 ` DaeSeok Youn

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.