I will apply the v1, aka "Add blk_mq_tag_set shared_tags check", and
fix the "runtime get BLK_MQ_F_TAG_HCTX_SHARED" later, since v3 has
some problems and we are running out of time before release.
On Thu, Nov 20, 2025 at 4:25 PM Tao Liu <ltao(a)redhat.com> wrote:
>
> On Thu, Nov 20, 2025 at 3:56 PM lijiang <lijiang(a)redhat.com> wrote:
> >
> > On Thu, Nov 20, 2025 at 4:37 AM Tao Liu <ltao(a)redhat.com> wrote:
> >>
> >> Hi lianbo,
> >>
> >> On Wed, Nov 19, 2025 at 10:31 PM lijiang <lijiang(a)redhat.com> wrote:
> >> >
> >> > On Wed, Nov 19, 2025 at 12:51 PM
<devel-request(a)lists.crash-utility.osci.io> wrote:
> >> >>
> >> >> Date: Wed, 19 Nov 2025 15:36:29 +1300
> >> >> From: Tao Liu <ltao(a)redhat.com>
> >> >> Subject: [Crash-utility] [PATCH] Add blk_mq_tag_set shared_tags
check
> >> >> To: devel(a)lists.crash-utility.osci.io
> >> >> Cc: Tao Liu <ltao(a)redhat.com>
> >> >> Message-ID: <20251119023628.15998-2-ltao(a)redhat.com>
> >> >> Content-Type: text/plain; charset="US-ASCII";
x-default=true
> >> >>
> >> >> A regression of cmd dev -d/-D noticed on some vmcores as:
> >> >>
> >> >> dev: invalid structure member offset:
blk_mq_tag_set_shared_tags
> >> >> FILE: dev.c LINE: 4468 FUNCTION:
blk_mq_queue_tag_busy_iter()
> >> >>
> >> >> MAJOR GENDISK NAME REQUEST_QUEUE TOTAL
ASYNC SYNC
> >> >> [crash] error trace: 91aa85 => 91a552 => 94d6ba =>
94d647
> >> >>
> >> >> 94d647: OFFSET_verify.part.0+55
> >> >> 94d6ba: OFFSET_verify+42
> >> >> 91a552: get_diskio_1+2194
> >> >> 91aa85: display_all_diskio+1253
> >> >>
> >> >> The root cause is, though upstream kernel have defined
BLK_MQ_F_TAG_HCTX_SHARED
> >> >> as (1 << 3), the value might be set different, e.g. [1]. So
a single
> >> >
> >> >
> >> > We should be able to get the value of BLK_MQ_F_TAG_HCTX_SHARED via
the dump_enumerator_list(), and then test it in the following function:
> >>
> >> Please see [1], I removed (1<<3) and resolved it at runtime.
> >> dump_enumerator_list() is not appropriate, but I used
> >> arg_to_datatype().
> >
> >
> > Can you try the enumerator_value()? Looks more appropriate. E.g:
> >
> > enumerator_value("BLK_MQ_F_TAG_HCTX_SHARED", &value);
>
> Sure, looks better.
>
> Please see v3:
https://www.mail-archive.com/devel@lists.crash-utility.osci.io/msg01845.html
>
> Thanks,
> Tao Liu
>
> >
> >
> > Thanks
> > Lianbo
> >
> >> In dump_enumerator_list("BLK_MQ_F_TAG_HCTX_SHARED"),
> >>
> >> if (!arg_to_datatype(e, dm, RETURN_ON_ERROR) ||
> >> (dm->size < 0) || (dm->type != ENUM) || dm->tagname)
> >>
> >> dm->tagname is not NULL and will make dump_enumerator_list return
false:
> >>
> >> (gdb) p dm
> >> $1 = {name = 0xe4911b "BLK_MQ_F_TAG_HCTX_SHARED", member = 0x0,
type =
> >> 8192, size = 0, member_offset = 0, member_size = 0,
> >> member_typecode = 0, flags = 0, tagname = 0xd41dfd
"(unknown)",
> >> value = 8, vaddr = 0}
> >>
> >> [1]:
https://www.mail-archive.com/devel@lists.crash-utility.osci.io/msg01841.html
> >>
> >> >
> >> > static bool blk_mq_is_shared_tags(unsigned int flags)
> >> > {
> >> > return flags & BLK_MQ_F_TAG_HCTX_SHARED;
> >> > }
> >> >
> >> > That can follow the changes once the upstream kernel modifies the
value.
> >> >
> >> >> blk_mq_is_shared_tags() check is not sufficient. This patch will
add shared_tagsblk_mq_is_shared_tags() check is not sufficient. This patch will add
shared_tags
> >> >> member check within blk_mq_tag_set struct as an enhancment.
> >> >
> >> >
> >> > Anyway, this change looks good, so: Ack
> >> >
> >> > Lianbo
> >> >
> >> >> [1]:
https://gitlab.com/redhat/centos-stream/src/kernel/centos-stream-8/-/blob...
> >> >>
> >> >> Fixes: 62486400d35b ("Add blk_mq shared tags support for dev
-d/-D")
> >> >> Signed-off-by: Tao Liu <ltao(a)redhat.com>
> >> >> ---
> >> >> dev.c | 2 +-
> >> >> 1 file changed, 1 insertion(+), 1 deletion(-)
> >> >>
> >> >> diff --git a/dev.c b/dev.c
> >> >> index 8391d71..27318e8 100644
> >> >> --- a/dev.c
> >> >> +++ b/dev.c
> >> >> @@ -4464,7 +4464,7 @@ static void blk_mq_queue_tag_busy_iter(ulong
q, ulong *hctx, uint cnt,
> >> >> readmem(addr + OFFSET(blk_mq_tag_set_flags), KVADDR,
> >> >> &flags, sizeof(uint),
"blk_mq_tag_set.flags", RETURN_ON_ERROR);
> >> >>
> >> >> - if (blk_mq_is_shared_tags(flags)) {
> >> >> + if (blk_mq_is_shared_tags(flags) &&
VALID_MEMBER(blk_mq_tag_set_shared_tags)) {
> >> >> addr = addr + OFFSET(blk_mq_tag_set_shared_tags);
> >> >> queue_for_each_hw_ctx(q, addr, bitmap_tags_is_ptr,
dio);
> >> >> return;
> >> >> --
> >> >> 2.47.0
> >>