Making locking nicer for NFS

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This method also has the advantage of not relying on lock promotion
semantics, which (apparently) will make the Windoze version easier.

Thomas

On Thu, Aug 25, 2011 at 10:30 AM, David Henningsson <
david.henningsson at canonical.com> wrote:

> On 08/21/2011 04:38 PM, Thomas Bushnell, BSG wrote:
>
>> Whoops. They need to repeat the read after obtaining the write lock and
>> only update the file if the contents are still bad in that case.
>>
>
> Would a good handling of this be:
>
> 1) Open the cookie read-only
> 2) read the cookie
> 3) close file
> 4) if we have a correct cookie, do nothing more
> 5) if we have the wrong cookie, do the old handling unchanged: open with
> write lock, check the contents (again), and write if something is (still)
> wrong.
>
>
>> On Aug 21, 2011 4:46 AM, "David Henningsson"
>> <david.henningsson at canonical.**com <david.henningsson at canonical.com>
>> <mailto:david.henningsson@**canonical.com<david.henningsson at canonical.com>>>
>> wrote:
>>  > On 08/19/2011 08:14 PM, Thomas Bushnell, BSG wrote:
>>  >> Sorry for breaking the threading, but I only just subscribed to the
>> list
>>  >> so I can't reply properly.
>>  >>
>>  >> I'm the origin of the patch recently posted by David Henningsson which
>>  >> alters the way locking works. Maarten Bosmans had some questions I'd
>>  >> like to address.
>>  >>
>>  >> The confusing formatting of the diff in core-util.c is just unidiff
>>  >> being clever. Basically I created a new function to wrap around fcntl
>> to
>>  >> share the common code between pa_lock_fd and pa_read_lock_fd.
>>  >>
>>  >> I have no objection of course to simply defining it unconditionally
>> and
>>  >> using it always. I do not know Windows, so I was trying to make the
>>  >> minimally disruptive change. I didn't know that Windows has read
>> locks.
>>  >>
>>  >> In Unix, promoting a read lock to a write lock converts the lock--it
>>  >> does not add another lock--without releasing the readlock in the
>> middle.
>>  >>
>>  >> I am not wedded at all to the specific details of what the generic
>>  >> functions in core-util.c do.
>>  >>
>>  >> The root issue is as David Henningsson explained. By using an
>> exclusive
>>  >> lock, pulseaudio creates an unnecessary contention in reading the
>>  >> .pulse-cookie file, and because of the less-than-ideal (but quite
>>  >> unchangeable) behavior of NFSv3, this forces a thirty-second delay
>>  >> anytime two pulse clients try to read the cookie at the same time.
>>  >> Switching to a read lock for the read, and only using an exclusive
>> lock
>>  >> when the cookie needs to be written (a much rarer operation), avoids
>>  >> this problem entirely.
>>  >
>>  > Hi Thomas and thanks for coming here!
>>  >
>>  > I have a question about the proposed handling. Assume that the cookie
>> is
>>  > wrong, and that two clients both find that out in parallel. Then they
>>  > both want to promote their read lock to a write lock. What will happen
>>  > in that case?
>>  >
>>  > --
>>  > David Henningsson, Canonical Ltd.
>>  > http://launchpad.net/~diwic
>>
>
>
>
> --
> David Henningsson, Canonical Ltd.
> http://launchpad.net/~diwic
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/pulseaudio-discuss/attachments/20110825/1b066e55/attachment-0001.htm>


[Index of Archives]     [Linux Audio Users]     [AMD Graphics]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux