From: Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com>
To: Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com>
Cc: Joonsoo Kim <js1304@gmail.com>,
Andrew Morton <akpm@linux-foundation.org>,
Minchan Kim <minchan@kernel.org>, Nitin Gupta <ngupta@vflare.org>,
linux-kernel@vger.kernel.org,
Joonsoo Kim <iamjoonsoo.kim@lge.com>
Subject: Re: [PATCH] zram: fix possible race when checking idle_strm
Date: Fri, 7 Aug 2015 18:58:16 +0900 [thread overview]
Message-ID: <20150807095816.GP1891@swordfish> (raw)
In-Reply-To: <20150807091457.GL1891@swordfish>
On (08/07/15 18:14), Sergey Senozhatsky wrote:
> hm... I need to think about it more.
>
> we do wake_up every time we put stream back to the list
>
> zcomp_strm_multi_release():
>
> spin_lock(&zs->strm_lock);
> if (zs->avail_strm <= zs->max_strm) {
> list_add(&zstrm->list, &zs->idle_strm);
> spin_unlock(&zs->strm_lock);
> wake_up(&zs->strm_wait);
> return;
> }
>
>
> but I can probably see what you mean... in some very extreme case,
> though. I can't even formulate it... eh... we use a multi stream
> backend with ->max_strm == 1 and there are two processes, one
> just falsely passed the wait_event() `if (condition)' check, the
> other one just put stream back to ->idle_strm and called wake_up(),
> but the first process hasn't yet executed prepare_to_wait_event()
> so it might miss a wakeup. and there should be no other process
> doing read or write operation. otherwise, there will be wakeup
> eventually.
>
> is this the case you were thinking of?... then yes, this spinlock
> may help.
>
on the other hand... it's actually
wait_event() is
if (condition)
break;
prepare_to_wait_event(&wq, &__wait, state)
if (condition)
break;
schedule();
if first condition check was false and we missed a wakeup call between
first condition and prepare_to_wait_event(), then second condition
check should do the trick I think (or you expect that second condition
check may be wrongly pre-fetched or something).
if wakeup arrives after prepare_to_wait_event(), then we are fine by
defintion.
so, I'm puzzled a bit. do we have a problem or we are ok.
-ss
next prev parent reply other threads:[~2015-08-07 9:57 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-07 8:03 [PATCH] zram: fix possible race when checking idle_strm Joonsoo Kim
2015-08-07 9:14 ` Sergey Senozhatsky
2015-08-07 9:19 ` Sergey Senozhatsky
2015-08-07 9:38 ` Sergey Senozhatsky
2015-08-07 9:58 ` Sergey Senozhatsky [this message]
2015-08-10 0:32 ` Joonsoo Kim
2015-08-10 2:16 ` Sergey Senozhatsky
2015-08-11 8:26 ` Joonsoo Kim
2015-08-10 23:26 ` Minchan Kim
2015-08-11 8:25 ` Joonsoo Kim
2015-08-11 8:25 ` Sergey Senozhatsky
2015-08-07 9:37 ` Sergey Senozhatsky
2015-08-07 10:16 ` Sergey Senozhatsky
2015-08-07 14:49 ` Minchan Kim
2015-08-10 0:35 ` Joonsoo Kim
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=20150807095816.GP1891@swordfish \
--to=sergey.senozhatsky.work@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=iamjoonsoo.kim@lge.com \
--cc=js1304@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=minchan@kernel.org \
--cc=ngupta@vflare.org \
/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 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.