summaryrefslogtreecommitdiffstats
path: root/fs/fscache/page.c
diff options
context:
space:
mode:
authorDavid Howells2015-02-24 11:52:51 +0100
committerDavid Howells2015-04-02 15:28:53 +0200
commit87021526300f1a292dd966e141e183630ac95317 (patch)
treea248e5643ecdf9dae6ab6a2fe0e3d4abc415b373 /fs/fscache/page.c
parentFS-Cache: Synchronise object death state change vs operation submission (diff)
downloadkernel-qcow2-linux-87021526300f1a292dd966e141e183630ac95317.tar.gz
kernel-qcow2-linux-87021526300f1a292dd966e141e183630ac95317.tar.xz
kernel-qcow2-linux-87021526300f1a292dd966e141e183630ac95317.zip
FS-Cache: fscache_object_is_dead() has wrong logic, kill it
fscache_object_is_dead() returns true only if the object is marked dead and the cache got an I/O error. This should be a logical OR instead. Since two of the callers got split up into handling for separate subcases, expand the other callers and kill the function. This is probably the right thing to do anyway since one of the subcases isn't about the object at all, but rather about the cache. Signed-off-by: David Howells <dhowells@redhat.com> Reviewed-by: Steve Dickson <steved@redhat.com> Acked-by: Jeff Layton <jeff.layton@primarydata.com>
Diffstat (limited to 'fs/fscache/page.c')
-rw-r--r--fs/fscache/page.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/fs/fscache/page.c b/fs/fscache/page.c
index de33b3fccca6..d0805e31361c 100644
--- a/fs/fscache/page.c
+++ b/fs/fscache/page.c
@@ -377,11 +377,13 @@ check_if_dead:
_leave(" = -ENOBUFS [cancelled]");
return -ENOBUFS;
}
- if (unlikely(fscache_object_is_dead(object))) {
- pr_err("%s() = -ENOBUFS [obj dead %d]\n", __func__, op->state);
+ if (unlikely(fscache_object_is_dying(object) ||
+ fscache_cache_is_broken(object))) {
+ enum fscache_operation_state state = op->state;
fscache_cancel_op(op, do_cancel);
if (stat_object_dead)
fscache_stat(stat_object_dead);
+ _leave(" = -ENOBUFS [obj dead %d]", state);
return -ENOBUFS;
}
return 0;