@@ -181,7 +181,7 @@ static void io_zcrx_free_area(struct io_zcrx_area *area)
181
181
kvfree (area -> nia .niovs );
182
182
kvfree (area -> user_refs );
183
183
if (area -> pages ) {
184
- unpin_user_pages (area -> pages , area -> nia . num_niovs );
184
+ unpin_user_pages (area -> pages , area -> nr_folios );
185
185
kvfree (area -> pages );
186
186
}
187
187
kfree (area );
@@ -192,7 +192,7 @@ static int io_zcrx_create_area(struct io_zcrx_ifq *ifq,
192
192
struct io_uring_zcrx_area_reg * area_reg )
193
193
{
194
194
struct io_zcrx_area * area ;
195
- int i , ret , nr_pages ;
195
+ int i , ret , nr_pages , nr_iovs ;
196
196
struct iovec iov ;
197
197
198
198
if (area_reg -> flags || area_reg -> rq_area_token )
@@ -220,35 +220,36 @@ static int io_zcrx_create_area(struct io_zcrx_ifq *ifq,
220
220
area -> pages = NULL ;
221
221
goto err ;
222
222
}
223
- area -> nia .num_niovs = nr_pages ;
223
+ area -> nr_folios = nr_iovs = nr_pages ;
224
+ area -> nia .num_niovs = nr_iovs ;
224
225
225
- area -> nia .niovs = kvmalloc_array (nr_pages , sizeof (area -> nia .niovs [0 ]),
226
+ area -> nia .niovs = kvmalloc_array (nr_iovs , sizeof (area -> nia .niovs [0 ]),
226
227
GFP_KERNEL | __GFP_ZERO );
227
228
if (!area -> nia .niovs )
228
229
goto err ;
229
230
230
- area -> freelist = kvmalloc_array (nr_pages , sizeof (area -> freelist [0 ]),
231
+ area -> freelist = kvmalloc_array (nr_iovs , sizeof (area -> freelist [0 ]),
231
232
GFP_KERNEL | __GFP_ZERO );
232
233
if (!area -> freelist )
233
234
goto err ;
234
235
235
- for (i = 0 ; i < nr_pages ; i ++ )
236
+ for (i = 0 ; i < nr_iovs ; i ++ )
236
237
area -> freelist [i ] = i ;
237
238
238
- area -> user_refs = kvmalloc_array (nr_pages , sizeof (area -> user_refs [0 ]),
239
+ area -> user_refs = kvmalloc_array (nr_iovs , sizeof (area -> user_refs [0 ]),
239
240
GFP_KERNEL | __GFP_ZERO );
240
241
if (!area -> user_refs )
241
242
goto err ;
242
243
243
- for (i = 0 ; i < nr_pages ; i ++ ) {
244
+ for (i = 0 ; i < nr_iovs ; i ++ ) {
244
245
struct net_iov * niov = & area -> nia .niovs [i ];
245
246
246
247
niov -> owner = & area -> nia ;
247
248
area -> freelist [i ] = i ;
248
249
atomic_set (& area -> user_refs [i ], 0 );
249
250
}
250
251
251
- area -> free_count = nr_pages ;
252
+ area -> free_count = nr_iovs ;
252
253
area -> ifq = ifq ;
253
254
/* we're only supporting one area per ifq for now */
254
255
area -> area_id = 0 ;
0 commit comments