A method for storage allocation on a computing device comprising a multi-core central processing unit, CPU, each CPU core having a non-shared cache, the method comprising: receiving, at a filesystem allocator, a plurality of storage allocation requests, each executing on a different core of the multi-core CPU, wherein the storage allocation requests are for a file system volume that is divided into bands composed of a plurality of storage clusters, and wherein, for each band, storage clusters are marked as allocated or unallocated by a corresponding cluster allocation bitmap; dividing the cluster allocation bitmap into a plurality of chunks, wherein each chunk is the size of a cache line of the non-shared cache, wherein each chunk is aligned in system memory with the non-shared cache lines of the non-shared cache, and wherein a chunk status bitmap indicates which chunks of the plurality of chunks have at least one unallocated cluster; determining a maximum number of storage allocation requests allowed to concurrently search for available space in the cluster allocation bitmap based on a number of chunks containing at least one unallocated cluster; allowing each of the plurality of storage allocation requests, up to the maximum number, to search for unallocated space within the cluster allocation bitmap, wherein searching for unallocated space within the cluster allocation bitmap includes beginning the search at a start of a randomly chosen chunk, and wherein searching for unallocated space includes loading the chunk into the non-shared cache of the core performing the search; and when a requested amount of unallocated space is found, allocating the unallocated space by modifying the cluster allocation bitmap with an interlocked operation. receiving, at a filesystem allocator, a plurality of storage allocation requests, each executing on a different core of the multi-core CPU, wherein the storage allocation requests are for a file system volume that is divided into bands composed of a plurality of storage clusters, and wherein, for each band, storage clusters are marked as allocated or unallocated by a corresponding cluster allocation bitmap; dividing the cluster allocation bitmap into a plurality of chunks, wherein each chunk is the size of a cache line of the non-shared cache, wherein each chunk is aligned in system memory with the non-shared cache lines of the non-shared cache, and wherein a chunk status bitmap indicates which chunks of the plurality of chunks have at least one unallocated cluster; determining a maximum number of storage allocation requests allowed to concurrently search for available space in the cluster allocation bitmap based on a number of chunks containing at least one unallocated cluster; allowing each of the plurality of storage allocation requests, up to the maximum number, to search for unallocated space within the cluster allocation bitmap, wherein searching for unallocated space within the cluster allocation bitmap includes beginning the search at a start of a randomly chosen chunk, and wherein searching for unallocated space includes loading the chunk into the non-shared cache of the core performing the search; and when a requested amount of unallocated space is found, allocating the unallocated space by modifying the cluster allocation bitmap with an interlocked operation.