From 023a9e4cde5498aae89971028dc35c1e3279da5b Mon Sep 17 00:00:00 2001 From: Mr NeilBrown Date: Thu, 27 Aug 2020 16:30:57 +1000 Subject: [PATCH] LU-6142 lustre: don't take spinlock to read a 'long'. Reading a 'long' (or unsigned long) is always an atomic operation. There is never a need to take a spinlock to just read a single 'long'. There are several procfs/debugfs/sysfs handlers which needlessly take a spinlock for this purpose. This patch: - removes the taking of the spinlock - changes the printf to scnprintf() as appropriate - directly returns the value returned by scnprintf rather than storing it in a variable - accesses the 'long' as an arg to the scnprintf(), rather than introducing a variabe to hold it. Test-Parameters: trivial Signed-off-by: Mr NeilBrown Change-Id: If4a6454b46844864e1177536a9c7b91e4c97de86 Reviewed-on: https://review.whamcloud.com/39743 Tested-by: jenkins Tested-by: Maloo Reviewed-by: Andreas Dilger Reviewed-by: Arshad Hussain Reviewed-by: James Simmons --- lustre/llite/lproc_llite.c | 24 ++++++------------------ lustre/mdc/lproc_mdc.c | 7 +------ lustre/osc/lproc_osc.c | 37 +++++++------------------------------ 3 files changed, 14 insertions(+), 54 deletions(-) diff --git a/lustre/llite/lproc_llite.c b/lustre/llite/lproc_llite.c index c701e0f..f6a7699 100644 --- a/lustre/llite/lproc_llite.c +++ b/lustre/llite/lproc_llite.c @@ -324,13 +324,9 @@ static ssize_t max_read_ahead_mb_show(struct kobject *kobj, { struct ll_sb_info *sbi = container_of(kobj, struct ll_sb_info, ll_kset.kobj); - unsigned long ra_max_mb; - spin_lock(&sbi->ll_lock); - ra_max_mb = PAGES_TO_MiB(sbi->ll_ra_info.ra_max_pages); - spin_unlock(&sbi->ll_lock); - - return snprintf(buf, PAGE_SIZE, "%lu\n", ra_max_mb); + return scnprintf(buf, PAGE_SIZE, "%lu\n", + PAGES_TO_MiB(sbi->ll_ra_info.ra_max_pages)); } static ssize_t max_read_ahead_mb_store(struct kobject *kobj, @@ -371,13 +367,9 @@ static ssize_t max_read_ahead_per_file_mb_show(struct kobject *kobj, { struct ll_sb_info *sbi = container_of(kobj, struct ll_sb_info, ll_kset.kobj); - unsigned long ra_max_file_mb; - spin_lock(&sbi->ll_lock); - ra_max_file_mb = PAGES_TO_MiB(sbi->ll_ra_info.ra_max_pages_per_file); - spin_unlock(&sbi->ll_lock); - - return snprintf(buf, PAGE_SIZE, "%lu\n", ra_max_file_mb); + return scnprintf(buf, PAGE_SIZE, "%lu\n", + PAGES_TO_MiB(sbi->ll_ra_info.ra_max_pages_per_file)); } static ssize_t max_read_ahead_per_file_mb_store(struct kobject *kobj, @@ -415,13 +407,9 @@ static ssize_t max_read_ahead_whole_mb_show(struct kobject *kobj, { struct ll_sb_info *sbi = container_of(kobj, struct ll_sb_info, ll_kset.kobj); - unsigned long ra_max_whole_mb; - - spin_lock(&sbi->ll_lock); - ra_max_whole_mb = PAGES_TO_MiB(sbi->ll_ra_info.ra_max_read_ahead_whole_pages); - spin_unlock(&sbi->ll_lock); - return snprintf(buf, PAGE_SIZE, "%lu\n", ra_max_whole_mb); + return scnprintf(buf, PAGE_SIZE, "%lu\n", + PAGES_TO_MiB(sbi->ll_ra_info.ra_max_read_ahead_whole_pages)); } static ssize_t max_read_ahead_whole_mb_store(struct kobject *kobj, diff --git a/lustre/mdc/lproc_mdc.c b/lustre/mdc/lproc_mdc.c index 9de5c70..a2ca754 100644 --- a/lustre/mdc/lproc_mdc.c +++ b/lustre/mdc/lproc_mdc.c @@ -149,13 +149,8 @@ static int mdc_max_dirty_mb_seq_show(struct seq_file *m, void *v) { struct obd_device *obd = m->private; struct client_obd *cli = &obd->u.cli; - unsigned long val; - spin_lock(&cli->cl_loi_list_lock); - val = PAGES_TO_MiB(cli->cl_dirty_max_pages); - spin_unlock(&cli->cl_loi_list_lock); - - seq_printf(m, "%lu\n", val); + seq_printf(m, "%lu\n", PAGES_TO_MiB(cli->cl_dirty_max_pages)); return 0; } diff --git a/lustre/osc/lproc_osc.c b/lustre/osc/lproc_osc.c index 498e03f..a497228 100644 --- a/lustre/osc/lproc_osc.c +++ b/lustre/osc/lproc_osc.c @@ -85,12 +85,8 @@ static ssize_t max_rpcs_in_flight_show(struct kobject *kobj, struct obd_device *obd = container_of(kobj, struct obd_device, obd_kset.kobj); struct client_obd *cli = &obd->u.cli; - ssize_t len; - spin_lock(&cli->cl_loi_list_lock); - len = sprintf(buf, "%u\n", cli->cl_max_rpcs_in_flight); - spin_unlock(&cli->cl_loi_list_lock); - return len; + return scnprintf(buf, PAGE_SIZE, "%u\n", cli->cl_max_rpcs_in_flight); } static ssize_t max_rpcs_in_flight_store(struct kobject *kobj, @@ -142,13 +138,9 @@ static ssize_t max_dirty_mb_show(struct kobject *kobj, struct obd_device *obd = container_of(kobj, struct obd_device, obd_kset.kobj); struct client_obd *cli = &obd->u.cli; - unsigned long val; - spin_lock(&cli->cl_loi_list_lock); - val = PAGES_TO_MiB(cli->cl_dirty_max_pages); - spin_unlock(&cli->cl_loi_list_lock); - - return sprintf(buf, "%lu\n", val); + return scnprintf(buf, PAGE_SIZE, "%lu\n", + PAGES_TO_MiB(cli->cl_dirty_max_pages)); } static ssize_t max_dirty_mb_store(struct kobject *kobj, @@ -254,13 +246,9 @@ static ssize_t cur_dirty_bytes_show(struct kobject *kobj, struct obd_device *obd = container_of(kobj, struct obd_device, obd_kset.kobj); struct client_obd *cli = &obd->u.cli; - ssize_t len; - - spin_lock(&cli->cl_loi_list_lock); - len = sprintf(buf, "%lu\n", cli->cl_dirty_pages << PAGE_SHIFT); - spin_unlock(&cli->cl_loi_list_lock); - return len; + return scnprintf(buf, PAGE_SIZE, "%lu\n", + cli->cl_dirty_pages << PAGE_SHIFT); } LUSTRE_RO_ATTR(cur_dirty_bytes); @@ -269,9 +257,7 @@ static int osc_cur_grant_bytes_seq_show(struct seq_file *m, void *v) struct obd_device *obd = m->private; struct client_obd *cli = &obd->u.cli; - spin_lock(&cli->cl_loi_list_lock); seq_printf(m, "%lu\n", cli->cl_avail_grant); - spin_unlock(&cli->cl_loi_list_lock); return 0; } @@ -302,13 +288,8 @@ static ssize_t osc_cur_grant_bytes_seq_write(struct file *file, return rc; /* this is only for shrinking grant */ - spin_lock(&cli->cl_loi_list_lock); - if (val >= cli->cl_avail_grant) { - spin_unlock(&cli->cl_loi_list_lock); + if (val >= cli->cl_avail_grant) return 0; - } - - spin_unlock(&cli->cl_loi_list_lock); with_imp_locked(obd, imp, rc) if (imp->imp_state == LUSTRE_IMP_FULL) @@ -325,12 +306,8 @@ static ssize_t cur_lost_grant_bytes_show(struct kobject *kobj, struct obd_device *obd = container_of(kobj, struct obd_device, obd_kset.kobj); struct client_obd *cli = &obd->u.cli; - ssize_t len; - spin_lock(&cli->cl_loi_list_lock); - len = sprintf(buf, "%lu\n", cli->cl_lost_grant); - spin_unlock(&cli->cl_loi_list_lock); - return len; + return scnprintf(buf, PAGE_SIZE, "%lu\n", cli->cl_lost_grant); } LUSTRE_RO_ATTR(cur_lost_grant_bytes); -- 1.8.3.1