Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

FS-Cache: Add transition to handle invalidate immediately after lookup

Add a missing transition to the FS-Cache object state machine to handle an
invalidation event occuring between the back end completing the object lookup
by calling fscache_obtained_object() (which moves to state OBJECT_AVAILABLE)
and the backend returning to fscache_lookup_object() and thence to
fscache_object_state_machine() which then does a goto lookup_transit to handle
the transition - but lookup_transit doesn't handle EV_INVALIDATE.

Without this, the following BUG can be logged:

FS-Cache: Unsupported event 2 [5/f7] in state OBJECT_AVAILABLE
------------[ cut here ]------------
kernel BUG at fs/fscache/object.c:357!

Where event 2 is EV_INVALIDATE.

Signed-off-by: David Howells <dhowells@redhat.com>

+3
+3
fs/fscache/object.c
··· 284 284 case FSCACHE_OBJECT_EV_ERROR: 285 285 new_state = FSCACHE_OBJECT_LC_DYING; 286 286 goto change_state; 287 + case FSCACHE_OBJECT_EV_INVALIDATE: 288 + new_state = FSCACHE_OBJECT_INVALIDATING; 289 + goto change_state; 287 290 case FSCACHE_OBJECT_EV_REQUEUE: 288 291 goto done; 289 292 case -1: