From cdb7fd212ef89f2eedda5c1e887f1ef9c09152fb Mon Sep 17 00:00:00 2001 From: Mr NeilBrown Date: Wed, 9 Aug 2023 16:11:51 +1000 Subject: [PATCH] LU-17022 osd: convert od_connects to atomic_t od_connects in ldiskfs is protected with od_osfs_lock. in zfs it is protected with obd->obd_dev_lock. If we convert it to atomic_t we get cheaper locking and less confusion. Signed-off-by: Mr NeilBrown Change-Id: I4e28c22c8988c7f6a5e67064073541e917a209db Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/51907 Tested-by: jenkins Tested-by: Maloo Reviewed-by: Andreas Dilger Reviewed-by: James Simmons Reviewed-by: Arshad Hussain Reviewed-by: Oleg Drokin --- lustre/osd-ldiskfs/osd_handler.c | 12 +++--------- lustre/osd-ldiskfs/osd_internal.h | 2 +- lustre/osd-zfs/osd_handler.c | 12 +++--------- lustre/osd-zfs/osd_internal.h | 2 +- 4 files changed, 8 insertions(+), 20 deletions(-) diff --git a/lustre/osd-ldiskfs/osd_handler.c b/lustre/osd-ldiskfs/osd_handler.c index 23fa126..6b8fe72 100644 --- a/lustre/osd-ldiskfs/osd_handler.c +++ b/lustre/osd-ldiskfs/osd_handler.c @@ -8821,7 +8821,7 @@ static int osd_obd_connect(const struct lu_env *env, struct obd_export **exp, ENTRY; - CDEBUG(D_CONFIG, "connect #%d\n", osd->od_connects); + CDEBUG(D_CONFIG, "connect #%d\n", atomic_read(&osd->od_connects)); rc = class_connect(&conn, obd, cluuid); if (rc) @@ -8829,9 +8829,7 @@ static int osd_obd_connect(const struct lu_env *env, struct obd_export **exp, *exp = class_conn2export(&conn); - spin_lock(&osd->od_osfs_lock); - osd->od_connects++; - spin_unlock(&osd->od_osfs_lock); + atomic_inc(&osd->od_connects); RETURN(0); } @@ -8849,11 +8847,7 @@ static int osd_obd_disconnect(struct obd_export *exp) ENTRY; /* Only disconnect the underlying layers on the final disconnect. */ - spin_lock(&osd->od_osfs_lock); - osd->od_connects--; - if (osd->od_connects == 0) - release = 1; - spin_unlock(&osd->od_osfs_lock); + release = atomic_dec_and_test(&osd->od_connects); rc = class_disconnect(exp); /* bz 9811 */ diff --git a/lustre/osd-ldiskfs/osd_internal.h b/lustre/osd-ldiskfs/osd_internal.h index 7ef6fe5..f12df03 100644 --- a/lustre/osd-ldiskfs/osd_internal.h +++ b/lustre/osd-ldiskfs/osd_internal.h @@ -300,7 +300,7 @@ struct osd_device { spinlock_t od_osfs_lock; int od_fallocate_zero_blocks; - int od_connects; + atomic_t od_connects; struct lu_site od_site; struct osd_obj_map *od_ost_map; diff --git a/lustre/osd-zfs/osd_handler.c b/lustre/osd-zfs/osd_handler.c index 52c50db..5d265d5 100644 --- a/lustre/osd-zfs/osd_handler.c +++ b/lustre/osd-zfs/osd_handler.c @@ -1497,7 +1497,7 @@ static int osd_obd_connect(const struct lu_env *env, struct obd_export **exp, int rc; ENTRY; - CDEBUG(D_CONFIG, "connect #%d\n", osd->od_connects); + CDEBUG(D_CONFIG, "connect #%d\n", atomic_read(&osd->od_connects)); rc = class_connect(&conn, obd, cluuid); if (rc) @@ -1505,9 +1505,7 @@ static int osd_obd_connect(const struct lu_env *env, struct obd_export **exp, *exp = class_conn2export(&conn); - spin_lock(&obd->obd_dev_lock); - osd->od_connects++; - spin_unlock(&obd->obd_dev_lock); + atomic_inc(&osd->od_connects); RETURN(0); } @@ -1524,11 +1522,7 @@ static int osd_obd_disconnect(struct obd_export *exp) ENTRY; /* Only disconnect the underlying layers on the final disconnect. */ - spin_lock(&obd->obd_dev_lock); - osd->od_connects--; - if (osd->od_connects == 0) - release = 1; - spin_unlock(&obd->obd_dev_lock); + release = atomic_dec_and_test(&osd->od_connects); rc = class_disconnect(exp); /* bz 9811 */ diff --git a/lustre/osd-zfs/osd_internal.h b/lustre/osd-zfs/osd_internal.h index c820726..3fe71e3 100644 --- a/lustre/osd-zfs/osd_internal.h +++ b/lustre/osd-zfs/osd_internal.h @@ -366,7 +366,7 @@ struct osd_device { char od_svname[128]; guid_t od_uuid; - int od_connects; + atomic_t od_connects; int od_index; struct lu_site od_site; -- 1.8.3.1