list_lru: organize all list_lrus to list
authorVladimir Davydov <[email protected]>
Thu, 12 Feb 2015 22:59:07 +0000 (14:59 -0800)
committerLinus Torvalds <[email protected]>
Fri, 13 Feb 2015 02:54:09 +0000 (18:54 -0800)
commitc0a5b560938a0f2fd2fbf66ddc446c7c2b41383a
treef69922a1bffc5d841d5323ba018a61d2e548db6c
parentff0b67ef5b1687692bc1fd3ce4bc3d1ff83587c7
list_lru: organize all list_lrus to list

To make list_lru memcg aware, we need all list_lrus to be kept on a list
protected by a mutex, so that we could sleep while walking over the
list.

Therefore after this change list_lru_destroy may sleep.  Fortunately,
there is only one user that calls it from an atomic context - it's
put_super - and we can easily fix it by calling list_lru_destroy before
put_super in destroy_locked_super - anyway we don't longer need lrus by
that time.

Another point that should be noted is that list_lru_destroy is allowed
to be called on an uninitialized zeroed-out object, in which case it is
a no-op.  Before this patch this was guaranteed by kfree, but now we
need an explicit check there.

Signed-off-by: Vladimir Davydov <[email protected]>
Cc: Dave Chinner <[email protected]>
Cc: Johannes Weiner <[email protected]>
Cc: Michal Hocko <[email protected]>
Cc: Greg Thelen <[email protected]>
Cc: Glauber Costa <[email protected]>
Cc: Alexander Viro <[email protected]>
Cc: Christoph Lameter <[email protected]>
Cc: Pekka Enberg <[email protected]>
Cc: David Rientjes <[email protected]>
Cc: Joonsoo Kim <[email protected]>
Cc: Tejun Heo <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
fs/super.c
include/linux/list_lru.h
mm/list_lru.c