Jeffle Xu <jefflexu@xxxxxxxxxxxxxxxxx> wrote: > + read_lock(&cache->reqs_lock); > + > + /* recheck dead state under lock */ > + if (test_bit(CACHEFILES_DEAD, &cache->flags)) { > + read_unlock(&cache->reqs_lock); > + ret = -EIO; > + goto out; > + } > + > + xa_lock(xa); > + ret = __xa_alloc(xa, &id, req, xa_limit_32b, GFP_KERNEL); You're holding a spinlock. You can't use GFP_KERNEL. > +static int cachefiles_ondemand_cinit(struct cachefiles_cache *cache, char *args) > +{ > ... > + tmp = kstrdup(args, GFP_KERNEL); No need to copy the string. The caller already did that and added a NUL for good measure. I would probably move most of the functions added in this patch to fs/cachefiles/ondemand.c. David