Thread (7 messages) 7 messages, 3 authors, 2023-09-13

Re: [PATCH v2] md: do not _put wrong device in md_seq_next

From: Mariusz Tkaczyk <hidden>
Date: 2023-09-12 13:40:19

On Tue, 12 Sep 2023 21:25:24 +0800
Yu Kuai [off-list ref] wrote:
Hi,

在 2023/09/12 21:01, Mariusz Tkaczyk 写道:
quoted
During working on changes proposed by Kuai [1], I determined that
mddev->active is continusly decremented for array marked by MD_CLOSING.
It brought me to md_seq_next() changed by [2]. I determined the regression
here, if mddev_get() fails we updated mddev pointer and as a result we
_put failed device.  
This mddev is decremented while there is another mddev increased, that's
why AceLan said that single array can't reporduce the problem.

And because mddev->active is leaked, then del_gendisk() will never be
called for the mddev while closing the array, that's why user will
always see this array, cause infiniate loop open -> stop array -> close
for systemd-shutdown.
Ohh, I see the scenario now...
First array can be successfully stopped. We marked MD_DELETED and proceed
with scheduling wq but in the middle of that md_seq_next() increased active for
other array and decrement active for the one with MD_DELETED.
For this next array we are unable to reach active == 0 anymore.

Song, let me know if you need description like that in commit message.

Thanks!
Mariusz
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help