Jesper Dangaard Brouer <brouer@xxxxxxxxxx> wrote: > > Is it possible to use kmem_cache_alloc_bulk() with kmalloc slabs to > > effect a bulk kmalloc? > > Well, we have kfree_bulk() which is a simple wrapper around > kmem_cache_free_bulk() (as Christoph make me handle that case). > > We/I didn't code the kmalloc_bulk() variant. > > What is you use case? afs_do_lookup() allocates an array of file status records and an array of callback records: /* Need space for examining all the selected files */ inode = ERR_PTR(-ENOMEM); cookie->statuses = kcalloc(cookie->nr_fids, sizeof(struct afs_file_status), GFP_KERNEL); if (!cookie->statuses) goto out; cookie->callbacks = kcalloc(cookie->nr_fids, sizeof(struct afs_callback), GFP_KERNEL); if (!cookie->callbacks) goto out_s; These, however, may go to order-1 allocations or higher if nr_fids > 39, say, and it may be as many as 50 for AFS3 or 1024 for YFS. Also, I'd like to combine the afs_file_status record with the afs_callback record inside another struct so that I can pass these around in more places and fix the locking over applying them to the relevant inodes. So what I want to do is to allocate an array of pointers to {status,callback} records and then bulk allocate those records. As it happens, the tuple is just shy of 128 bytes, so they should fit into that slab very nicely. Note also that the records are transient - they're freed at the end of the operation. David