Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3fa841d7 authored by NeilBrown's avatar NeilBrown
Browse files

md: report device as congested when suspended



This should writeback from coming when the device is temporarily
suspended.

Signed-off-by: default avatarNeilBrown <neilb@suse.de>
parent 0da3c619
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -108,6 +108,9 @@ static int linear_congested(void *data, int bits)
	linear_conf_t *conf;
	int i, ret = 0;

	if (mddev_congested(mddev, bits))
		return 1;

	rcu_read_lock();
	conf = rcu_dereference(mddev->private);

+6 −0
Original line number Diff line number Diff line
@@ -262,6 +262,12 @@ static void mddev_resume(mddev_t *mddev)
	mddev->pers->quiesce(mddev, 0);
}

int mddev_congested(mddev_t *mddev, int bits)
{
	return mddev->suspended;
}
EXPORT_SYMBOL(mddev_congested);


static inline mddev_t *mddev_get(mddev_t *mddev)
{
+1 −0
Original line number Diff line number Diff line
@@ -430,6 +430,7 @@ extern void md_write_end(mddev_t *mddev);
extern void md_done_sync(mddev_t *mddev, int blocks, int ok);
extern void md_error(mddev_t *mddev, mdk_rdev_t *rdev);

extern int mddev_congested(mddev_t *mddev, int bits);
extern void md_super_write(mddev_t *mddev, mdk_rdev_t *rdev,
			   sector_t sector, int size, struct page *page);
extern void md_super_wait(mddev_t *mddev);
+3 −0
Original line number Diff line number Diff line
@@ -199,6 +199,9 @@ static int multipath_congested(void *data, int bits)
	multipath_conf_t *conf = mddev->private;
	int i, ret = 0;

	if (mddev_congested(mddev, bits))
		return 1;

	rcu_read_lock();
	for (i = 0; i < mddev->raid_disks ; i++) {
		mdk_rdev_t *rdev = rcu_dereference(conf->multipaths[i].rdev);
+3 −0
Original line number Diff line number Diff line
@@ -44,6 +44,9 @@ static int raid0_congested(void *data, int bits)
	mdk_rdev_t **devlist = conf->devlist;
	int i, ret = 0;

	if (mddev_congested(mddev, bits))
		return 1;

	for (i = 0; i < mddev->raid_disks && !ret ; i++) {
		struct request_queue *q = bdev_get_queue(devlist[i]->bdev);

Loading