Re: [PATCH rfc] nfsd: offer write delegation for O_WRONLY opens

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

 




> On Jul 9, 2024, at 3:18 AM, Sagi Grimberg <sagi@xxxxxxxxxxx> wrote:
> 
> 
> 
> On 09/07/2024 0:41, Dai Ngo wrote:
>> 
>> On 7/8/24 11:56 AM, Sagi Grimberg wrote:
>>> 
>>> 
>>> On 08/07/2024 20:39, Dai Ngo wrote:
>>>> 
>>>> On 7/8/24 7:18 AM, Chuck Lever III wrote:
>>>>> 
>>>>>> On Jul 7, 2024, at 7:06 AM, Jeff Layton <jlayton@xxxxxxxxxx> wrote:
>>>>>> 
>>>>>> On Sun, 2024-07-07 at 01:42 +0300, Sagi Grimberg wrote:
>>>>>>> Many applications open files with O_WRONLY, fully intending to write
>>>>>>> into the opened file. There is no reason why these applications should
>>>>>>> not enjoy a write delegation handed to them.
>>>>>>> 
>>>>>>> Cc: Dai Ngo <dai.ngo@xxxxxxxxxx>
>>>>>>> Signed-off-by: Sagi Grimberg <sagi@xxxxxxxxxxx>
>>>>>>> ---
>>>>>>> Note: I couldn't find any reason to why the initial implementation chose
>>>>>>> to offer write delegations only to NFS4_SHARE_ACCESS_BOTH, but it seemed
>>>>>>> like an oversight to me. So I figured why not just send it out and see who
>>>>>>> objects...
>>>>>>> 
>>>>>>> fs/nfsd/nfs4state.c | 10 +++++-----
>>>>>>> 1 file changed, 5 insertions(+), 5 deletions(-)
>>>>>>> 
>>>>>>> diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
>>>>>>> index a20c2c9d7d45..69d576b19eb6 100644
>>>>>>> --- a/fs/nfsd/nfs4state.c
>>>>>>> +++ b/fs/nfsd/nfs4state.c
>>>>>>> @@ -5784,15 +5784,15 @@ nfs4_set_delegation(struct nfsd4_open *open, struct nfs4_ol_stateid *stp,
>>>>>>>   *  "An OPEN_DELEGATE_WRITE delegation allows the client to handle,
>>>>>>>   *   on its own, all opens."
>>>>>>>   *
>>>>>>> -  * Furthermore the client can use a write delegation for most READ
>>>>>>> -  * operations as well, so we require a O_RDWR file here.
>>>>>>> -  *
>>>>>>> -  * Offer a write delegation in the case of a BOTH open, and ensure
>>>>>>> -  * we get the O_RDWR descriptor.
>>>>>>> +  * Offer a write delegation in the case of a BOTH open (ensure
>>>>>>> +  * a O_RDWR descriptor) Or WRONLY open (with a O_WRONLY descriptor).
>>>>>>>   */
>>>>>>> if ((open->op_share_access & NFS4_SHARE_ACCESS_BOTH) == NFS4_SHARE_ACCESS_BOTH) {
>>>>>>> nf = find_rw_file(fp);
>>>>>>> dl_type = NFS4_OPEN_DELEGATE_WRITE;
>>>>>>> + } else if (open->op_share_access & NFS4_SHARE_ACCESS_WRITE) {
>>>>>>> + nf = find_writeable_file(fp);
>>>>>>> + dl_type = NFS4_OPEN_DELEGATE_WRITE;
>>>>>>> }
>>>>>>> 
>>>>>>> /*
>>>>> Thanks Sagi, I'm glad to see this posting!
>>>>> 
>>>>> 
>>>>>> I *think* the main reason we limited this before is because a write
>>>>>> delegation is really a read/write delegation. There is no such thing as
>>>>>> a write-only delegation.
>>>>> I recall (quite dimly) that Dai found some bad behavior
>>>>> in a subtle corner case, so we decided to leave this on
>>>>> the table as a possible future enhancement. Adding Dai.
>>>> 
>>>> If I remember correctly, granting write delegation on OPEN with
>>>> NFS4_SHARE_ACCESS_WRITE without additional changes causes the git
>>>> test to fail.
>>> 
>>> That's good to know.
>>> Have you reported this over the list before?
>> 
>> I submitted a patch to allow the client to use write delegation, granted
>> on OPEN with NFS4_SHARE_ACCESS_WRITE, to read:
>> 
>> https://lore.kernel.org/linux-nfs/1688089960-24568-3-git-send-email-dai.ngo@xxxxxxxxxx/ 
>> 
>> This patch fixed the problem with the git test. However Jeff reported another
>> problem might be related to this patch:
>> 
>> https://lore.kernel.org/linux-nfs/6756f84c4ff92845298ce4d7e3c4f0fb20671d3d.camel@xxxxxxxxxx 
>> 
>> I did not investigate this pynfs problem since we dropped this support.
> 
> I see, thanks for the info. I initially thought that the client has an issue. But now
> I see that you referred to nfsd that is unable to process a READ with a writedeleg stid
> (which is allowed).
> 
> Is there any appetite to address this?

Yes, as an NFSD co-maintainer, I would like to see the
READ stateid issue addressed. We just got distracted
by other things in the meantime.


> Or are we fine with not handing out delegations
> in these case?

Well, we're fine in as much as the current situation does
allow NFSD to hand out /some/ write delegations. We know
the open r/w case is working correctly, and can now move
on to the more obscure cases.

(Like, I would like NFSD to populate the delegation ACE
too, at some point).


--
Chuck Lever






[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux