Date: Sat, 27 Jul 2019 17:27:12 -0600 From: Alan Somers <asomers@freebsd.org> To: "Conrad E. Meyer" <cem@freebsd.org> Cc: Rick Macklem <rmacklem@uoguelph.ca>, "freebsd-fs@freebsd.org" <freebsd-fs@freebsd.org> Subject: Re: RFC: should copy_file_range(2) use size_t or off_t for length argument Message-ID: <CAOtMX2jMyGVrW3k26FdhrJ95FZiXPdvth-%2BLoKxpuGsCNo=dbA@mail.gmail.com> In-Reply-To: <CAG6CVpWdumaF%2BG4yohzS=G1wzrQzrezi7nmbVfPTRPFexqbirw@mail.gmail.com> References: <YTBPR01MB33122A0A1B3CD9D8EC18A0ECDDC30@YTBPR01MB3312.CANPRD01.PROD.OUTLOOK.COM> <CAG6CVpWdumaF%2BG4yohzS=G1wzrQzrezi7nmbVfPTRPFexqbirw@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
I agree. Full compatibility is more important than a slight boost to efficiency. -Alan On Sat, Jul 27, 2019 at 11:17 AM Conrad Meyer <cem@freebsd.org> wrote: > > Just my 2=C2=A2: keep the 1:1 Linux compatible interface. Requiring > programs to loop over N x 2^31 copies of larger files on 32-bit > platforms does not impose significant extra syscall burden on copy > programs over the wider off_t, and it fits the pattern of many > existing synchronous IO APIs (size_t lengths). > > I think there is some benefit to matching other OS's non-POSIX > function APIs exactly when we choose to use those same names and > concepts =E2=80=94 ifdef soup is painful. And developers target Linux fi= rst. > > Cheers, > Conrad > > On Sat, Jul 27, 2019 at 9:40 AM Rick Macklem <rmacklem@uoguelph.ca> wrote= : > > > > Hi, > > > > r350315 implemented a Linux compatible copy_file_range(2) syscall. > > Since Linux used a length argument of size_t and a return argument > > type of ssize_t, I did the same. > > > > Kostik has suggested that making these off_t would allow a full 64bit > > copy be done on 32bit arches. > > Here is the snippet of discussion we have had: > > Kostik Belousov wrote: > > > >Kostik Belousov wrote: > > >> >I sat to write the compat32 shims, and only then noted that len has= size_t > > >> >type. Why is it size_t and not off_t ? > > > I wrote: > > >> Well, that's what Linux did. > > >> > > >> Also, since it returns ssize_t, it can't do more than SSIZE_MAX > > >> (generally 1/2 of SIZE_T_MAX). Returning ssize_t is also what Linux > > >> does and is consistent with read(2)/write(2). > > > > > >If changing the length argument type to off_t, it is reasonable to cha= nge > > >the return type to off_t as well. We already have the lseek(2) syscal= l that > > >requires two return registers on 32bit. > > > > > >Note that it is reasonable for read(2) to take length as size_t-typed > > >parameter, because size_t is the type for object sizes. There is no > > >object in user address space for copy_file_range(2) API, so potentiall= y > > >wider off_t is acceptable and is in fact useful there. It is useful on > > >32bit machines where FreeBSD size_t is 32bit, while off_t is 64bit. > > > > So, what do others think? > > (My only concern w.r.t. changing the arguments to off_t is Linux compat= ibility.) > > > > rick > > _______________________________________________ > > freebsd-fs@freebsd.org mailing list > > https://lists.freebsd.org/mailman/listinfo/freebsd-fs > > To unsubscribe, send any mail to "freebsd-fs-unsubscribe@freebsd.org" > _______________________________________________ > freebsd-fs@freebsd.org mailing list > https://lists.freebsd.org/mailman/listinfo/freebsd-fs > To unsubscribe, send any mail to "freebsd-fs-unsubscribe@freebsd.org"
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAOtMX2jMyGVrW3k26FdhrJ95FZiXPdvth-%2BLoKxpuGsCNo=dbA>