On Fri, Jul 10, 2020 at 7:21 PM Matthew Wilcox <willy@xxxxxxxxxxxxx> wrote: > > On Fri, Jul 10, 2020 at 02:49:32PM +0100, Christoph Hellwig wrote: > > On Fri, Jul 10, 2020 at 02:48:24PM +0100, Matthew Wilcox wrote: > > > If we're going to go the route of changing the CQE, how about: > > > > > > struct io_uring_cqe { > > > __u64 user_data; /* sqe->data submission passed back */ > > > - __s32 res; /* result code for this event */ > > > - __u32 flags; > > > + union { > > > + struct { > > > + __s32 res; /* result code for this event */ > > > + __u32 flags; > > > + }; > > > + __s64 res64; > > > + }; > > > }; > > > > > > then we don't need to change the CQE size and it just depends on the SQE > > > whether the CQE for it uses res+flags or res64. > > > > How do you return a status code or short write when you just have > > a u64 that is needed for the offset? > > it's an s64 not a u64 so you can return a negative errno. i didn't > think we allowed short writes for objects-which-have-a-pos. If we are doing this for zone-append (and not general cases), "__s64 res64" should work -. 64 bits = 1 (sign) + 23 (bytes-copied: cqe->res) + 40 (written-location: chunk_sector bytes limit) -- Joshi