Whamcloud - gitweb
LU-17022 osd: convert od_connects to atomic_t 07/51907/6
authorMr NeilBrown <neilb@suse.de>
Wed, 9 Aug 2023 06:11:51 +0000 (16:11 +1000)
committerOleg Drokin <green@whamcloud.com>
Mon, 4 Mar 2024 20:02:23 +0000 (20:02 +0000)
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 <neilb@suse.de>
Change-Id: I4e28c22c8988c7f6a5e67064073541e917a209db
Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/51907
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: James Simmons <jsimmons@infradead.org>
Reviewed-by: Arshad Hussain <arshad.hussain@aeoncomputing.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lustre/osd-ldiskfs/osd_handler.c
lustre/osd-ldiskfs/osd_internal.h
lustre/osd-zfs/osd_handler.c
lustre/osd-zfs/osd_internal.h

index 23fa126..6b8fe72 100644 (file)
@@ -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 */
 
index 7ef6fe5..f12df03 100644 (file)
@@ -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;
index 52c50db..5d265d5 100644 (file)
@@ -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 */
 
index c820726..3fe71e3 100644 (file)
@@ -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;