From: Jeff Garzik <jgarzik@pobox.com>
To: Christophe Saout <christophe@saout.de>
Cc: Christoph Hellwig <hch@infradead.org>,
Joe Thornber <thornber@redhat.com>,
Mike Christie <mikenc@us.ibm.com>, Andrew Morton <akpm@osdl.org>,
linux-kernel@vger.kernel.org
Subject: Re: dm-crypt using kthread
Date: Sun, 15 Feb 2004 21:58:39 -0500 [thread overview]
Message-ID: <403031DF.9050506@pobox.com> (raw)
In-Reply-To: <1076899244.5601.21.camel@leto.cs.pocnet.net>
Christophe Saout wrote:
> Am Mo, den 16.02.2004 schrieb Jeff Garzik um 03:10:
>
>
>>>+ /*
>>>+ * if additional pages cannot be allocated without waiting,
>>>+ * return a partially allocated bio, the caller will then try
>>>+ * to allocate additional bios while submitting this partial bio
>>>+ */
>>>+ if ((i - bio->bi_idx) == (MIN_BIO_PAGES - 1))
>>>+ gfp_mask = (gfp_mask | __GFP_NOWARN) & ~__GFP_WAIT;
>>
>>If the caller said they can wait, why not wait?
>
>
> How can the caller say this?
There is a gfp_mask there :)
>>>+ set_task_state(current, TASK_INTERRUPTIBLE);
>>>+ while (!(bio = kcryptd_get_bios())) {
>>>+ schedule();
>>>+ if (signal_pending(current))
>>>+ return 0;
>>>+ }
>>>+ set_task_state(current, TASK_RUNNING);
>>
>>You just keep calling schedule() rapid-fire until you get a bio? That's
>>a bit sub-optimal.
>
>
> That's wrong anyway. I was just making sure I was calling
> kcryptd_get_bios after schedule. schedule() will sleep and woken after
> someone added a bio to the list.
>
> I've changed it to an if now and call kcryptd_get_bios after schedule.
>
> I'm calling it twice because it is likely that someone started a new
> list while the old list is being processed and I don't want to sleep in
> this case, just fall through.
>
> The kcryptd_get_bios needs to be after state = TASK_INTERRUPTIBLE to
> avoid a race. If someone wakes the process after kcryptd_get_bios but
> before schedule it resets the state to TASK_RUNNING so that the schedule
> won't sleep.
This sounds like a lot of work, just to reimplement what a semaphore
does for you :)
When you down(), you sleep, waiting for new work. Each time new work
occurs, on any cpu, you call up(). This is perfect for a kernel thread,
which can sleep, just like a semaphore needs. If you want to be
interruptible by signals (such as sysadmin killing your thread, for some
reason), then use down_interruptible().
There is typically one special case -- killing your thread on shutdown.
The typical solution is to set a flag thread_shutdown, and then up().
Jeff
next prev parent reply other threads:[~2004-02-16 2:58 UTC|newest]
Thread overview: 55+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-02-11 15:33 Oopsing cryptoapi (or loop device?) on 2.6.* Michal Kwolek
2004-02-11 18:41 ` Jari Ruusu
2004-02-15 2:35 ` Jan Rychter
2004-02-15 14:51 ` Jari Ruusu
2004-02-15 16:38 ` Jari Ruusu
2004-02-16 0:26 ` James Morris
2004-02-18 14:07 ` Bill Davidsen
2004-02-16 12:22 ` Jan Rychter
2004-02-17 14:09 ` Jari Ruusu
2004-02-17 19:14 ` Jan Rychter
2004-02-18 14:06 ` Jari Ruusu
2004-02-18 21:40 ` Jan Rychter
2004-02-19 13:34 ` Jari Ruusu
2004-02-11 22:54 ` bill davidsen
2004-02-15 17:34 ` Christophe Saout
2004-02-15 18:02 ` Christoph Hellwig
2004-02-15 18:42 ` Christophe Saout
2004-02-15 18:53 ` Christoph Hellwig
2004-02-15 19:36 ` Christophe Saout
2004-02-15 19:46 ` Christoph Hellwig
2004-02-15 20:24 ` kthread vs. dm-daemon (was: Oopsing cryptoapi (or loop device?) on 2.6.*) Christophe Saout
2004-02-15 22:13 ` kthread vs. dm-daemon Mike Christie
2004-02-16 0:04 ` Christophe Saout
2004-02-16 1:04 ` Mike Christie
2004-02-16 1:29 ` Christophe Saout
2004-02-16 3:02 ` kthread vs. dm-daemon (was: Oopsing cryptoapi (or loop device?) on 2.6.*) Rusty Russell
2004-02-16 13:27 ` Christophe Saout
2004-02-16 16:42 ` Christophe Saout
2004-02-16 13:48 ` Joe Thornber
2004-02-16 1:44 ` dm-crypt using kthread " Christophe Saout
2004-02-16 1:53 ` Andrew Morton
2004-02-16 2:07 ` Grzegorz Kulewski
2004-02-16 3:03 ` Christophe Saout
2004-02-16 3:22 ` Grzegorz Kulewski
2004-02-16 4:05 ` dm-crypt using kthread Jeff Garzik
2004-02-16 4:14 ` Grzegorz Kulewski
2004-02-16 10:15 ` Christophe Saout
2004-02-16 9:54 ` dm-crypt using kthread (was: Oopsing cryptoapi (or loop device?) on 2.6.*) Christophe Saout
2004-03-01 22:18 ` Matthias Urlichs
2004-03-01 22:51 ` Christophe Saout
2004-03-01 23:22 ` Matthias Urlichs
2004-02-16 2:58 ` Christophe Saout
2004-02-16 7:28 ` David Wagner
2004-02-16 10:11 ` Christophe Saout
2004-02-18 14:15 ` dm-crypt using kthread Bill Davidsen
2004-02-16 2:07 ` dm-crypt using kthread (was: Oopsing cryptoapi (or loop device?) on 2.6.*) Andrew Morton
2004-02-16 2:17 ` dm-crypt using kthread Jeff Garzik
2004-02-16 2:53 ` dm-crypt using kthread (was: Oopsing cryptoapi (or loop device?) on 2.6.*) Christophe Saout
2004-02-16 2:10 ` dm-crypt using kthread Jeff Garzik
2004-02-16 2:40 ` Christophe Saout
2004-02-16 2:58 ` Jeff Garzik [this message]
2004-02-16 3:10 ` Christophe Saout
2004-02-16 13:04 ` Christophe Saout
2004-02-16 19:09 ` Jeff Garzik
[not found] <1o4ML-V4-5@gated-at.bofh.it>
[not found] ` <1pypu-2eR-25@gated-at.bofh.it>
[not found] ` <1pySs-2Hu-13@gated-at.bofh.it>
[not found] ` <1pzve-3a8-21@gated-at.bofh.it>
[not found] ` <1pzEW-3hA-11@gated-at.bofh.it>
[not found] ` <1pAhG-3RJ-29@gated-at.bofh.it>
[not found] ` <1pArj-3ZE-31@gated-at.bofh.it>
[not found] ` <1pG3C-kZ-9@gated-at.bofh.it>
[not found] ` <1pGdl-qX-11@gated-at.bofh.it>
[not found] ` <1pGn1-E8-23@gated-at.bofh.it>
[not found] ` <1pHj1-1q2-11@gated-at.bofh.it>
2004-02-16 3:58 ` Andi Kleen
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=403031DF.9050506@pobox.com \
--to=jgarzik@pobox.com \
--cc=akpm@osdl.org \
--cc=christophe@saout.de \
--cc=hch@infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mikenc@us.ibm.com \
--cc=thornber@redhat.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 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.