netfs, fscache: Remove ->begin_cache_operation
Remove ->begin_cache_operation() in favour of just calling fscache directly. Signed-off-by: David Howells <dhowells@redhat.com> Reviewed-by: Jeff Layton <jlayton@kernel.org> cc: Christian Brauner <christian@brauner.io> cc: linux-fsdevel@vger.kernel.org cc: linux-cachefs@redhat.com
This commit is contained in:
parent
915cd30cde
commit
4498a8eccc
|
@ -295,7 +295,6 @@ through which it can issue requests and negotiate::
|
|||
struct netfs_request_ops {
|
||||
void (*init_request)(struct netfs_io_request *rreq, struct file *file);
|
||||
void (*free_request)(struct netfs_io_request *rreq);
|
||||
int (*begin_cache_operation)(struct netfs_io_request *rreq);
|
||||
void (*expand_readahead)(struct netfs_io_request *rreq);
|
||||
bool (*clamp_length)(struct netfs_io_subrequest *subreq);
|
||||
void (*issue_read)(struct netfs_io_subrequest *subreq);
|
||||
|
@ -317,20 +316,6 @@ The operations are as follows:
|
|||
[Optional] This is called as the request is being deallocated so that the
|
||||
filesystem can clean up any state it has attached there.
|
||||
|
||||
* ``begin_cache_operation()``
|
||||
|
||||
[Optional] This is called to ask the network filesystem to call into the
|
||||
cache (if present) to initialise the caching state for this read. The netfs
|
||||
library module cannot access the cache directly, so the cache should call
|
||||
something like fscache_begin_read_operation() to do this.
|
||||
|
||||
The cache gets to store its state in ->cache_resources and must set a table
|
||||
of operations of its own there (though of a different type).
|
||||
|
||||
This should return 0 on success and an error code otherwise. If an error is
|
||||
reported, the operation may proceed anyway, just without local caching (only
|
||||
out of memory and interruption errors cause failure here).
|
||||
|
||||
* ``expand_readahead()``
|
||||
|
||||
[Optional] This is called to allow the filesystem to expand the size of a
|
||||
|
@ -460,14 +445,14 @@ When implementing a local cache to be used by the read helpers, two things are
|
|||
required: some way for the network filesystem to initialise the caching for a
|
||||
read request and a table of operations for the helpers to call.
|
||||
|
||||
The network filesystem's ->begin_cache_operation() method is called to set up a
|
||||
cache and this must call into the cache to do the work. If using fscache, for
|
||||
example, the cache would call::
|
||||
To begin a cache operation on an fscache object, the following function is
|
||||
called::
|
||||
|
||||
int fscache_begin_read_operation(struct netfs_io_request *rreq,
|
||||
struct fscache_cookie *cookie);
|
||||
|
||||
passing in the request pointer and the cookie corresponding to the file.
|
||||
passing in the request pointer and the cookie corresponding to the file. This
|
||||
fills in the cache resources mentioned below.
|
||||
|
||||
The netfs_io_request object contains a place for the cache to hang its
|
||||
state::
|
||||
|
|
|
@ -82,25 +82,9 @@ static void v9fs_free_request(struct netfs_io_request *rreq)
|
|||
p9_fid_put(fid);
|
||||
}
|
||||
|
||||
/**
|
||||
* v9fs_begin_cache_operation - Begin a cache operation for a read
|
||||
* @rreq: The read request
|
||||
*/
|
||||
static int v9fs_begin_cache_operation(struct netfs_io_request *rreq)
|
||||
{
|
||||
#ifdef CONFIG_9P_FSCACHE
|
||||
struct fscache_cookie *cookie = v9fs_inode_cookie(V9FS_I(rreq->inode));
|
||||
|
||||
return fscache_begin_read_operation(&rreq->cache_resources, cookie);
|
||||
#else
|
||||
return -ENOBUFS;
|
||||
#endif
|
||||
}
|
||||
|
||||
const struct netfs_request_ops v9fs_req_ops = {
|
||||
.init_request = v9fs_init_request,
|
||||
.free_request = v9fs_free_request,
|
||||
.begin_cache_operation = v9fs_begin_cache_operation,
|
||||
.issue_read = v9fs_issue_read,
|
||||
};
|
||||
|
||||
|
|
|
@ -366,18 +366,6 @@ static int afs_init_request(struct netfs_io_request *rreq, struct file *file)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int afs_begin_cache_operation(struct netfs_io_request *rreq)
|
||||
{
|
||||
#ifdef CONFIG_AFS_FSCACHE
|
||||
struct afs_vnode *vnode = AFS_FS_I(rreq->inode);
|
||||
|
||||
return fscache_begin_read_operation(&rreq->cache_resources,
|
||||
afs_vnode_cache(vnode));
|
||||
#else
|
||||
return -ENOBUFS;
|
||||
#endif
|
||||
}
|
||||
|
||||
static int afs_check_write_begin(struct file *file, loff_t pos, unsigned len,
|
||||
struct folio **foliop, void **_fsdata)
|
||||
{
|
||||
|
@ -394,7 +382,6 @@ static void afs_free_request(struct netfs_io_request *rreq)
|
|||
const struct netfs_request_ops afs_req_ops = {
|
||||
.init_request = afs_init_request,
|
||||
.free_request = afs_free_request,
|
||||
.begin_cache_operation = afs_begin_cache_operation,
|
||||
.check_write_begin = afs_check_write_begin,
|
||||
.issue_read = afs_issue_read,
|
||||
};
|
||||
|
|
|
@ -509,7 +509,6 @@ static void ceph_netfs_free_request(struct netfs_io_request *rreq)
|
|||
const struct netfs_request_ops ceph_netfs_ops = {
|
||||
.init_request = ceph_init_request,
|
||||
.free_request = ceph_netfs_free_request,
|
||||
.begin_cache_operation = ceph_begin_cache_operation,
|
||||
.issue_read = ceph_netfs_issue_read,
|
||||
.expand_readahead = ceph_netfs_expand_readahead,
|
||||
.clamp_length = ceph_netfs_clamp_length,
|
||||
|
|
|
@ -57,13 +57,6 @@ static inline int ceph_fscache_dirty_folio(struct address_space *mapping,
|
|||
return fscache_dirty_folio(mapping, folio, ceph_fscache_cookie(ci));
|
||||
}
|
||||
|
||||
static inline int ceph_begin_cache_operation(struct netfs_io_request *rreq)
|
||||
{
|
||||
struct fscache_cookie *cookie = ceph_fscache_cookie(ceph_inode(rreq->inode));
|
||||
|
||||
return fscache_begin_read_operation(&rreq->cache_resources, cookie);
|
||||
}
|
||||
|
||||
static inline bool ceph_is_cache_enabled(struct inode *inode)
|
||||
{
|
||||
return fscache_cookie_enabled(ceph_fscache_cookie(ceph_inode(inode)));
|
||||
|
@ -135,11 +128,6 @@ static inline bool ceph_is_cache_enabled(struct inode *inode)
|
|||
return false;
|
||||
}
|
||||
|
||||
static inline int ceph_begin_cache_operation(struct netfs_io_request *rreq)
|
||||
{
|
||||
return -ENOBUFS;
|
||||
}
|
||||
|
||||
static inline void ceph_fscache_note_page_release(struct inode *inode)
|
||||
{
|
||||
}
|
||||
|
|
|
@ -147,6 +147,15 @@ static void netfs_rreq_expand(struct netfs_io_request *rreq,
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Begin an operation, and fetch the stored zero point value from the cookie if
|
||||
* available.
|
||||
*/
|
||||
static int netfs_begin_cache_read(struct netfs_io_request *rreq, struct netfs_inode *ctx)
|
||||
{
|
||||
return fscache_begin_read_operation(&rreq->cache_resources, netfs_i_cookie(ctx));
|
||||
}
|
||||
|
||||
/**
|
||||
* netfs_readahead - Helper to manage a read request
|
||||
* @ractl: The description of the readahead request
|
||||
|
@ -180,11 +189,9 @@ void netfs_readahead(struct readahead_control *ractl)
|
|||
if (IS_ERR(rreq))
|
||||
return;
|
||||
|
||||
if (ctx->ops->begin_cache_operation) {
|
||||
ret = ctx->ops->begin_cache_operation(rreq);
|
||||
if (ret == -ENOMEM || ret == -EINTR || ret == -ERESTARTSYS)
|
||||
goto cleanup_free;
|
||||
}
|
||||
ret = netfs_begin_cache_read(rreq, ctx);
|
||||
if (ret == -ENOMEM || ret == -EINTR || ret == -ERESTARTSYS)
|
||||
goto cleanup_free;
|
||||
|
||||
netfs_stat(&netfs_n_rh_readahead);
|
||||
trace_netfs_read(rreq, readahead_pos(ractl), readahead_length(ractl),
|
||||
|
@ -238,11 +245,9 @@ int netfs_read_folio(struct file *file, struct folio *folio)
|
|||
goto alloc_error;
|
||||
}
|
||||
|
||||
if (ctx->ops->begin_cache_operation) {
|
||||
ret = ctx->ops->begin_cache_operation(rreq);
|
||||
if (ret == -ENOMEM || ret == -EINTR || ret == -ERESTARTSYS)
|
||||
goto discard;
|
||||
}
|
||||
ret = netfs_begin_cache_read(rreq, ctx);
|
||||
if (ret == -ENOMEM || ret == -EINTR || ret == -ERESTARTSYS)
|
||||
goto discard;
|
||||
|
||||
netfs_stat(&netfs_n_rh_readpage);
|
||||
trace_netfs_read(rreq, rreq->start, rreq->len, netfs_read_trace_readpage);
|
||||
|
@ -390,11 +395,9 @@ retry:
|
|||
rreq->no_unlock_folio = folio_index(folio);
|
||||
__set_bit(NETFS_RREQ_NO_UNLOCK_FOLIO, &rreq->flags);
|
||||
|
||||
if (ctx->ops->begin_cache_operation) {
|
||||
ret = ctx->ops->begin_cache_operation(rreq);
|
||||
if (ret == -ENOMEM || ret == -EINTR || ret == -ERESTARTSYS)
|
||||
goto error_put;
|
||||
}
|
||||
ret = netfs_begin_cache_read(rreq, ctx);
|
||||
if (ret == -ENOMEM || ret == -EINTR || ret == -ERESTARTSYS)
|
||||
goto error_put;
|
||||
|
||||
netfs_stat(&netfs_n_rh_write_begin);
|
||||
trace_netfs_read(rreq, pos, len, netfs_read_trace_write_begin);
|
||||
|
|
|
@ -274,12 +274,6 @@ static void nfs_netfs_free_request(struct netfs_io_request *rreq)
|
|||
put_nfs_open_context(rreq->netfs_priv);
|
||||
}
|
||||
|
||||
static inline int nfs_netfs_begin_cache_operation(struct netfs_io_request *rreq)
|
||||
{
|
||||
return fscache_begin_read_operation(&rreq->cache_resources,
|
||||
netfs_i_cookie(netfs_inode(rreq->inode)));
|
||||
}
|
||||
|
||||
static struct nfs_netfs_io_data *nfs_netfs_alloc(struct netfs_io_subrequest *sreq)
|
||||
{
|
||||
struct nfs_netfs_io_data *netfs;
|
||||
|
@ -387,7 +381,6 @@ void nfs_netfs_read_completion(struct nfs_pgio_header *hdr)
|
|||
const struct netfs_request_ops nfs_netfs_ops = {
|
||||
.init_request = nfs_netfs_init_request,
|
||||
.free_request = nfs_netfs_free_request,
|
||||
.begin_cache_operation = nfs_netfs_begin_cache_operation,
|
||||
.issue_read = nfs_netfs_issue_read,
|
||||
.clamp_length = nfs_netfs_clamp_length
|
||||
};
|
||||
|
|
|
@ -437,9 +437,6 @@ const struct netfs_cache_ops *fscache_operation_valid(const struct netfs_cache_r
|
|||
* indicates the cache resources to which the operation state should be
|
||||
* attached; @cookie indicates the cache object that will be accessed.
|
||||
*
|
||||
* This is intended to be called from the ->begin_cache_operation() netfs lib
|
||||
* operation as implemented by the network filesystem.
|
||||
*
|
||||
* @cres->inval_counter is set from @cookie->inval_counter for comparison at
|
||||
* the end of the operation. This allows invalidation during the operation to
|
||||
* be detected by the caller.
|
||||
|
|
|
@ -208,7 +208,6 @@ struct netfs_io_request {
|
|||
struct netfs_request_ops {
|
||||
int (*init_request)(struct netfs_io_request *rreq, struct file *file);
|
||||
void (*free_request)(struct netfs_io_request *rreq);
|
||||
int (*begin_cache_operation)(struct netfs_io_request *rreq);
|
||||
|
||||
void (*expand_readahead)(struct netfs_io_request *rreq);
|
||||
bool (*clamp_length)(struct netfs_io_subrequest *subreq);
|
||||
|
@ -229,8 +228,7 @@ enum netfs_read_from_hole {
|
|||
};
|
||||
|
||||
/*
|
||||
* Table of operations for access to a cache. This is obtained by
|
||||
* rreq->ops->begin_cache_operation().
|
||||
* Table of operations for access to a cache.
|
||||
*/
|
||||
struct netfs_cache_ops {
|
||||
/* End an operation */
|
||||
|
|
Loading…
Reference in New Issue