Skip to content

loop: defer the queue limits clear to a workqueue - #151

Open
blktests-ci-block-trial[bot] wants to merge 1 commit into
master_basefrom
series/737=>master
Open

loop: defer the queue limits clear to a workqueue#151
blktests-ci-block-trial[bot] wants to merge 1 commit into
master_basefrom
series/737=>master

Conversation

@blktests-ci-block-trial

Copy link
Copy Markdown

Pull request for series with
subject: loop: defer the queue limits clear to a workqueue
version: 1
url: http://redsun45:8000/project/linux-block/list/?series=737

@blktests-ci-block-trial

Copy link
Copy Markdown
Author

Upstream branch: 1b78070
series: http://redsun45:8000/project/linux-block/list/?series=737
version: 1

@blktests-ci-block-trial

Copy link
Copy Markdown
Author

Upstream branch: c20313e
series: http://redsun45:8000/project/linux-block/list/?series=737
version: 1

@blktests-ci-block-trial

Copy link
Copy Markdown
Author

Upstream branch: 548e7bc
series: http://redsun45:8000/project/linux-block/list/?series=737
version: 1

@blktests-ci-block-trial

Copy link
Copy Markdown
Author

Upstream branch: cf72cbb
series: http://redsun45:8000/project/linux-block/list/?series=737
version: 1

@blktests-ci-block-trial

Copy link
Copy Markdown
Author

Upstream branch: cf72cbb
series: http://redsun45:8000/project/linux-block/list/?series=737
version: 1

@blktests-ci-block-trial

Copy link
Copy Markdown
Author

Upstream branch: cf72cbb
series: http://redsun45:8000/project/linux-block/list/?series=737
version: 1

@blktests-ci-block-trial

Copy link
Copy Markdown
Author

Upstream branch: 08dbfad
series: http://redsun45:8000/project/linux-block/list/?series=737
version: 1

@blktests-ci-block-trial

Copy link
Copy Markdown
Author

Upstream branch: a23cbb0
series: http://redsun45:8000/project/linux-block/list/?series=737
version: 1

@blktests-ci-block-trial

Copy link
Copy Markdown
Author

Upstream branch: 78bb208
series: http://redsun45:8000/project/linux-block/list/?series=737
version: 1

@blktests-ci-block-trial

Copy link
Copy Markdown
Author

Upstream branch: 786262b
series: http://redsun45:8000/project/linux-block/list/?series=737
version: 1

@blktests-ci-block-trial

Copy link
Copy Markdown
Author

Upstream branch: 786262b
series: http://redsun45:8000/project/linux-block/list/?series=737
version: 1

@blktests-ci-block-trial

Copy link
Copy Markdown
Author

Upstream branch: 89a3129
series: http://redsun45:8000/project/linux-block/list/?series=737
version: 1

@blktests-ci-block-trial

Copy link
Copy Markdown
Author

Upstream branch: 89a3129
series: http://redsun45:8000/project/linux-block/list/?series=778
version: 2

@blktests-ci-block-trial

Copy link
Copy Markdown
Author

Upstream branch: 940de59
series: http://redsun45:8000/project/linux-block/list/?series=778
version: 2

@blktests-ci-block-trial

Copy link
Copy Markdown
Author

Upstream branch: 940de59
series: http://redsun45:8000/project/linux-block/list/?series=786
version: 3

@blktests-ci-block-trial

Copy link
Copy Markdown
Author

Upstream branch: 841e384
series: http://redsun45:8000/project/linux-block/list/?series=786
version: 3

loop_clear_limits() calls queue_limits_commit_update() directly from
the loop workqueue that processes the request.  That does a
non-atomic struct assignment to q->limits without freezing the queue,
which races with lockless readers of q->limits on other CPUs - bio
splitting reads max_hw_sectors, the discard path reads
max_hw_discard_sectors - and can let them observe torn values.  The
trigger is a discard or write-zeroes request on a loop device whose
backing file does not support the corresponding fallocate operation.

The code already has an XXX comment saying this should move to a
workqueue.  Do that: schedule a work item on the system workqueue, where
it is safe to freeze the queue around the limits update.  Accumulate
pending modes in lo->clear_limits_mode so that failures between
scheduling and execution of the work item are not lost.  A rebinding of
the device drops the accumulated modes and invalidates an already
scheduled work item, so a stale clear cannot hit the new backing file.
The work item is cancelled before the device is freed.

Signed-off-by: Tao Cui <cuitao@kylinos.cn>
@blktests-ci-block-trial

Copy link
Copy Markdown
Author

Upstream branch: a500db7
series: http://redsun45:8000/project/linux-block/list/?series=786
version: 3

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants