diff options
Diffstat (limited to 'fs/netfs/read_helper.c')
| -rw-r--r-- | fs/netfs/read_helper.c | 31 | 
1 files changed, 13 insertions, 18 deletions
diff --git a/fs/netfs/read_helper.c b/fs/netfs/read_helper.c index 7046f9bdd8dc..6169659857b3 100644 --- a/fs/netfs/read_helper.c +++ b/fs/netfs/read_helper.c @@ -170,7 +170,7 @@ static void netfs_cache_read_terminated(void *priv, ssize_t transferred_or_error   */  static void netfs_read_from_cache(struct netfs_read_request *rreq,  				  struct netfs_read_subrequest *subreq, -				  bool seek_data) +				  enum netfs_read_from_hole read_hole)  {  	struct netfs_cache_resources *cres = &rreq->cache_resources;  	struct iov_iter iter; @@ -180,7 +180,7 @@ static void netfs_read_from_cache(struct netfs_read_request *rreq,  			subreq->start + subreq->transferred,  			subreq->len   - subreq->transferred); -	cres->ops->read(cres, subreq->start, &iter, seek_data, +	cres->ops->read(cres, subreq->start, &iter, read_hole,  			netfs_cache_read_terminated, subreq);  } @@ -323,7 +323,7 @@ static void netfs_rreq_do_write_to_cache(struct netfs_read_request *rreq)  		}  		ret = cres->ops->prepare_write(cres, &subreq->start, &subreq->len, -					       rreq->i_size); +					       rreq->i_size, true);  		if (ret < 0) {  			trace_netfs_failure(rreq, subreq, ret, netfs_fail_prepare_write);  			trace_netfs_sreq(subreq, netfs_sreq_trace_write_skip); @@ -354,16 +354,11 @@ static void netfs_rreq_write_to_cache_work(struct work_struct *work)  	netfs_rreq_do_write_to_cache(rreq);  } -static void netfs_rreq_write_to_cache(struct netfs_read_request *rreq, -				      bool was_async) +static void netfs_rreq_write_to_cache(struct netfs_read_request *rreq)  { -	if (was_async) { -		rreq->work.func = netfs_rreq_write_to_cache_work; -		if (!queue_work(system_unbound_wq, &rreq->work)) -			BUG(); -	} else { -		netfs_rreq_do_write_to_cache(rreq); -	} +	rreq->work.func = netfs_rreq_write_to_cache_work; +	if (!queue_work(system_unbound_wq, &rreq->work)) +		BUG();  }  /* @@ -466,7 +461,7 @@ static void netfs_rreq_short_read(struct netfs_read_request *rreq,  	netfs_get_read_subrequest(subreq);  	atomic_inc(&rreq->nr_rd_ops);  	if (subreq->source == NETFS_READ_FROM_CACHE) -		netfs_read_from_cache(rreq, subreq, true); +		netfs_read_from_cache(rreq, subreq, NETFS_READ_HOLE_CLEAR);  	else  		netfs_read_from_server(rreq, subreq);  } @@ -558,7 +553,7 @@ again:  	wake_up_bit(&rreq->flags, NETFS_RREQ_IN_PROGRESS);  	if (test_bit(NETFS_RREQ_WRITE_TO_CACHE, &rreq->flags)) -		return netfs_rreq_write_to_cache(rreq, was_async); +		return netfs_rreq_write_to_cache(rreq);  	netfs_rreq_completed(rreq, was_async);  } @@ -794,7 +789,7 @@ static bool netfs_rreq_submit_slice(struct netfs_read_request *rreq,  		netfs_read_from_server(rreq, subreq);  		break;  	case NETFS_READ_FROM_CACHE: -		netfs_read_from_cache(rreq, subreq, false); +		netfs_read_from_cache(rreq, subreq, NETFS_READ_HOLE_IGNORE);  		break;  	default:  		BUG(); @@ -960,7 +955,7 @@ int netfs_readpage(struct file *file,  	rreq = netfs_alloc_read_request(ops, netfs_priv, file);  	if (!rreq) {  		if (netfs_priv) -			ops->cleanup(netfs_priv, folio_file_mapping(folio)); +			ops->cleanup(folio_file_mapping(folio), netfs_priv);  		folio_unlock(folio);  		return -ENOMEM;  	} @@ -1191,7 +1186,7 @@ have_folio:  		goto error;  have_folio_no_wait:  	if (netfs_priv) -		ops->cleanup(netfs_priv, mapping); +		ops->cleanup(mapping, netfs_priv);  	*_folio = folio;  	_leave(" = 0");  	return 0; @@ -1202,7 +1197,7 @@ error:  	folio_unlock(folio);  	folio_put(folio);  	if (netfs_priv) -		ops->cleanup(netfs_priv, mapping); +		ops->cleanup(mapping, netfs_priv);  	_leave(" = %d", ret);  	return ret;  }  |