From d3f88d376c49e4520a0d695a4b4e9b0c2dbebaaf Mon Sep 17 00:00:00 2001 From: "John L. Hammond" Date: Wed, 18 Jul 2018 15:47:25 -0500 Subject: [PATCH] LU-11157 obd: keep dirty_max_pages a round number of MB In client_adjust_max_dirty() ensure that the dirty pages limit is always divisible by 256 so that it may faithfully be represented in MB as is the case when the max_dirty_mb parameters are used. Test-Parameters: trivial Signed-off-by: John L. Hammond Change-Id: I8e2fbdd4bf253a46e2951e7840484ab6a617fbe2 Reviewed-on: https://review.whamcloud.com/32831 Tested-by: Jenkins Tested-by: Maloo Reviewed-by: Andreas Dilger Reviewed-by: Oleg Drokin Reviewed-by: James Simmons --- lustre/include/obd.h | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/lustre/include/obd.h b/lustre/include/obd.h index 14aa618..6f02b59 100644 --- a/lustre/include/obd.h +++ b/lustre/include/obd.h @@ -1223,7 +1223,8 @@ static inline int cli_brw_size(struct obd_device *obd) return obd->u.cli.cl_max_pages_per_rpc << PAGE_SHIFT; } -/* when RPC size or the max RPCs in flight is increased, the max dirty pages +/* + * When RPC size or the max RPCs in flight is increased, the max dirty pages * of the client should be increased accordingly to avoid sending fragmented * RPCs over the network when the client runs out of the maximum dirty space * when so many RPCs are being generated. @@ -1231,10 +1232,10 @@ static inline int cli_brw_size(struct obd_device *obd) static inline void client_adjust_max_dirty(struct client_obd *cli) { /* initializing */ - if (cli->cl_dirty_max_pages <= 0) - cli->cl_dirty_max_pages = (OSC_MAX_DIRTY_DEFAULT * 1024 * 1024) - >> PAGE_SHIFT; - else { + if (cli->cl_dirty_max_pages <= 0) { + cli->cl_dirty_max_pages = + (OSC_MAX_DIRTY_DEFAULT * 1024 * 1024) >> PAGE_SHIFT; + } else { unsigned long dirty_max = cli->cl_max_rpcs_in_flight * cli->cl_max_pages_per_rpc; @@ -1244,6 +1245,12 @@ static inline void client_adjust_max_dirty(struct client_obd *cli) if (cli->cl_dirty_max_pages > totalram_pages / 8) cli->cl_dirty_max_pages = totalram_pages / 8; + + /* This value is exported to userspace through the max_dirty_mb + * parameter. So we round up the number of pages to make it a round + * number of MBs. */ + cli->cl_dirty_max_pages = round_up(cli->cl_dirty_max_pages, + 1 << (20 - PAGE_SHIFT)); } #endif /* __OBD_H */ -- 1.8.3.1