linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jia He <jiakernel@gmail.com>
To: Mike Galbraith <bitbucket@online.de>
Cc: linux-kernel@vger.kernel.org,
	Davidlohr Bueso <davidlohr.bueso@hp.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Rik van Riel <riel@redhat.com>,
	Manfred Spraul <manfred@colorfullife.com>,
	Al Viro <viro@zeniv.linux.org.uk>
Subject: Re: [PATCH] ipc/sem.c: fix update sem_otime when calling sem_op in semaphore initialization
Date: Sun, 22 Sep 2013 17:34:15 +0800	[thread overview]
Message-ID: <523EB997.9090107@gmail.com> (raw)
In-Reply-To: <1379838364.5499.39.camel@marge.simpson.net>

  Thanks for the comments, but pls add my email as "from jiakernel@gmail.com"
if you have a better implementation.U know, it is my first kernel patch, maybe
will give me a brilliant memory in the future :)
  Anyway, your implementation looks not correct to me. Because from "man semop"
sem_otime will record the last sem operation time of semop. If you change the
otime in semget(), it changes the meanings in stardard, doesn't it?

On Sun, 22 Sep 2013 10:26:04 +0200 from bitbucket@online.de wrote:
> On Sun, 2013-09-22 at 10:17 +0200, Mike Galbraith wrote: 
>> On Sun, 2013-09-22 at 10:11 +0800, Jia He wrote: 
>>> In commit 0a2b9d4c,the update of semaphore's sem_otime(last semop time)
>>> was removed because he wanted to move setting sem->sem_otime to one
>>> place. But after that, the initial semop() will not set the otime
>>> because its sem_op value is 0(in semtimedop,will not change
>>> otime if alter == 1).
>>>
>>> the error case:
>>> process_a(server)       process_b(client)
>>> semget()
>>> semctl(SETVAL)
>>> semop()
>>>                         semget()
>>>                         setctl(IP_STAT)
>>>                         for(;;) {               <--not successful here
>>>                           check until sem_otime > 0
>>>                         }
>> Why not..
> (pokes evolution's don't-munge-me button)
>
> ipc,sem: Create semaphores with plausible sem_otime.
>
> Signed-off-by: Mike Galbraith <bitbucket@online.de>
>
> diff --git a/ipc/sem.c b/ipc/sem.c
> index 4108889..f2564d7 100644
> --- a/ipc/sem.c
> +++ b/ipc/sem.c
> @@ -471,19 +471,20 @@ static int newary(struct ipc_namespace *ns, struct ipc_params *params)
>  	ns->used_sems += nsems;
>  
>  	sma->sem_base = (struct sem *) &sma[1];
> +	sma->complex_count = 0;
> +	INIT_LIST_HEAD(&sma->pending_alter);
> +	INIT_LIST_HEAD(&sma->pending_const);
> +	INIT_LIST_HEAD(&sma->list_id);
> +	sma->sem_nsems = nsems;
> +	sma->sem_ctime = get_seconds();
>  
>  	for (i = 0; i < nsems; i++) {
>  		INIT_LIST_HEAD(&sma->sem_base[i].pending_alter);
>  		INIT_LIST_HEAD(&sma->sem_base[i].pending_const);
>  		spin_lock_init(&sma->sem_base[i].lock);
> +		sma->sem_base[i].sem_otime = sma->sem_ctime;
>  	}
>  
> -	sma->complex_count = 0;
> -	INIT_LIST_HEAD(&sma->pending_alter);
> -	INIT_LIST_HEAD(&sma->pending_const);
> -	INIT_LIST_HEAD(&sma->list_id);
> -	sma->sem_nsems = nsems;
> -	sma->sem_ctime = get_seconds();
>  	sem_unlock(sma, -1);
>  	rcu_read_unlock();
>  
>
>
>


  reply	other threads:[~2013-09-22  9:34 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-09-22  2:11 [PATCH] ipc/sem.c: fix update sem_otime when calling sem_op in semaphore initialization Jia He
2013-09-22  8:17 ` Mike Galbraith
2013-09-22  8:26   ` Mike Galbraith
2013-09-22  9:34     ` Jia He [this message]
2013-09-22 10:00       ` Mike Galbraith
2013-09-22 12:44         ` Jia He
2013-09-22 10:42     ` Manfred Spraul
2013-09-22 12:53       ` Jia He
2013-09-22 15:14       ` Jia He
2013-09-24 21:09         ` Manfred Spraul
2013-09-25  3:05           ` Jia He
2013-09-25  6:55             ` Manfred Spraul
2013-09-25  7:49               ` Jia He
2013-09-23  1:08       ` Mike Galbraith
2013-09-23  2:24         ` Jia He

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=523EB997.9090107@gmail.com \
    --to=jiakernel@gmail.com \
    --cc=akpm@linux-foundation.org \
    --cc=bitbucket@online.de \
    --cc=davidlohr.bueso@hp.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=manfred@colorfullife.com \
    --cc=riel@redhat.com \
    --cc=viro@zeniv.linux.org.uk \
    /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).