@@ -77,7 +77,7 @@ int io_register_pbuf_ring(struct io_ring_ctx *ctx, void __user *arg);
7777int io_unregister_pbuf_ring (struct io_ring_ctx * ctx , void __user * arg );
7878int io_register_pbuf_status (struct io_ring_ctx * ctx , void __user * arg );
7979
80- void __io_put_kbuf (struct io_kiocb * req , unsigned issue_flags );
80+ void __io_put_kbuf (struct io_kiocb * req , int len , unsigned issue_flags );
8181
8282bool io_kbuf_recycle_legacy (struct io_kiocb * req , unsigned issue_flags );
8383
@@ -125,30 +125,30 @@ static inline bool io_kbuf_recycle(struct io_kiocb *req, unsigned issue_flags)
125125#define io_ring_head_to_buf (br , head , mask ) &(br)->bufs[(head) & (mask)]
126126
127127static inline void io_kbuf_commit (struct io_kiocb * req ,
128- struct io_buffer_list * bl , int nr )
128+ struct io_buffer_list * bl , int len , int nr )
129129{
130130 if (unlikely (!(req -> flags & REQ_F_BUFFERS_COMMIT )))
131131 return ;
132132 bl -> head += nr ;
133133 req -> flags &= ~REQ_F_BUFFERS_COMMIT ;
134134}
135135
136- static inline void __io_put_kbuf_ring (struct io_kiocb * req , int nr )
136+ static inline void __io_put_kbuf_ring (struct io_kiocb * req , int len , int nr )
137137{
138138 struct io_buffer_list * bl = req -> buf_list ;
139139
140140 if (bl ) {
141- io_kbuf_commit (req , bl , nr );
141+ io_kbuf_commit (req , bl , len , nr );
142142 req -> buf_index = bl -> bgid ;
143143 }
144144 req -> flags &= ~REQ_F_BUFFER_RING ;
145145}
146146
147- static inline void __io_put_kbuf_list (struct io_kiocb * req ,
147+ static inline void __io_put_kbuf_list (struct io_kiocb * req , int len ,
148148 struct list_head * list )
149149{
150150 if (req -> flags & REQ_F_BUFFER_RING ) {
151- __io_put_kbuf_ring (req , 1 );
151+ __io_put_kbuf_ring (req , len , 1 );
152152 } else {
153153 req -> buf_index = req -> kbuf -> bgid ;
154154 list_add (& req -> kbuf -> list , list );
@@ -163,11 +163,12 @@ static inline void io_kbuf_drop(struct io_kiocb *req)
163163 if (!(req -> flags & (REQ_F_BUFFER_SELECTED |REQ_F_BUFFER_RING )))
164164 return ;
165165
166- __io_put_kbuf_list (req , & req -> ctx -> io_buffers_comp );
166+ /* len == 0 is fine here, non-ring will always drop all of it */
167+ __io_put_kbuf_list (req , 0 , & req -> ctx -> io_buffers_comp );
167168}
168169
169- static inline unsigned int __io_put_kbufs (struct io_kiocb * req , int nbufs ,
170- unsigned issue_flags )
170+ static inline unsigned int __io_put_kbufs (struct io_kiocb * req , int len ,
171+ int nbufs , unsigned issue_flags )
171172{
172173 unsigned int ret ;
173174
@@ -176,21 +177,21 @@ static inline unsigned int __io_put_kbufs(struct io_kiocb *req, int nbufs,
176177
177178 ret = IORING_CQE_F_BUFFER | (req -> buf_index << IORING_CQE_BUFFER_SHIFT );
178179 if (req -> flags & REQ_F_BUFFER_RING )
179- __io_put_kbuf_ring (req , nbufs );
180+ __io_put_kbuf_ring (req , len , nbufs );
180181 else
181- __io_put_kbuf (req , issue_flags );
182+ __io_put_kbuf (req , len , issue_flags );
182183 return ret ;
183184}
184185
185- static inline unsigned int io_put_kbuf (struct io_kiocb * req ,
186+ static inline unsigned int io_put_kbuf (struct io_kiocb * req , int len ,
186187 unsigned issue_flags )
187188{
188- return __io_put_kbufs (req , 1 , issue_flags );
189+ return __io_put_kbufs (req , len , 1 , issue_flags );
189190}
190191
191- static inline unsigned int io_put_kbufs (struct io_kiocb * req , int nbufs ,
192- unsigned issue_flags )
192+ static inline unsigned int io_put_kbufs (struct io_kiocb * req , int len ,
193+ int nbufs , unsigned issue_flags )
193194{
194- return __io_put_kbufs (req , nbufs , issue_flags );
195+ return __io_put_kbufs (req , len , nbufs , issue_flags );
195196}
196197#endif
0 commit comments