mirror of
https://github.com/torvalds/linux.git
synced 2026-06-04 04:23:35 +02:00
Merge patch series "netfs: Miscellaneous cleanups"
David Howells <dhowells@redhat.com> says: Here are some miscellaneous very minor cleanups for netfslib for the next merge window, primarily from Max Kellermann, if you could pull them. (1) Remove NETFS_SREQ_SEEK_DATA_READ. (2) Remove NETFS_INVALID_WRITE. (3) Remove NETFS_ICTX_WRITETHROUGH. (4) Remove NETFS_READ_HOLE_CLEAR. (5) Reorder structs to eliminate holes. (6) Remove netfs_io_request::ractl. (7) Only provide proc_link field if CONFIG_PROC_FS=y. (8) Remove folio_queue::marks3. (9) Remove NETFS_RREQ_DONT_UNLOCK_FOLIOS. (10) Remove NETFS_RREQ_BLOCKED. * patches from https://lore.kernel.org/20250519134813.2975312-1-dhowells@redhat.com: fs/netfs: remove unused flag NETFS_RREQ_BLOCKED fs/netfs: remove unused flag NETFS_RREQ_DONT_UNLOCK_FOLIOS folio_queue: remove unused field `marks3` fs/netfs: declare field `proc_link` only if CONFIG_PROC_FS=y fs/netfs: remove `netfs_io_request.ractl` fs/netfs: reorder struct fields to eliminate holes fs/netfs: remove unused enum choice NETFS_READ_HOLE_CLEAR fs/netfs: remove unused flag NETFS_ICTX_WRITETHROUGH fs/netfs: remove unused source NETFS_INVALID_WRITE fs/netfs: remove unused flag NETFS_SREQ_SEEK_DATA_READ Link: https://lore.kernel.org/20250519134813.2975312-1-dhowells@redhat.com Signed-off-by: Christian Brauner <brauner@kernel.org>
This commit is contained in:
commit
e02cdc0e7f
|
|
@ -151,19 +151,16 @@ The marks can be set by::
|
|||
|
||||
void folioq_mark(struct folio_queue *folioq, unsigned int slot);
|
||||
void folioq_mark2(struct folio_queue *folioq, unsigned int slot);
|
||||
void folioq_mark3(struct folio_queue *folioq, unsigned int slot);
|
||||
|
||||
Cleared by::
|
||||
|
||||
void folioq_unmark(struct folio_queue *folioq, unsigned int slot);
|
||||
void folioq_unmark2(struct folio_queue *folioq, unsigned int slot);
|
||||
void folioq_unmark3(struct folio_queue *folioq, unsigned int slot);
|
||||
|
||||
And the marks can be queried by::
|
||||
|
||||
bool folioq_is_marked(const struct folio_queue *folioq, unsigned int slot);
|
||||
bool folioq_is_marked2(const struct folio_queue *folioq, unsigned int slot);
|
||||
bool folioq_is_marked3(const struct folio_queue *folioq, unsigned int slot);
|
||||
|
||||
The marks can be used for any purpose and are not interpreted by this API.
|
||||
|
||||
|
|
|
|||
|
|
@ -712,11 +712,6 @@ handle falling back from one source type to another. The members are:
|
|||
at a boundary with the filesystem structure (e.g. at the end of a Ceph
|
||||
object). It tells netfslib not to retile subrequests across it.
|
||||
|
||||
* ``NETFS_SREQ_SEEK_DATA_READ``
|
||||
|
||||
This is a hint from netfslib to the cache that it might want to try
|
||||
skipping ahead to the next data (ie. using SEEK_DATA).
|
||||
|
||||
* ``error``
|
||||
|
||||
This is for the filesystem to store result of the subrequest. It should be
|
||||
|
|
|
|||
|
|
@ -78,7 +78,8 @@ static int netfs_begin_cache_read(struct netfs_io_request *rreq, struct netfs_in
|
|||
* [!] NOTE: This must be run in the same thread as ->issue_read() was called
|
||||
* in as we access the readahead_control struct.
|
||||
*/
|
||||
static ssize_t netfs_prepare_read_iterator(struct netfs_io_subrequest *subreq)
|
||||
static ssize_t netfs_prepare_read_iterator(struct netfs_io_subrequest *subreq,
|
||||
struct readahead_control *ractl)
|
||||
{
|
||||
struct netfs_io_request *rreq = subreq->rreq;
|
||||
size_t rsize = subreq->len;
|
||||
|
|
@ -86,7 +87,7 @@ static ssize_t netfs_prepare_read_iterator(struct netfs_io_subrequest *subreq)
|
|||
if (subreq->source == NETFS_DOWNLOAD_FROM_SERVER)
|
||||
rsize = umin(rsize, rreq->io_streams[0].sreq_max_len);
|
||||
|
||||
if (rreq->ractl) {
|
||||
if (ractl) {
|
||||
/* If we don't have sufficient folios in the rolling buffer,
|
||||
* extract a folioq's worth from the readahead region at a time
|
||||
* into the buffer. Note that this acquires a ref on each page
|
||||
|
|
@ -99,7 +100,7 @@ static ssize_t netfs_prepare_read_iterator(struct netfs_io_subrequest *subreq)
|
|||
while (rreq->submitted < subreq->start + rsize) {
|
||||
ssize_t added;
|
||||
|
||||
added = rolling_buffer_load_from_ra(&rreq->buffer, rreq->ractl,
|
||||
added = rolling_buffer_load_from_ra(&rreq->buffer, ractl,
|
||||
&put_batch);
|
||||
if (added < 0)
|
||||
return added;
|
||||
|
|
@ -211,7 +212,8 @@ static void netfs_issue_read(struct netfs_io_request *rreq,
|
|||
* slicing up the region to be read according to available cache blocks and
|
||||
* network rsize.
|
||||
*/
|
||||
static void netfs_read_to_pagecache(struct netfs_io_request *rreq)
|
||||
static void netfs_read_to_pagecache(struct netfs_io_request *rreq,
|
||||
struct readahead_control *ractl)
|
||||
{
|
||||
struct netfs_inode *ictx = netfs_inode(rreq->inode);
|
||||
unsigned long long start = rreq->start;
|
||||
|
|
@ -291,7 +293,7 @@ static void netfs_read_to_pagecache(struct netfs_io_request *rreq)
|
|||
break;
|
||||
|
||||
issue:
|
||||
slice = netfs_prepare_read_iterator(subreq);
|
||||
slice = netfs_prepare_read_iterator(subreq, ractl);
|
||||
if (slice < 0) {
|
||||
ret = slice;
|
||||
subreq->error = ret;
|
||||
|
|
@ -359,11 +361,10 @@ void netfs_readahead(struct readahead_control *ractl)
|
|||
|
||||
netfs_rreq_expand(rreq, ractl);
|
||||
|
||||
rreq->ractl = ractl;
|
||||
rreq->submitted = rreq->start;
|
||||
if (rolling_buffer_init(&rreq->buffer, rreq->debug_id, ITER_DEST) < 0)
|
||||
goto cleanup_free;
|
||||
netfs_read_to_pagecache(rreq);
|
||||
netfs_read_to_pagecache(rreq, ractl);
|
||||
|
||||
netfs_put_request(rreq, true, netfs_rreq_trace_put_return);
|
||||
return;
|
||||
|
|
@ -389,7 +390,6 @@ static int netfs_create_singular_buffer(struct netfs_io_request *rreq, struct fo
|
|||
if (added < 0)
|
||||
return added;
|
||||
rreq->submitted = rreq->start + added;
|
||||
rreq->ractl = (struct readahead_control *)1UL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -459,7 +459,7 @@ static int netfs_read_gaps(struct file *file, struct folio *folio)
|
|||
iov_iter_bvec(&rreq->buffer.iter, ITER_DEST, bvec, i, rreq->len);
|
||||
rreq->submitted = rreq->start + flen;
|
||||
|
||||
netfs_read_to_pagecache(rreq);
|
||||
netfs_read_to_pagecache(rreq, NULL);
|
||||
|
||||
if (sink)
|
||||
folio_put(sink);
|
||||
|
|
@ -528,7 +528,7 @@ int netfs_read_folio(struct file *file, struct folio *folio)
|
|||
if (ret < 0)
|
||||
goto discard;
|
||||
|
||||
netfs_read_to_pagecache(rreq);
|
||||
netfs_read_to_pagecache(rreq, NULL);
|
||||
ret = netfs_wait_for_read(rreq);
|
||||
netfs_put_request(rreq, false, netfs_rreq_trace_put_return);
|
||||
return ret < 0 ? ret : 0;
|
||||
|
|
@ -685,7 +685,7 @@ int netfs_write_begin(struct netfs_inode *ctx,
|
|||
if (ret < 0)
|
||||
goto error_put;
|
||||
|
||||
netfs_read_to_pagecache(rreq);
|
||||
netfs_read_to_pagecache(rreq, NULL);
|
||||
ret = netfs_wait_for_read(rreq);
|
||||
if (ret < 0)
|
||||
goto error;
|
||||
|
|
@ -750,7 +750,7 @@ int netfs_prefetch_for_write(struct file *file, struct folio *folio,
|
|||
if (ret < 0)
|
||||
goto error_put;
|
||||
|
||||
netfs_read_to_pagecache(rreq);
|
||||
netfs_read_to_pagecache(rreq, NULL);
|
||||
ret = netfs_wait_for_read(rreq);
|
||||
netfs_put_request(rreq, false, netfs_rreq_trace_put_return);
|
||||
return ret < 0 ? ret : 0;
|
||||
|
|
|
|||
|
|
@ -115,8 +115,7 @@ ssize_t netfs_perform_write(struct kiocb *iocb, struct iov_iter *iter,
|
|||
size_t max_chunk = mapping_max_folio_size(mapping);
|
||||
bool maybe_trouble = false;
|
||||
|
||||
if (unlikely(test_bit(NETFS_ICTX_WRITETHROUGH, &ctx->flags) ||
|
||||
iocb->ki_flags & (IOCB_DSYNC | IOCB_SYNC))
|
||||
if (unlikely(iocb->ki_flags & (IOCB_DSYNC | IOCB_SYNC))
|
||||
) {
|
||||
wbc_attach_fdatawrite_inode(&wbc, mapping->host);
|
||||
|
||||
|
|
|
|||
|
|
@ -106,9 +106,6 @@ static int netfs_dispatch_unbuffered_reads(struct netfs_io_request *rreq)
|
|||
netfs_wait_for_pause(rreq);
|
||||
if (test_bit(NETFS_RREQ_FAILED, &rreq->flags))
|
||||
break;
|
||||
if (test_bit(NETFS_RREQ_BLOCKED, &rreq->flags) &&
|
||||
test_bit(NETFS_RREQ_NONBLOCK, &rreq->flags))
|
||||
break;
|
||||
cond_resched();
|
||||
} while (size > 0);
|
||||
|
||||
|
|
|
|||
|
|
@ -64,8 +64,6 @@ struct netfs_io_request *netfs_alloc_request(struct address_space *mapping,
|
|||
}
|
||||
|
||||
__set_bit(NETFS_RREQ_IN_PROGRESS, &rreq->flags);
|
||||
if (file && file->f_flags & O_NONBLOCK)
|
||||
__set_bit(NETFS_RREQ_NONBLOCK, &rreq->flags);
|
||||
if (rreq->netfs_ops->init_request) {
|
||||
ret = rreq->netfs_ops->init_request(rreq, file);
|
||||
if (ret < 0) {
|
||||
|
|
|
|||
|
|
@ -83,14 +83,12 @@ static void netfs_unlock_read_folio(struct netfs_io_request *rreq,
|
|||
}
|
||||
|
||||
just_unlock:
|
||||
if (!test_bit(NETFS_RREQ_DONT_UNLOCK_FOLIOS, &rreq->flags)) {
|
||||
if (folio->index == rreq->no_unlock_folio &&
|
||||
test_bit(NETFS_RREQ_NO_UNLOCK_FOLIO, &rreq->flags)) {
|
||||
_debug("no unlock");
|
||||
} else {
|
||||
trace_netfs_folio(folio, netfs_folio_trace_read_unlock);
|
||||
folio_unlock(folio);
|
||||
}
|
||||
if (folio->index == rreq->no_unlock_folio &&
|
||||
test_bit(NETFS_RREQ_NO_UNLOCK_FOLIO, &rreq->flags)) {
|
||||
_debug("no unlock");
|
||||
} else {
|
||||
trace_netfs_folio(folio, netfs_folio_trace_read_unlock);
|
||||
folio_unlock(folio);
|
||||
}
|
||||
|
||||
folioq_clear(folioq, slot);
|
||||
|
|
|
|||
|
|
@ -495,8 +495,6 @@ void netfs_write_subrequest_terminated(void *_op, ssize_t transferred_or_error,
|
|||
case NETFS_WRITE_TO_CACHE:
|
||||
netfs_stat(&netfs_n_wh_write_done);
|
||||
break;
|
||||
case NETFS_INVALID_WRITE:
|
||||
break;
|
||||
default:
|
||||
BUG();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -34,7 +34,6 @@ struct folio_queue {
|
|||
struct folio_queue *prev; /* Previous queue segment of NULL */
|
||||
unsigned long marks; /* 1-bit mark per folio */
|
||||
unsigned long marks2; /* Second 1-bit mark per folio */
|
||||
unsigned long marks3; /* Third 1-bit mark per folio */
|
||||
#if PAGEVEC_SIZE > BITS_PER_LONG
|
||||
#error marks is not big enough
|
||||
#endif
|
||||
|
|
@ -58,7 +57,6 @@ static inline void folioq_init(struct folio_queue *folioq, unsigned int rreq_id)
|
|||
folioq->prev = NULL;
|
||||
folioq->marks = 0;
|
||||
folioq->marks2 = 0;
|
||||
folioq->marks3 = 0;
|
||||
folioq->rreq_id = rreq_id;
|
||||
folioq->debug_id = 0;
|
||||
}
|
||||
|
|
@ -178,45 +176,6 @@ static inline void folioq_unmark2(struct folio_queue *folioq, unsigned int slot)
|
|||
clear_bit(slot, &folioq->marks2);
|
||||
}
|
||||
|
||||
/**
|
||||
* folioq_is_marked3: Check third folio mark in a folio queue segment
|
||||
* @folioq: The segment to query
|
||||
* @slot: The slot number of the folio to query
|
||||
*
|
||||
* Determine if the third mark is set for the folio in the specified slot in a
|
||||
* folio queue segment.
|
||||
*/
|
||||
static inline bool folioq_is_marked3(const struct folio_queue *folioq, unsigned int slot)
|
||||
{
|
||||
return test_bit(slot, &folioq->marks3);
|
||||
}
|
||||
|
||||
/**
|
||||
* folioq_mark3: Set the third mark on a folio in a folio queue segment
|
||||
* @folioq: The segment to modify
|
||||
* @slot: The slot number of the folio to modify
|
||||
*
|
||||
* Set the third mark for the folio in the specified slot in a folio queue
|
||||
* segment.
|
||||
*/
|
||||
static inline void folioq_mark3(struct folio_queue *folioq, unsigned int slot)
|
||||
{
|
||||
set_bit(slot, &folioq->marks3);
|
||||
}
|
||||
|
||||
/**
|
||||
* folioq_unmark3: Clear the third mark on a folio in a folio queue segment
|
||||
* @folioq: The segment to modify
|
||||
* @slot: The slot number of the folio to modify
|
||||
*
|
||||
* Clear the third mark for the folio in the specified slot in a folio queue
|
||||
* segment.
|
||||
*/
|
||||
static inline void folioq_unmark3(struct folio_queue *folioq, unsigned int slot)
|
||||
{
|
||||
clear_bit(slot, &folioq->marks3);
|
||||
}
|
||||
|
||||
/**
|
||||
* folioq_append: Add a folio to a folio queue segment
|
||||
* @folioq: The segment to add to
|
||||
|
|
@ -318,7 +277,6 @@ static inline void folioq_clear(struct folio_queue *folioq, unsigned int slot)
|
|||
folioq->vec.folios[slot] = NULL;
|
||||
folioq_unmark(folioq, slot);
|
||||
folioq_unmark2(folioq, slot);
|
||||
folioq_unmark3(folioq, slot);
|
||||
}
|
||||
|
||||
#endif /* _LINUX_FOLIO_QUEUE_H */
|
||||
|
|
|
|||
|
|
@ -498,9 +498,6 @@ static inline void fscache_end_operation(struct netfs_cache_resources *cres)
|
|||
*
|
||||
* NETFS_READ_HOLE_IGNORE - Just try to read (may return a short read).
|
||||
*
|
||||
* NETFS_READ_HOLE_CLEAR - Seek for data, clearing the part of the buffer
|
||||
* skipped over, then do as for IGNORE.
|
||||
*
|
||||
* NETFS_READ_HOLE_FAIL - Give ENODATA if we encounter a hole.
|
||||
*/
|
||||
static inline
|
||||
|
|
|
|||
|
|
@ -48,7 +48,6 @@ enum netfs_io_source {
|
|||
NETFS_INVALID_READ,
|
||||
NETFS_UPLOAD_TO_SERVER,
|
||||
NETFS_WRITE_TO_CACHE,
|
||||
NETFS_INVALID_WRITE,
|
||||
} __mode(byte);
|
||||
|
||||
typedef void (*netfs_io_terminated_t)(void *priv, ssize_t transferred_or_error,
|
||||
|
|
@ -71,7 +70,6 @@ struct netfs_inode {
|
|||
unsigned long flags;
|
||||
#define NETFS_ICTX_ODIRECT 0 /* The file has DIO in progress */
|
||||
#define NETFS_ICTX_UNBUFFERED 1 /* I/O should not use the pagecache */
|
||||
#define NETFS_ICTX_WRITETHROUGH 2 /* Write-through caching */
|
||||
#define NETFS_ICTX_MODIFIED_ATTR 3 /* Indicate change in mtime/ctime */
|
||||
#define NETFS_ICTX_SINGLE_NO_UPLOAD 4 /* Monolithic payload, cache but no upload */
|
||||
};
|
||||
|
|
@ -146,8 +144,8 @@ struct netfs_io_stream {
|
|||
struct netfs_io_subrequest *front; /* Op being collected */
|
||||
unsigned long long collected_to; /* Position we've collected results to */
|
||||
size_t transferred; /* The amount transferred from this stream */
|
||||
enum netfs_io_source source; /* Where to read from/write to */
|
||||
unsigned short error; /* Aggregate error for the stream */
|
||||
enum netfs_io_source source; /* Where to read from/write to */
|
||||
unsigned char stream_nr; /* Index of stream in parent table */
|
||||
bool avail; /* T if stream is available */
|
||||
bool active; /* T if stream is active */
|
||||
|
|
@ -191,7 +189,6 @@ struct netfs_io_subrequest {
|
|||
unsigned long flags;
|
||||
#define NETFS_SREQ_COPY_TO_CACHE 0 /* Set if should copy the data to the cache */
|
||||
#define NETFS_SREQ_CLEAR_TAIL 1 /* Set if the rest of the read should be cleared */
|
||||
#define NETFS_SREQ_SEEK_DATA_READ 3 /* Set if ->read() should SEEK_DATA first */
|
||||
#define NETFS_SREQ_MADE_PROGRESS 4 /* Set if we transferred at least some data */
|
||||
#define NETFS_SREQ_ONDEMAND 5 /* Set if it's from on-demand read mode */
|
||||
#define NETFS_SREQ_BOUNDARY 6 /* Set if ends on hard boundary (eg. ceph object) */
|
||||
|
|
@ -231,8 +228,9 @@ struct netfs_io_request {
|
|||
struct kiocb *iocb; /* AIO completion vector */
|
||||
struct netfs_cache_resources cache_resources;
|
||||
struct netfs_io_request *copy_to_cache; /* Request to write just-read data to the cache */
|
||||
struct readahead_control *ractl; /* Readahead descriptor */
|
||||
#ifdef CONFIG_PROC_FS
|
||||
struct list_head proc_link; /* Link in netfs_iorequests */
|
||||
#endif
|
||||
struct netfs_io_stream io_streams[2]; /* Streams of parallel I/O operations */
|
||||
#define NR_IO_STREAMS 2 //wreq->nr_io_streams
|
||||
struct netfs_group *group; /* Writeback group being written back */
|
||||
|
|
@ -243,19 +241,10 @@ struct netfs_io_request {
|
|||
void *netfs_priv; /* Private data for the netfs */
|
||||
void *netfs_priv2; /* Private data for the netfs */
|
||||
struct bio_vec *direct_bv; /* DIO buffer list (when handling iovec-iter) */
|
||||
unsigned int direct_bv_count; /* Number of elements in direct_bv[] */
|
||||
unsigned int debug_id;
|
||||
unsigned int rsize; /* Maximum read size (0 for none) */
|
||||
unsigned int wsize; /* Maximum write size (0 for none) */
|
||||
atomic_t subreq_counter; /* Next subreq->debug_index */
|
||||
unsigned int nr_group_rel; /* Number of refs to release on ->group */
|
||||
spinlock_t lock; /* Lock for queuing subreqs */
|
||||
unsigned long long submitted; /* Amount submitted for I/O so far */
|
||||
unsigned long long len; /* Length of the request */
|
||||
size_t transferred; /* Amount to be indicated as transferred */
|
||||
long error; /* 0 or error that occurred */
|
||||
enum netfs_io_origin origin; /* Origin of the request */
|
||||
bool direct_bv_unpin; /* T if direct_bv[] must be unpinned */
|
||||
unsigned long long i_size; /* Size of the file */
|
||||
unsigned long long start; /* Start position */
|
||||
atomic64_t issued_to; /* Write issuer folio cursor */
|
||||
|
|
@ -263,18 +252,24 @@ struct netfs_io_request {
|
|||
unsigned long long cleaned_to; /* Position we've cleaned folios to */
|
||||
unsigned long long abandon_to; /* Position to abandon folios to */
|
||||
pgoff_t no_unlock_folio; /* Don't unlock this folio after read */
|
||||
unsigned int direct_bv_count; /* Number of elements in direct_bv[] */
|
||||
unsigned int debug_id;
|
||||
unsigned int rsize; /* Maximum read size (0 for none) */
|
||||
unsigned int wsize; /* Maximum write size (0 for none) */
|
||||
atomic_t subreq_counter; /* Next subreq->debug_index */
|
||||
unsigned int nr_group_rel; /* Number of refs to release on ->group */
|
||||
spinlock_t lock; /* Lock for queuing subreqs */
|
||||
unsigned char front_folio_order; /* Order (size) of front folio */
|
||||
enum netfs_io_origin origin; /* Origin of the request */
|
||||
bool direct_bv_unpin; /* T if direct_bv[] must be unpinned */
|
||||
refcount_t ref;
|
||||
unsigned long flags;
|
||||
#define NETFS_RREQ_OFFLOAD_COLLECTION 0 /* Offload collection to workqueue */
|
||||
#define NETFS_RREQ_NO_UNLOCK_FOLIO 2 /* Don't unlock no_unlock_folio on completion */
|
||||
#define NETFS_RREQ_DONT_UNLOCK_FOLIOS 3 /* Don't unlock the folios on completion */
|
||||
#define NETFS_RREQ_FAILED 4 /* The request failed */
|
||||
#define NETFS_RREQ_IN_PROGRESS 5 /* Unlocked when the request completes */
|
||||
#define NETFS_RREQ_FOLIO_COPY_TO_CACHE 6 /* Copy current folio to cache from read */
|
||||
#define NETFS_RREQ_UPLOAD_TO_SERVER 8 /* Need to write to the server */
|
||||
#define NETFS_RREQ_NONBLOCK 9 /* Don't block if possible (O_NONBLOCK) */
|
||||
#define NETFS_RREQ_BLOCKED 10 /* We blocked */
|
||||
#define NETFS_RREQ_PAUSE 11 /* Pause subrequest generation */
|
||||
#define NETFS_RREQ_USE_IO_ITER 12 /* Use ->io_iter rather than ->i_pages */
|
||||
#define NETFS_RREQ_ALL_QUEUED 13 /* All subreqs are now queued */
|
||||
|
|
@ -321,7 +316,6 @@ struct netfs_request_ops {
|
|||
*/
|
||||
enum netfs_read_from_hole {
|
||||
NETFS_READ_HOLE_IGNORE,
|
||||
NETFS_READ_HOLE_CLEAR,
|
||||
NETFS_READ_HOLE_FAIL,
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -77,8 +77,7 @@
|
|||
EM(NETFS_READ_FROM_CACHE, "READ") \
|
||||
EM(NETFS_INVALID_READ, "INVL") \
|
||||
EM(NETFS_UPLOAD_TO_SERVER, "UPLD") \
|
||||
EM(NETFS_WRITE_TO_CACHE, "WRIT") \
|
||||
E_(NETFS_INVALID_WRITE, "INVL")
|
||||
E_(NETFS_WRITE_TO_CACHE, "WRIT")
|
||||
|
||||
#define netfs_sreq_traces \
|
||||
EM(netfs_sreq_trace_add_donations, "+DON ") \
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user