seqnum_ops api is introduced to be used when a variable is used as a sequence/stat counter and doesn't guard object lifetimes. This clearly differentiates atomic_t usages that guard object lifetimes. seqnum32 variables wrap around to INT_MIN when it overflows and should not be used to guard resource lifetimes, device usage and open counts that control state changes, and pm states. atomic_t variables used for error_count and ios_threshold are atomic counters and guarded by max. values. No change to the behavior with this change. Signed-off-by: Shuah Khan <skhan@xxxxxxxxxxxxxxxxxxx> --- .../staging/unisys/visorhba/visorhba_main.c | 37 ++++++++++--------- 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/drivers/staging/unisys/visorhba/visorhba_main.c b/drivers/staging/unisys/visorhba/visorhba_main.c index 7ae5306b92fe..3209958b8aaa 100644 --- a/drivers/staging/unisys/visorhba/visorhba_main.c +++ b/drivers/staging/unisys/visorhba/visorhba_main.c @@ -10,6 +10,7 @@ #include <linux/module.h> #include <linux/seq_file.h> #include <linux/visorbus.h> +#include <linux/seqnum_ops.h> #include <scsi/scsi.h> #include <scsi/scsi_host.h> #include <scsi/scsi_cmnd.h> @@ -41,8 +42,8 @@ MODULE_ALIAS("visorbus:" VISOR_VHBA_CHANNEL_GUID_STR); struct visordisk_info { struct scsi_device *sdev; u32 valid; - atomic_t ios_threshold; - atomic_t error_count; + struct seqnum32 ios_threshold; + struct seqnum32 error_count; struct visordisk_info *next; }; @@ -374,10 +375,10 @@ static int visorhba_abort_handler(struct scsi_cmnd *scsicmd) scsidev = scsicmd->device; vdisk = scsidev->hostdata; - if (atomic_read(&vdisk->error_count) < VISORHBA_ERROR_COUNT) - atomic_inc(&vdisk->error_count); + if (seqnum32_read(&vdisk->error_count) < VISORHBA_ERROR_COUNT) + seqnum32_inc(&vdisk->error_count); else - atomic_set(&vdisk->ios_threshold, IOS_ERROR_THRESHOLD); + seqnum32_set(&vdisk->ios_threshold, IOS_ERROR_THRESHOLD); rtn = forward_taskmgmt_command(TASK_MGMT_ABORT_TASK, scsidev); if (rtn == SUCCESS) { scsicmd->result = DID_ABORT << 16; @@ -401,10 +402,10 @@ static int visorhba_device_reset_handler(struct scsi_cmnd *scsicmd) scsidev = scsicmd->device; vdisk = scsidev->hostdata; - if (atomic_read(&vdisk->error_count) < VISORHBA_ERROR_COUNT) - atomic_inc(&vdisk->error_count); + if (seqnum32_read(&vdisk->error_count) < VISORHBA_ERROR_COUNT) + seqnum32_inc(&vdisk->error_count); else - atomic_set(&vdisk->ios_threshold, IOS_ERROR_THRESHOLD); + seqnum32_set(&vdisk->ios_threshold, IOS_ERROR_THRESHOLD); rtn = forward_taskmgmt_command(TASK_MGMT_LUN_RESET, scsidev); if (rtn == SUCCESS) { scsicmd->result = DID_RESET << 16; @@ -429,10 +430,10 @@ static int visorhba_bus_reset_handler(struct scsi_cmnd *scsicmd) scsidev = scsicmd->device; shost_for_each_device(scsidev, scsidev->host) { vdisk = scsidev->hostdata; - if (atomic_read(&vdisk->error_count) < VISORHBA_ERROR_COUNT) - atomic_inc(&vdisk->error_count); + if (seqnum32_read(&vdisk->error_count) < VISORHBA_ERROR_COUNT) + seqnum32_inc(&vdisk->error_count); else - atomic_set(&vdisk->ios_threshold, IOS_ERROR_THRESHOLD); + seqnum32_set(&vdisk->ios_threshold, IOS_ERROR_THRESHOLD); } rtn = forward_taskmgmt_command(TASK_MGMT_BUS_RESET, scsidev); if (rtn == SUCCESS) { @@ -803,9 +804,9 @@ static void do_scsi_linuxstat(struct uiscmdrsp *cmdrsp, return; /* Okay see what our error_count is here.... */ vdisk = scsidev->hostdata; - if (atomic_read(&vdisk->error_count) < VISORHBA_ERROR_COUNT) { - atomic_inc(&vdisk->error_count); - atomic_set(&vdisk->ios_threshold, IOS_ERROR_THRESHOLD); + if (seqnum32_read(&vdisk->error_count) < VISORHBA_ERROR_COUNT) { + seqnum32_inc(&vdisk->error_count); + seqnum32_set(&vdisk->ios_threshold, IOS_ERROR_THRESHOLD); } } @@ -881,10 +882,10 @@ static void do_scsi_nolinuxstat(struct uiscmdrsp *cmdrsp, kfree(buf); } else { vdisk = scsidev->hostdata; - if (atomic_read(&vdisk->ios_threshold) > 0) { - atomic_dec(&vdisk->ios_threshold); - if (atomic_read(&vdisk->ios_threshold) == 0) - atomic_set(&vdisk->error_count, 0); + if (seqnum32_read(&vdisk->ios_threshold) > 0) { + seqnum32_dec(&vdisk->ios_threshold); + if (seqnum32_read(&vdisk->ios_threshold) == 0) + seqnum32_set(&vdisk->error_count, 0); } } } -- 2.27.0 _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel