Skip to content

Commit d01c495

Browse files
dhowellsbrauner
authored andcommitted
netfs: Add retry stat counters
Add stat counters to count the number of request and subrequest retries and display them in /proc/fs/netfs/stats. Signed-off-by: David Howells <dhowells@redhat.com> Link: https://lore.kernel.org/r/20250212222402.3618494-3-dhowells@redhat.com cc: Jeff Layton <jlayton@kernel.org> cc: netfs@lists.linux.dev cc: linux-fsdevel@vger.kernel.org Signed-off-by: Christian Brauner <brauner@kernel.org>
1 parent 1d00139 commit d01c495

File tree

5 files changed

+19
-0
lines changed

5 files changed

+19
-0
lines changed

fs/netfs/internal.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,8 @@ extern atomic_t netfs_n_rh_write_begin;
135135
extern atomic_t netfs_n_rh_write_done;
136136
extern atomic_t netfs_n_rh_write_failed;
137137
extern atomic_t netfs_n_rh_write_zskip;
138+
extern atomic_t netfs_n_rh_retry_read_req;
139+
extern atomic_t netfs_n_rh_retry_read_subreq;
138140
extern atomic_t netfs_n_wh_buffered_write;
139141
extern atomic_t netfs_n_wh_writethrough;
140142
extern atomic_t netfs_n_wh_dio_write;
@@ -147,6 +149,8 @@ extern atomic_t netfs_n_wh_upload_failed;
147149
extern atomic_t netfs_n_wh_write;
148150
extern atomic_t netfs_n_wh_write_done;
149151
extern atomic_t netfs_n_wh_write_failed;
152+
extern atomic_t netfs_n_wh_retry_write_req;
153+
extern atomic_t netfs_n_wh_retry_write_subreq;
150154
extern atomic_t netfs_n_wb_lock_skip;
151155
extern atomic_t netfs_n_wb_lock_wait;
152156
extern atomic_t netfs_n_folioq;

fs/netfs/read_retry.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ static void netfs_reissue_read(struct netfs_io_request *rreq,
1414
{
1515
__clear_bit(NETFS_SREQ_MADE_PROGRESS, &subreq->flags);
1616
__set_bit(NETFS_SREQ_IN_PROGRESS, &subreq->flags);
17+
netfs_stat(&netfs_n_rh_retry_read_subreq);
1718
subreq->rreq->netfs_ops->issue_read(subreq);
1819
}
1920

@@ -260,6 +261,8 @@ void netfs_retry_reads(struct netfs_io_request *rreq)
260261
struct netfs_io_stream *stream = &rreq->io_streams[0];
261262
DEFINE_WAIT(myself);
262263

264+
netfs_stat(&netfs_n_rh_retry_read_req);
265+
263266
set_bit(NETFS_RREQ_RETRYING, &rreq->flags);
264267

265268
/* Wait for all outstanding I/O to quiesce before performing retries as

fs/netfs/stats.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ atomic_t netfs_n_rh_write_begin;
2929
atomic_t netfs_n_rh_write_done;
3030
atomic_t netfs_n_rh_write_failed;
3131
atomic_t netfs_n_rh_write_zskip;
32+
atomic_t netfs_n_rh_retry_read_req;
33+
atomic_t netfs_n_rh_retry_read_subreq;
3234
atomic_t netfs_n_wh_buffered_write;
3335
atomic_t netfs_n_wh_writethrough;
3436
atomic_t netfs_n_wh_dio_write;
@@ -41,6 +43,8 @@ atomic_t netfs_n_wh_upload_failed;
4143
atomic_t netfs_n_wh_write;
4244
atomic_t netfs_n_wh_write_done;
4345
atomic_t netfs_n_wh_write_failed;
46+
atomic_t netfs_n_wh_retry_write_req;
47+
atomic_t netfs_n_wh_retry_write_subreq;
4448
atomic_t netfs_n_wb_lock_skip;
4549
atomic_t netfs_n_wb_lock_wait;
4650
atomic_t netfs_n_folioq;
@@ -81,6 +85,11 @@ int netfs_stats_show(struct seq_file *m, void *v)
8185
atomic_read(&netfs_n_wh_write),
8286
atomic_read(&netfs_n_wh_write_done),
8387
atomic_read(&netfs_n_wh_write_failed));
88+
seq_printf(m, "Retries: rq=%u rs=%u wq=%u ws=%u\n",
89+
atomic_read(&netfs_n_rh_retry_read_req),
90+
atomic_read(&netfs_n_rh_retry_read_subreq),
91+
atomic_read(&netfs_n_wh_retry_write_req),
92+
atomic_read(&netfs_n_wh_retry_write_subreq));
8493
seq_printf(m, "Objs : rr=%u sr=%u foq=%u wsc=%u\n",
8594
atomic_read(&netfs_n_rh_rreq),
8695
atomic_read(&netfs_n_rh_sreq),

fs/netfs/write_issue.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,7 @@ void netfs_reissue_write(struct netfs_io_stream *stream,
253253
subreq->retry_count++;
254254
__clear_bit(NETFS_SREQ_MADE_PROGRESS, &subreq->flags);
255255
__set_bit(NETFS_SREQ_IN_PROGRESS, &subreq->flags);
256+
netfs_stat(&netfs_n_wh_retry_write_subreq);
256257
netfs_do_issue_write(stream, subreq);
257258
}
258259

fs/netfs/write_retry.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,8 @@ void netfs_retry_writes(struct netfs_io_request *wreq)
203203
struct netfs_io_stream *stream;
204204
int s;
205205

206+
netfs_stat(&netfs_n_wh_retry_write_req);
207+
206208
/* Wait for all outstanding I/O to quiesce before performing retries as
207209
* we may need to renegotiate the I/O sizes.
208210
*/

0 commit comments

Comments
 (0)