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

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

 



On Mon, 8 Jul 2024 at 16:19, Chuck Lever III <chuck.lever@xxxxxxxxxx> 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.

So could you please test this change against other clients, such as:
- Windows ms-nfs41-client (https://github.com/kofemann/ms-nfs41-client/)
- FreeBSD NFS4.1 client
- Solaris 11 NFS4 client

Dan
-- 
Dan Shelton - Cluster Specialist Win/Lin/Bsd





[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