| From foo@baz Sun Aug 26 09:13:00 CEST 2018 |
| From: Kiran Kumar Modukuri <kiran.modukuri@gmail.com> |
| Date: Wed, 25 Jul 2018 14:31:20 +0100 |
| Subject: fscache: Allow cancelled operations to be enqueued |
| |
| From: Kiran Kumar Modukuri <kiran.modukuri@gmail.com> |
| |
| [ Upstream commit d0eb06afe712b7b103b6361f40a9a0c638524669 ] |
| |
| Alter the state-check assertion in fscache_enqueue_operation() to allow |
| cancelled operations to be given processing time so they can be cleaned up. |
| |
| Also fix a debugging statement that was requiring such operations to have |
| an object assigned. |
| |
| Fixes: 9ae326a69004 ("CacheFiles: A cache that backs onto a mounted filesystem") |
| Reported-by: Kiran Kumar Modukuri <kiran.modukuri@gmail.com> |
| Signed-off-by: David Howells <dhowells@redhat.com> |
| Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| fs/fscache/operation.c | 6 ++++-- |
| 1 file changed, 4 insertions(+), 2 deletions(-) |
| |
| --- a/fs/fscache/operation.c |
| +++ b/fs/fscache/operation.c |
| @@ -66,7 +66,8 @@ void fscache_enqueue_operation(struct fs |
| ASSERT(op->processor != NULL); |
| ASSERT(fscache_object_is_available(op->object)); |
| ASSERTCMP(atomic_read(&op->usage), >, 0); |
| - ASSERTCMP(op->state, ==, FSCACHE_OP_ST_IN_PROGRESS); |
| + ASSERTIFCMP(op->state != FSCACHE_OP_ST_IN_PROGRESS, |
| + op->state, ==, FSCACHE_OP_ST_CANCELLED); |
| |
| fscache_stat(&fscache_n_op_enqueue); |
| switch (op->flags & FSCACHE_OP_TYPE) { |
| @@ -481,7 +482,8 @@ void fscache_put_operation(struct fscach |
| struct fscache_cache *cache; |
| |
| _enter("{OBJ%x OP%x,%d}", |
| - op->object->debug_id, op->debug_id, atomic_read(&op->usage)); |
| + op->object ? op->object->debug_id : 0, |
| + op->debug_id, atomic_read(&op->usage)); |
| |
| ASSERTCMP(atomic_read(&op->usage), >, 0); |
| |