Lines Matching refs:bufmap
9 #include "orangefs-bufmap.h"
169 orangefs_bufmap_unmap(struct orangefs_bufmap *bufmap)
171 unpin_user_pages(bufmap->page_array, bufmap->page_count);
175 orangefs_bufmap_free(struct orangefs_bufmap *bufmap)
177 kfree(bufmap->page_array);
178 kfree(bufmap->desc_array);
179 bitmap_free(bufmap->buffer_index_array);
180 kfree(bufmap);
190 struct orangefs_bufmap *bufmap;
193 bufmap = __orangefs_bufmap;
194 if (bufmap)
195 size = bufmap->desc_size;
202 struct orangefs_bufmap *bufmap;
205 bufmap = __orangefs_bufmap;
206 if (bufmap)
207 shift = bufmap->desc_shift;
218 struct orangefs_bufmap *bufmap;
220 bufmap = kzalloc(sizeof(*bufmap), GFP_KERNEL);
221 if (!bufmap)
224 bufmap->total_size = user_desc->total_size;
225 bufmap->desc_count = user_desc->count;
226 bufmap->desc_size = user_desc->size;
227 bufmap->desc_shift = ilog2(bufmap->desc_size);
229 bufmap->buffer_index_array = bitmap_zalloc(bufmap->desc_count, GFP_KERNEL);
230 if (!bufmap->buffer_index_array)
233 bufmap->desc_array =
234 kcalloc(bufmap->desc_count, sizeof(struct orangefs_bufmap_desc),
236 if (!bufmap->desc_array)
239 bufmap->page_count = bufmap->total_size / PAGE_SIZE;
242 bufmap->page_array =
243 kcalloc(bufmap->page_count, sizeof(struct page *), GFP_KERNEL);
244 if (!bufmap->page_array)
247 return bufmap;
250 kfree(bufmap->desc_array);
252 bitmap_free(bufmap->buffer_index_array);
254 kfree(bufmap);
260 orangefs_bufmap_map(struct orangefs_bufmap *bufmap,
263 int pages_per_desc = bufmap->desc_size / PAGE_SIZE;
268 bufmap->page_count, FOLL_WRITE, bufmap->page_array);
273 if (ret != bufmap->page_count) {
275 bufmap->page_count, ret);
278 SetPageError(bufmap->page_array[i]);
279 unpin_user_page(bufmap->page_array[i]);
290 for (i = 0; i < bufmap->page_count; i++)
291 flush_dcache_page(bufmap->page_array[i]);
294 for (offset = 0, i = 0; i < bufmap->desc_count; i++) {
295 bufmap->desc_array[i].page_array = &bufmap->page_array[offset];
296 bufmap->desc_array[i].array_count = pages_per_desc;
297 bufmap->desc_array[i].uaddr =
314 struct orangefs_bufmap *bufmap;
357 gossip_err("orangefs error: bufmap size not page size divisible (%d).\n",
363 bufmap = orangefs_bufmap_alloc(user_desc);
364 if (!bufmap)
367 ret = orangefs_bufmap_map(bufmap, user_desc);
375 gossip_err("orangefs: error: bufmap already initialized.\n");
379 __orangefs_bufmap = bufmap;
381 bufmap->desc_count,
382 bufmap->buffer_index_array);
385 bufmap->readdir_index_array);
393 orangefs_bufmap_unmap(bufmap);
395 orangefs_bufmap_free(bufmap);
410 struct orangefs_bufmap *bufmap = __orangefs_bufmap;
411 if (!bufmap)
422 struct orangefs_bufmap *bufmap = __orangefs_bufmap;
423 if (!bufmap)
430 orangefs_bufmap_unmap(bufmap);
431 orangefs_bufmap_free(bufmap);