On Mon, Aug 01, 2016 at 07:06:05PM +0300, Vladimir Davydov wrote: > On Mon, Aug 01, 2016 at 11:24:09AM -0400, Johannes Weiner wrote: > > On Mon, Aug 01, 2016 at 04:13:08PM +0300, Vladimir Davydov wrote: > > > @@ -351,6 +351,12 @@ static int __radix_tree_preload(gfp_t gfp_mask, int nr) > > > struct radix_tree_node *node; > > > int ret = -ENOMEM; > > > > > > + /* > > > + * Nodes preloaded by one cgroup can be be used by another cgroup, so > > > + * they should never be accounted to any particular memory cgroup. > > > + */ > > > + gfp_mask &= ~__GFP_ACCOUNT; > > > > But *all* page cache radix tree nodes are allocated from inside the > > preload code, since the tree insertions need mapping->tree_lock. So > > this would effectively disable accounting of the biggest radix tree > > consumer in the kernel, no? > > No, that's not how accounting of radix tree nodes works. We never > account preloaded nodes, because this could result in a node accounted > to one cgroup used by an unrelated cgroup. Instead we always try to > kmalloc a node on insertion falling back on preloads only if kmalloc > fails - see commit 58e698af4c634 ("radix-tree: account radix_tree_node > to memory cgroup"). You are right, I forgot we are doing this. The patch makes sense then. Acked-by: Johannes Weiner <hannes@xxxxxxxxxxx> -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>