On 11/06/2026 21:53, David Ahern wrote:
On 6/8/26 11:39 PM, Tariq Toukan wrote:@@ -9010,13 +9029,29 @@ static int cmd_resource_show(struct dl *dl) uint16_t flags = NLM_F_REQUEST | NLM_F_ACK; struct nlmsghdr *nlh; struct resource_ctx resource_ctx = {}; + struct dl_opts *opts = &dl->opts; int err; - err = dl_argv_parse_with_selector(dl, &flags, DEVLINK_CMD_RESOURCE_DUMP, - DL_OPT_HANDLE | DL_OPT_HANDLEP, - 0, 0, 0); - if (err) - return err; + if (dl_argv_match(dl, "scope")) { + const char *scopestr; + + dl_arg_inc(dl); + err = dl_argv_str(dl, &scopestr); + if (err) + return err; + err = resource_scope_get(scopestr, &opts->resource_scope_mask); + if (err) + return err; + opts->present |= DL_OPT_RESOURCE_SCOPE;Comment from Claude that seems legit: Issue found: In cmd_resource_show, the scope path sets opts->present |= DL_OPT_RESOURCE_SCOPE without first clearing opts->present. In batch mode, dl->opts is shared across commands, and the non-scope path correctly resets opts->present via dl_argv_parse(). But the scope path bypasses dl_argv_parse(), so stale bits (e.g. DL_OPT_HANDLE from a previous dev show) remain. When dl_opts_put() runs, it writes the stale DEVLINK_ATTR_BUS_NAME/DEV_NAME attributes into the dump request, silently filtering to a single device instead of all devices. Fix: use = instead of |= Are you ok with the suggested resolution?
yes, thank you. let me know if I should resend.

