[Samba] Direct I/O

Christof Schmitt
Tue, 25 Jan 2022 00:51:04 -0000

On Mon, Jan 24, 2022 at 05:50:06PM -0700, Christof Schmitt
wrote:
> On Mon, Jan 24, 2022 at 10:43:11AM -0800, Jeremy Allison via samba wrote:
> > On Mon, Jan 24, 2022 at 07:21:05PM +0100, Ralph Boehme wrote:
> > > On 1/24/22 18:39, Jeremy Allison via samba wrote:
> > > > No, we don't currently use O_DIRECT on Linux.
> > > >
> > > > It doesn't match to SMB2+ semantics.
> > >
> > > I think it does (SMB2_WRITEFLAG_WRITE_UNBUFFERED), but we
don't yet
> > > implement it correctly. We check the flag and basically skip an
fsync()
> > > done in some cases, but we don't pass it to the OS. I guess
the problem
> > > is that in SMB the unbuffered is requested per *write* whereas we
can
> > > only request unbuffered IO per *handle* with O_DIRECT. But I may
be
> > > missing something.
> >
> > Oh, good catch. I missed that flag. However I think there's
another
> > missmatch. O_DIRECT has alignment restrictions on where the
> > IO can be performed. I think it mandates 512 byte boundaries.
>
> FWIW, preadv2() has RWF_DSYNC and RWF_SYNC which provide O_DSYNC and
> O_SYNC semantics per write. Maybe one of those aligns more closely with
> WRITE_UNBUFFERED.

pwritev2() of course...

Christof