2005-04-14 00:42:59

by tsuchiya yoshihiro

[permalink] [raw]
Subject: SLEEP_ON_BKLCHECK

Hi,
In Fedora Core3, interruptible_sleep_on() checks if the system is
lock_kernel()'ed
by SLEEP_ON_BKLCHECK. Same thing is done in RedHatEL4.
Also I found a patch including SLEEP_ON_BKLCHECK was posted before,
but is not included in 2.6.11.
Why SLEEP_ON_BKLCHECK checks lock_kernel ? Lock_kernel shoud be held
during sleep_on_timeout? And I also wonder why 2.6.11 does not check it.

Thank you,
Please CC me because I am not subscribing this list.
Yoshi Tsuchiya


2005-04-14 06:46:38

by Arjan van de Ven

[permalink] [raw]
Subject: Re: SLEEP_ON_BKLCHECK

On Thu, 2005-04-14 at 09:42 +0900, tsuchiya yoshihiro wrote:
> Hi,
> In Fedora Core3, interruptible_sleep_on() checks if the system is
> lock_kernel()'ed
> by SLEEP_ON_BKLCHECK. Same thing is done in RedHatEL4.
> Also I found a patch including SLEEP_ON_BKLCHECK was posted before,
> but is not included in 2.6.11.
> Why SLEEP_ON_BKLCHECK checks lock_kernel ?

Because you really need to hold the BKL when you call sleep_on() family
of APIs, otherwise you have a very big race.

Also note that you in your code really should not call any of the
sleep_on() family of functions at all! It is a very very deprecated and
defective API!!!!

Can you give the URL to the code where you use this in?
(it is GPL code, right?)

Greetings,
Arjan van de Ven


Attachments:
signature.asc (189.00 B)
This is a digitally signed message part

2005-04-14 07:18:06

by tsuchiya yoshihiro

[permalink] [raw]
Subject: Re: SLEEP_ON_BKLCHECK

Arjan van de Ven wrote:

>On Thu, 2005-04-14 at 09:42 +0900, tsuchiya yoshihiro wrote:
>
>
>>Hi,
>>In Fedora Core3, interruptible_sleep_on() checks if the system is
>>lock_kernel()'ed
>>by SLEEP_ON_BKLCHECK. Same thing is done in RedHatEL4.
>>Also I found a patch including SLEEP_ON_BKLCHECK was posted before,
>>but is not included in 2.6.11.
>>Why SLEEP_ON_BKLCHECK checks lock_kernel ?
>>
>>
>
>Because you really need to hold the BKL when you call sleep_on() family
>of APIs, otherwise you have a very big race.
>
>Also note that you in your code really should not call any of the
>sleep_on() family of functions at all! It is a very very deprecated and
>defective API!!!!
>
>
>
Oh, I did not know that.
What do you use instead? I found wait_event. Is that what you use?

Actually, I am porting my friend's code that runs on 2.4.X to 2.6.
How is sleep_on in 2.4? You should not use sleep_on in 2.4 also?

Thank you,
Yoshi Tsuchiya

2005-04-14 07:21:54

by Arjan van de Ven

[permalink] [raw]
Subject: Re: SLEEP_ON_BKLCHECK

On Thu, Apr 14, 2005 at 04:17:34PM +0900, tsuchiya yoshihiro wrote:
> Arjan van de Ven wrote:
>
> >On Thu, 2005-04-14 at 09:42 +0900, tsuchiya yoshihiro wrote:
> >
> >
> >>Hi,
> >>In Fedora Core3, interruptible_sleep_on() checks if the system is
> >>lock_kernel()'ed
> >>by SLEEP_ON_BKLCHECK. Same thing is done in RedHatEL4.
> >>Also I found a patch including SLEEP_ON_BKLCHECK was posted before,
> >>but is not included in 2.6.11.
> >>Why SLEEP_ON_BKLCHECK checks lock_kernel ?
> >>
> >>
> >
> >Because you really need to hold the BKL when you call sleep_on() family
> >of APIs, otherwise you have a very big race.
> >
> >Also note that you in your code really should not call any of the
> >sleep_on() family of functions at all! It is a very very deprecated and
> >defective API!!!!
> >
> >
> >
> Oh, I did not know that.
> What do you use instead? I found wait_event. Is that what you use?

yep

>
> Actually, I am porting my friend's code that runs on 2.4.X to 2.6.
> How is sleep_on in 2.4? You should not use sleep_on in 2.4 also?

correct, sleep_on in 2.4 is also broken and racey