On Fri, Feb 10, 2017 at 05:08:54PM +1100, NeilBrown wrote:
I must say that I don't really like this approach.
Temporarily modifying ->bi_private and ->bi_end_io seems
.... intrusive. I suspect it works, but I wonder if it is really
robust in the long term.
How about a different approach.. Your main concern with my first patch
was that it called md_write_start() and md_write_end() much more often,
and these performed atomic ops on "global" variables, particular
writes_pending.
We could change writes_pending to a per-cpu array which we only count
occasionally when needed. As writes_pending is updated often and
checked rarely, a per-cpu array which is summed on demand seems
appropriate.
FYI, I much prefer you original approach, it's much closer to how
the rest of the block stack works.