From: David Howells Date: Tue, 30 Sep 2014 13:50:28 +0000 (+0100) Subject: CacheFiles: Handle object being killed before being set up X-Git-Tag: omap-for-v3.19/prcm-cleanup~73^2~2 X-Git-Url: http://git.openpandora.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a3b7c00484e1177e7eb9b047c46cac571b82442f;p=pandora-kernel.git CacheFiles: Handle object being killed before being set up If a cache object gets killed whilst in the process of being set up - for instance if the netfs relinquishes the cookie that the object is associated with - then the object's state machine will transit to the DROP_OBJECT state without necessarily going through the LOOKUP_OBJECT or CREATE_OBJECT states. This is a problem for CacheFiles because cachefiles_drop_object() assumes that object->dentry will be set upon reaching the DROP_OBJECT state and has an ASSERT() to that effect (see the oops below) - but object->dentry doesn't get set until the LOOKUP_OBJECT or CREATE_OBJECT states (and not always then if they fail). To fix this, just make the dentry cleanup in cachefiles_drop_object() conditional on the dentry actually being set and remove the assertion. CacheFiles: Assertion failed ------------[ cut here ]------------ kernel BUG at .../fs/cachefiles/namei.c:425! ... Workqueue: fscache_object fscache_object_work_func [fscache] ... RIP: ... cachefiles_delete_object+0xcd/0x110 [cachefiles] ... Call Trace: [] ? cachefiles_drop_object+0xff/0x130 [cachefiles] [] ? fscache_drop_object+0xd1/0x1d0 [fscache] [] ? fscache_object_work_func+0x87/0x210 [fscache] [] ? process_one_work+0x155/0x450 [] ? worker_thread+0x114/0x370 [] ? manage_workers.isra.21+0x2c0/0x2c0 [] ? kthread+0xbc/0xe0 [] ? flush_kthread_worker+0xa0/0xa0 [] ? ret_from_fork+0x7c/0xb0 [] ? flush_kthread_worker+0xa0/0xa0 Reported-by: Manuel Schölling Signed-off-by: David Howells Acked-by: Steve Dickson --- Reading git-diff-tree failed