mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-19 10:44:14 +08:00
fscache fixes
-----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEqG5UsNXhtOCrfGQP+7dXa6fLC2sFAmLyXZ4ACgkQ+7dXa6fL C2tJCxAAhH4ufVMk1r8H/lflCulaBw917zgoOO/daO9FjKDtL6hReTN6OgJLLULw a1ZMsRxl1NJy5duGYRswUR6gS8y4LzTdILvqfvP+9YSoZzou+uTHHuKFJheA6x++ /cRQFBQmx8JTBrEQXSHULa3FfKsU0UCwxCzy7q4o5zJogK6yiLhApxORIB5ZYi7W k/3iKA0isqKsSEwmRt3D9ekypb3E/8QGaQV7Bng6/1wldFFmL1g5w/ubY8TCsefV gnNUA3Ops3LsYj9a0vQGJ6lXKIol2nFClvmFM1qvb09u4PaVa2tofXd5FQuy/iC/ z2+ULUtBi7gs+DjsxPBf1cnbeA3BzNu5BfdQFd3QJksKFHcIMGsKnTQehPuVPhdn p0IGZrf3/sncmXWVZ322w+R0TLiwB0CX9fh4WS5aYw9WHtRg+FGeFCoVLSV774M0 OiRxefg6A4sBMP2XwHICRXWPtqnBj2PYhQ6bj6pCHJg4sGfrYnf/q7vWFI1rJ9JW 258lhyWaaO0SqPMtdYamBQzPQAAsuG72Mrf5k3pFLWIuPPb9Ho3B7fwbtjcMQcbv q+apsiiPk/aqbjbI8YclOD+XgRQMUaRO2s2+JCAQvoFoWPRLYE6ZaTDdesN0nHJB PgTFACx/dPtTCpQxIUDldDsj8wk4iPmPZiQ31gVzKr53v2Jvkhc= =LWMd -----END PGP SIGNATURE----- Merge tag 'fscache-fixes-20220809' of git://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs Pull fscache updates from David Howells: - Fix a cookie access ref leak if a cookie is invalidated a second time before the first invalidation is actually processed. - Add a tracepoint to log cookie lookup failure * tag 'fscache-fixes-20220809' of git://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs: fscache: add tracepoint when failing cookie fscache: don't leak cookie access refs if invalidation is in progress or failed
This commit is contained in:
commit
15205c2829
@ -263,6 +263,8 @@ void fscache_caching_failed(struct fscache_cookie *cookie)
|
||||
{
|
||||
clear_bit(FSCACHE_COOKIE_IS_CACHING, &cookie->flags);
|
||||
fscache_set_cookie_state(cookie, FSCACHE_COOKIE_STATE_FAILED);
|
||||
trace_fscache_cookie(cookie->debug_id, refcount_read(&cookie->ref),
|
||||
fscache_cookie_failed);
|
||||
}
|
||||
EXPORT_SYMBOL(fscache_caching_failed);
|
||||
|
||||
@ -739,6 +741,9 @@ again_locked:
|
||||
fallthrough;
|
||||
|
||||
case FSCACHE_COOKIE_STATE_FAILED:
|
||||
if (test_and_clear_bit(FSCACHE_COOKIE_DO_INVALIDATE, &cookie->flags))
|
||||
fscache_end_cookie_access(cookie, fscache_access_invalidate_cookie_end);
|
||||
|
||||
if (atomic_read(&cookie->n_accesses) != 0)
|
||||
break;
|
||||
if (test_bit(FSCACHE_COOKIE_DO_RELINQUISH, &cookie->flags)) {
|
||||
@ -1063,8 +1068,8 @@ void __fscache_invalidate(struct fscache_cookie *cookie,
|
||||
return;
|
||||
|
||||
case FSCACHE_COOKIE_STATE_LOOKING_UP:
|
||||
__fscache_begin_cookie_access(cookie, fscache_access_invalidate_cookie);
|
||||
set_bit(FSCACHE_COOKIE_DO_INVALIDATE, &cookie->flags);
|
||||
if (!test_and_set_bit(FSCACHE_COOKIE_DO_INVALIDATE, &cookie->flags))
|
||||
__fscache_begin_cookie_access(cookie, fscache_access_invalidate_cookie);
|
||||
fallthrough;
|
||||
case FSCACHE_COOKIE_STATE_CREATING:
|
||||
spin_unlock(&cookie->lock);
|
||||
|
@ -49,6 +49,7 @@ enum fscache_volume_trace {
|
||||
enum fscache_cookie_trace {
|
||||
fscache_cookie_collision,
|
||||
fscache_cookie_discard,
|
||||
fscache_cookie_failed,
|
||||
fscache_cookie_get_attach_object,
|
||||
fscache_cookie_get_end_access,
|
||||
fscache_cookie_get_hash_collision,
|
||||
@ -131,6 +132,7 @@ enum fscache_access_trace {
|
||||
#define fscache_cookie_traces \
|
||||
EM(fscache_cookie_collision, "*COLLIDE*") \
|
||||
EM(fscache_cookie_discard, "DISCARD ") \
|
||||
EM(fscache_cookie_failed, "FAILED ") \
|
||||
EM(fscache_cookie_get_attach_object, "GET attch") \
|
||||
EM(fscache_cookie_get_hash_collision, "GET hcoll") \
|
||||
EM(fscache_cookie_get_end_access, "GQ endac") \
|
||||
|
Loading…
Reference in New Issue
Block a user