mirror of
https://github.com/torvalds/linux.git
synced 2026-03-08 06:04:44 +01:00
cachefiles: cancel all requests for the object that is being dropped
Because after an object is dropped, requests for that object are useless, cancel them to avoid causing other problems. This prepares for the later addition of cancel_work_sync(). After the reopen requests is generated, cancel it to avoid cancel_work_sync() blocking by waiting for daemon to complete the reopen requests. Signed-off-by: Baokun Li <libaokun1@huawei.com> Link: https://lore.kernel.org/r/20240628062930.2467993-7-libaokun@huaweicloud.com Acked-by: Jeff Layton <jlayton@kernel.org> Reviewed-by: Gao Xiang <hsiangkao@linux.alibaba.com> Reviewed-by: Jia Zhu <zhujia.zj@bytedance.com> Signed-off-by: Christian Brauner <brauner@kernel.org>
This commit is contained in:
parent
b2415d1f45
commit
751f524635
1 changed files with 19 additions and 0 deletions
|
|
@ -564,12 +564,31 @@ int cachefiles_ondemand_init_object(struct cachefiles_object *object)
|
|||
|
||||
void cachefiles_ondemand_clean_object(struct cachefiles_object *object)
|
||||
{
|
||||
unsigned long index;
|
||||
struct cachefiles_req *req;
|
||||
struct cachefiles_cache *cache;
|
||||
|
||||
if (!object->ondemand)
|
||||
return;
|
||||
|
||||
cachefiles_ondemand_send_req(object, CACHEFILES_OP_CLOSE, 0,
|
||||
cachefiles_ondemand_init_close_req, NULL);
|
||||
|
||||
if (!object->ondemand->ondemand_id)
|
||||
return;
|
||||
|
||||
/* Cancel all requests for the object that is being dropped. */
|
||||
cache = object->volume->cache;
|
||||
xa_lock(&cache->reqs);
|
||||
cachefiles_ondemand_set_object_dropping(object);
|
||||
xa_for_each(&cache->reqs, index, req) {
|
||||
if (req->object == object) {
|
||||
req->error = -EIO;
|
||||
complete(&req->done);
|
||||
__xa_erase(&cache->reqs, index);
|
||||
}
|
||||
}
|
||||
xa_unlock(&cache->reqs);
|
||||
}
|
||||
|
||||
int cachefiles_ondemand_init_obj_info(struct cachefiles_object *object,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue