mirror of
				https://github.com/torvalds/linux.git
				synced 2025-10-31 08:38:45 +02:00 
			
		
		
		
	cachefiles: narrow the scope of triggering EPOLLIN events in ondemand mode
Don't trigger EPOLLIN when there are only reopening read requests in xarray. Suggested-by: Xin Yin <yinxin.x@bytedance.com> Signed-off-by: Jia Zhu <zhujia.zj@bytedance.com> Link: https://lore.kernel.org/r/20231120041422.75170-5-zhujia.zj@bytedance.com Reviewed-by: Jingbo Xu <jefflexu@linux.alibaba.com> Reviewed-by: David Howells <dhowells@redhat.com> Signed-off-by: Christian Brauner <brauner@kernel.org>
This commit is contained in:
		
							parent
							
								
									0a7e54c195
								
							
						
					
					
						commit
						b817e22b2e
					
				
					 2 changed files with 24 additions and 2 deletions
				
			
		|  | @ -355,14 +355,24 @@ static __poll_t cachefiles_daemon_poll(struct file *file, | |||
| 					   struct poll_table_struct *poll) | ||||
| { | ||||
| 	struct cachefiles_cache *cache = file->private_data; | ||||
| 	XA_STATE(xas, &cache->reqs, 0); | ||||
| 	struct cachefiles_req *req; | ||||
| 	__poll_t mask; | ||||
| 
 | ||||
| 	poll_wait(file, &cache->daemon_pollwq, poll); | ||||
| 	mask = 0; | ||||
| 
 | ||||
| 	if (cachefiles_in_ondemand_mode(cache)) { | ||||
| 		if (!xa_empty(&cache->reqs)) | ||||
| 		if (!xa_empty(&cache->reqs)) { | ||||
| 			rcu_read_lock(); | ||||
| 			xas_for_each_marked(&xas, req, ULONG_MAX, CACHEFILES_REQ_NEW) { | ||||
| 				if (!cachefiles_ondemand_is_reopening_read(req)) { | ||||
| 					mask |= EPOLLIN; | ||||
| 					break; | ||||
| 				} | ||||
| 			} | ||||
| 			rcu_read_unlock(); | ||||
| 		} | ||||
| 	} else { | ||||
| 		if (test_bit(CACHEFILES_STATE_CHANGED, &cache->flags)) | ||||
| 			mask |= EPOLLIN; | ||||
|  |  | |||
|  | @ -329,6 +329,13 @@ cachefiles_ondemand_set_object_##_state(struct cachefiles_object *object) \ | |||
| CACHEFILES_OBJECT_STATE_FUNCS(open, OPEN); | ||||
| CACHEFILES_OBJECT_STATE_FUNCS(close, CLOSE); | ||||
| CACHEFILES_OBJECT_STATE_FUNCS(reopening, REOPENING); | ||||
| 
 | ||||
| static inline bool cachefiles_ondemand_is_reopening_read(struct cachefiles_req *req) | ||||
| { | ||||
| 	return cachefiles_ondemand_object_is_reopening(req->object) && | ||||
| 			req->msg.opcode == CACHEFILES_OP_READ; | ||||
| } | ||||
| 
 | ||||
| #else | ||||
| static inline ssize_t cachefiles_ondemand_daemon_read(struct cachefiles_cache *cache, | ||||
| 					char __user *_buffer, size_t buflen) | ||||
|  | @ -359,6 +366,11 @@ static inline int cachefiles_ondemand_init_obj_info(struct cachefiles_object *ob | |||
| static inline void cachefiles_ondemand_deinit_obj_info(struct cachefiles_object *obj) | ||||
| { | ||||
| } | ||||
| 
 | ||||
| static inline bool cachefiles_ondemand_is_reopening_read(struct cachefiles_req *req) | ||||
| { | ||||
| 	return false; | ||||
| } | ||||
| #endif | ||||
| 
 | ||||
| /*
 | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Jia Zhu
						Jia Zhu