mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-04 20:19:47 +08:00
badblocks: return boolean from badblocks_set() and badblocks_clear()
Change the return type of badblocks_set() and badblocks_clear() from int to bool, indicating success or failure. Specifically: - _badblocks_set() and _badblocks_clear() functions now return true for success and false for failure. - All calls to these functions are updated to handle the new boolean return type. - This change improves code clarity and ensures a more consistent handling of success and failure states. Signed-off-by: Zheng Qixing <zhengqixing@huawei.com> Reviewed-by: Yu Kuai <yukuai3@huawei.com> Acked-by: Coly Li <colyli@kernel.org> Acked-by: Ira Weiny <ira.weiny@intel.com> Link: https://lore.kernel.org/r/20250227075507.151331-11-zhengqixing@huaweicloud.com Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
5236f041fa
commit
c8775aefba
@ -836,8 +836,8 @@ static bool try_adjacent_combine(struct badblocks *bb, int prev)
|
||||
}
|
||||
|
||||
/* Do exact work to set bad block range into the bad block table */
|
||||
static int _badblocks_set(struct badblocks *bb, sector_t s, int sectors,
|
||||
int acknowledged)
|
||||
static bool _badblocks_set(struct badblocks *bb, sector_t s, int sectors,
|
||||
int acknowledged)
|
||||
{
|
||||
int len = 0, added = 0;
|
||||
struct badblocks_context bad;
|
||||
@ -847,11 +847,11 @@ static int _badblocks_set(struct badblocks *bb, sector_t s, int sectors,
|
||||
|
||||
if (bb->shift < 0)
|
||||
/* badblocks are disabled */
|
||||
return 1;
|
||||
return false;
|
||||
|
||||
if (sectors == 0)
|
||||
/* Invalid sectors number */
|
||||
return 1;
|
||||
return false;
|
||||
|
||||
if (bb->shift) {
|
||||
/* round the start down, and the end up */
|
||||
@ -977,7 +977,7 @@ out:
|
||||
|
||||
write_sequnlock_irqrestore(&bb->lock, flags);
|
||||
|
||||
return sectors;
|
||||
return sectors == 0;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -1048,21 +1048,20 @@ static int front_splitting_clear(struct badblocks *bb, int prev,
|
||||
}
|
||||
|
||||
/* Do the exact work to clear bad block range from the bad block table */
|
||||
static int _badblocks_clear(struct badblocks *bb, sector_t s, int sectors)
|
||||
static bool _badblocks_clear(struct badblocks *bb, sector_t s, int sectors)
|
||||
{
|
||||
struct badblocks_context bad;
|
||||
int prev = -1, hint = -1;
|
||||
int len = 0, cleared = 0;
|
||||
int rv = 0;
|
||||
u64 *p;
|
||||
|
||||
if (bb->shift < 0)
|
||||
/* badblocks are disabled */
|
||||
return 1;
|
||||
return false;
|
||||
|
||||
if (sectors == 0)
|
||||
/* Invalid sectors number */
|
||||
return 1;
|
||||
return false;
|
||||
|
||||
if (bb->shift) {
|
||||
sector_t target;
|
||||
@ -1182,9 +1181,9 @@ update_sectors:
|
||||
write_sequnlock_irq(&bb->lock);
|
||||
|
||||
if (!cleared)
|
||||
rv = 1;
|
||||
return false;
|
||||
|
||||
return rv;
|
||||
return true;
|
||||
}
|
||||
|
||||
/* Do the exact work to check bad blocks range from the bad block table */
|
||||
@ -1338,12 +1337,12 @@ EXPORT_SYMBOL_GPL(badblocks_check);
|
||||
* decide how best to handle it.
|
||||
*
|
||||
* Return:
|
||||
* 0: success
|
||||
* other: failed to set badblocks (out of space). Parital setting will be
|
||||
* true: success
|
||||
* false: failed to set badblocks (out of space). Parital setting will be
|
||||
* treated as failure.
|
||||
*/
|
||||
int badblocks_set(struct badblocks *bb, sector_t s, int sectors,
|
||||
int acknowledged)
|
||||
bool badblocks_set(struct badblocks *bb, sector_t s, int sectors,
|
||||
int acknowledged)
|
||||
{
|
||||
return _badblocks_set(bb, s, sectors, acknowledged);
|
||||
}
|
||||
@ -1360,10 +1359,10 @@ EXPORT_SYMBOL_GPL(badblocks_set);
|
||||
* drop the remove request.
|
||||
*
|
||||
* Return:
|
||||
* 0: success
|
||||
* 1: failed to clear badblocks
|
||||
* true: success
|
||||
* false: failed to clear badblocks
|
||||
*/
|
||||
int badblocks_clear(struct badblocks *bb, sector_t s, int sectors)
|
||||
bool badblocks_clear(struct badblocks *bb, sector_t s, int sectors)
|
||||
{
|
||||
return _badblocks_clear(bb, s, sectors);
|
||||
}
|
||||
@ -1485,10 +1484,10 @@ ssize_t badblocks_store(struct badblocks *bb, const char *page, size_t len,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (badblocks_set(bb, sector, length, !unack))
|
||||
if (!badblocks_set(bb, sector, length, !unack))
|
||||
return -ENOSPC;
|
||||
else
|
||||
return len;
|
||||
|
||||
return len;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(badblocks_store);
|
||||
|
||||
|
@ -561,14 +561,14 @@ static ssize_t nullb_device_badblocks_store(struct config_item *item,
|
||||
goto out;
|
||||
/* enable badblocks */
|
||||
cmpxchg(&t_dev->badblocks.shift, -1, 0);
|
||||
if (buf[0] == '+')
|
||||
ret = badblocks_set(&t_dev->badblocks, start,
|
||||
end - start + 1, 1);
|
||||
else
|
||||
ret = badblocks_clear(&t_dev->badblocks, start,
|
||||
end - start + 1);
|
||||
if (ret == 0)
|
||||
if (buf[0] == '+') {
|
||||
if (badblocks_set(&t_dev->badblocks, start,
|
||||
end - start + 1, 1))
|
||||
ret = count;
|
||||
} else if (badblocks_clear(&t_dev->badblocks, start,
|
||||
end - start + 1)) {
|
||||
ret = count;
|
||||
}
|
||||
out:
|
||||
kfree(orig);
|
||||
return ret;
|
||||
|
@ -1748,7 +1748,7 @@ static int super_1_load(struct md_rdev *rdev, struct md_rdev *refdev, int minor_
|
||||
count <<= sb->bblog_shift;
|
||||
if (bb + 1 == 0)
|
||||
break;
|
||||
if (badblocks_set(&rdev->badblocks, sector, count, 1))
|
||||
if (!badblocks_set(&rdev->badblocks, sector, count, 1))
|
||||
return -EINVAL;
|
||||
}
|
||||
} else if (sb->bblog_offset != 0)
|
||||
@ -9833,7 +9833,6 @@ int rdev_set_badblocks(struct md_rdev *rdev, sector_t s, int sectors,
|
||||
int is_new)
|
||||
{
|
||||
struct mddev *mddev = rdev->mddev;
|
||||
int rv;
|
||||
|
||||
/*
|
||||
* Recording new badblocks for faulty rdev will force unnecessary
|
||||
@ -9849,33 +9848,35 @@ int rdev_set_badblocks(struct md_rdev *rdev, sector_t s, int sectors,
|
||||
s += rdev->new_data_offset;
|
||||
else
|
||||
s += rdev->data_offset;
|
||||
rv = badblocks_set(&rdev->badblocks, s, sectors, 0);
|
||||
if (rv == 0) {
|
||||
/* Make sure they get written out promptly */
|
||||
if (test_bit(ExternalBbl, &rdev->flags))
|
||||
sysfs_notify_dirent_safe(rdev->sysfs_unack_badblocks);
|
||||
sysfs_notify_dirent_safe(rdev->sysfs_state);
|
||||
set_mask_bits(&mddev->sb_flags, 0,
|
||||
BIT(MD_SB_CHANGE_CLEAN) | BIT(MD_SB_CHANGE_PENDING));
|
||||
md_wakeup_thread(rdev->mddev->thread);
|
||||
return 1;
|
||||
} else
|
||||
|
||||
if (!badblocks_set(&rdev->badblocks, s, sectors, 0))
|
||||
return 0;
|
||||
|
||||
/* Make sure they get written out promptly */
|
||||
if (test_bit(ExternalBbl, &rdev->flags))
|
||||
sysfs_notify_dirent_safe(rdev->sysfs_unack_badblocks);
|
||||
sysfs_notify_dirent_safe(rdev->sysfs_state);
|
||||
set_mask_bits(&mddev->sb_flags, 0,
|
||||
BIT(MD_SB_CHANGE_CLEAN) | BIT(MD_SB_CHANGE_PENDING));
|
||||
md_wakeup_thread(rdev->mddev->thread);
|
||||
return 1;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(rdev_set_badblocks);
|
||||
|
||||
int rdev_clear_badblocks(struct md_rdev *rdev, sector_t s, int sectors,
|
||||
int is_new)
|
||||
{
|
||||
int rv;
|
||||
if (is_new)
|
||||
s += rdev->new_data_offset;
|
||||
else
|
||||
s += rdev->data_offset;
|
||||
rv = badblocks_clear(&rdev->badblocks, s, sectors);
|
||||
if ((rv == 0) && test_bit(ExternalBbl, &rdev->flags))
|
||||
|
||||
if (!badblocks_clear(&rdev->badblocks, s, sectors))
|
||||
return 0;
|
||||
|
||||
if (test_bit(ExternalBbl, &rdev->flags))
|
||||
sysfs_notify_dirent_safe(rdev->sysfs_badblocks);
|
||||
return rv;
|
||||
return 1;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(rdev_clear_badblocks);
|
||||
|
||||
|
@ -167,7 +167,7 @@ static void set_badblock(struct badblocks *bb, sector_t s, int num)
|
||||
dev_dbg(bb->dev, "Found a bad range (0x%llx, 0x%llx)\n",
|
||||
(u64) s * 512, (u64) num * 512);
|
||||
/* this isn't an error as the hardware will still throw an exception */
|
||||
if (badblocks_set(bb, s, num, 1))
|
||||
if (!badblocks_set(bb, s, num, 1))
|
||||
dev_info_once(bb->dev, "%s: failed for sector %llx\n",
|
||||
__func__, (u64) s);
|
||||
}
|
||||
|
@ -50,9 +50,9 @@ struct badblocks_context {
|
||||
|
||||
int badblocks_check(struct badblocks *bb, sector_t s, int sectors,
|
||||
sector_t *first_bad, int *bad_sectors);
|
||||
int badblocks_set(struct badblocks *bb, sector_t s, int sectors,
|
||||
int acknowledged);
|
||||
int badblocks_clear(struct badblocks *bb, sector_t s, int sectors);
|
||||
bool badblocks_set(struct badblocks *bb, sector_t s, int sectors,
|
||||
int acknowledged);
|
||||
bool badblocks_clear(struct badblocks *bb, sector_t s, int sectors);
|
||||
void ack_all_badblocks(struct badblocks *bb);
|
||||
ssize_t badblocks_show(struct badblocks *bb, char *page, int unack);
|
||||
ssize_t badblocks_store(struct badblocks *bb, const char *page, size_t len,
|
||||
|
Loading…
Reference in New Issue
Block a user