diff mbox series

[ndctl,v2,2/4] ndctl, inject-smart: switch to ndctl_cmd_submit_xlat

Message ID 20190112013035.32087-3-vishal.l.verma@intel.com (mailing list archive)
State Superseded
Headers show
Series Add missing firmware_status checks | expand

Commit Message

Verma, Vishal L Jan. 12, 2019, 1:30 a.m. UTC
The ndctl inject-smart command was neglecting to check the
'firmware_status' field that is set by the platform firmware to indicate
failure. Use the new ndctl_cmd_submit_xlat facility to include the
firmware_status check as part of the command submission.

Reported-by: Ami Pathak <ami.g.pathak@intel.com>
Cc: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: Vishal Verma <vishal.l.verma@intel.com>
---
 ndctl/inject-smart.c    | 16 ++++++++--------
 ndctl/util/json-smart.c |  8 ++++----
 2 files changed, 12 insertions(+), 12 deletions(-)

Comments

Dan Williams Jan. 12, 2019, 1:58 a.m. UTC | #1
On Fri, Jan 11, 2019 at 5:31 PM Vishal Verma <vishal.l.verma@intel.com> wrote:
>
> The ndctl inject-smart command was neglecting to check the
> 'firmware_status' field that is set by the platform firmware to indicate
> failure. Use the new ndctl_cmd_submit_xlat facility to include the
> firmware_status check as part of the command submission.
>
> Reported-by: Ami Pathak <ami.g.pathak@intel.com>
> Cc: Dan Williams <dan.j.williams@intel.com>
> Signed-off-by: Vishal Verma <vishal.l.verma@intel.com>
[..]
> diff --git a/ndctl/util/json-smart.c b/ndctl/util/json-smart.c
> index 3c1b917..92a9313 100644
> --- a/ndctl/util/json-smart.c
> +++ b/ndctl/util/json-smart.c
> @@ -30,8 +30,8 @@ static void smart_threshold_to_json(struct ndctl_dimm *dimm,
>         if (!cmd)
>                 return;
>
> -       rc = ndctl_cmd_submit(cmd);
> -       if (rc || ndctl_cmd_get_firmware_status(cmd))
> +       rc = ndctl_cmd_submit_xlat(cmd);
> +       if ((rc < 0) || ndctl_cmd_get_firmware_status(cmd))
>                 goto out;

Can't we just do:

rc = ndctl_cmd_submit_xlat(cmd);
if (rc < 0)
    goto out;

...and drop the open coded ndctl_cmd_get_firmware_status()?

In general it seems like most users of ndctl_cmd_get_firmware_status()
would be happy with ndctl_cmd_submit_xlat() instead.
Verma, Vishal L Jan. 12, 2019, 2:03 a.m. UTC | #2
On Fri, 2019-01-11 at 17:58 -0800, Dan Williams wrote:
> On Fri, Jan 11, 2019 at 5:31 PM Vishal Verma <
> vishal.l.verma@intel.com> wrote:
> > 
> > The ndctl inject-smart command was neglecting to check the
> > 'firmware_status' field that is set by the platform firmware to
> > indicate
> > failure. Use the new ndctl_cmd_submit_xlat facility to include the
> > firmware_status check as part of the command submission.
> > 
> > Reported-by: Ami Pathak <ami.g.pathak@intel.com>
> > Cc: Dan Williams <dan.j.williams@intel.com>
> > Signed-off-by: Vishal Verma <vishal.l.verma@intel.com>
> 
> [..]
> > diff --git a/ndctl/util/json-smart.c b/ndctl/util/json-smart.c
> > index 3c1b917..92a9313 100644
> > --- a/ndctl/util/json-smart.c
> > +++ b/ndctl/util/json-smart.c
> > @@ -30,8 +30,8 @@ static void smart_threshold_to_json(struct
> > ndctl_dimm *dimm,
> >         if (!cmd)
> >                 return;
> > 
> > -       rc = ndctl_cmd_submit(cmd);
> > -       if (rc || ndctl_cmd_get_firmware_status(cmd))
> > +       rc = ndctl_cmd_submit_xlat(cmd);
> > +       if ((rc < 0) || ndctl_cmd_get_firmware_status(cmd))
> >                 goto out;
> 
> Can't we just do:
> 
> rc = ndctl_cmd_submit_xlat(cmd);
> if (rc < 0)
>     goto out;
> 
> ...and drop the open coded ndctl_cmd_get_firmware_status()?
> 
> In general it seems like most users of
> ndctl_cmd_get_firmware_status()
> would be happy with ndctl_cmd_submit_xlat() instead.

Yes good catch - I'll see where else we can make this change and
respin. The users of ndctl_cmd_get_firmware_status that use ACPI DSMs
probably still stay since _xlat, at least for now, only handles
commands that are defined in dimm_ops.
Dan Williams Jan. 12, 2019, 2:05 a.m. UTC | #3
On Fri, Jan 11, 2019 at 6:03 PM Verma, Vishal L
<vishal.l.verma@intel.com> wrote:
>
>
> On Fri, 2019-01-11 at 17:58 -0800, Dan Williams wrote:
> > On Fri, Jan 11, 2019 at 5:31 PM Vishal Verma <
> > vishal.l.verma@intel.com> wrote:
> > >
> > > The ndctl inject-smart command was neglecting to check the
> > > 'firmware_status' field that is set by the platform firmware to
> > > indicate
> > > failure. Use the new ndctl_cmd_submit_xlat facility to include the
> > > firmware_status check as part of the command submission.
> > >
> > > Reported-by: Ami Pathak <ami.g.pathak@intel.com>
> > > Cc: Dan Williams <dan.j.williams@intel.com>
> > > Signed-off-by: Vishal Verma <vishal.l.verma@intel.com>
> >
> > [..]
> > > diff --git a/ndctl/util/json-smart.c b/ndctl/util/json-smart.c
> > > index 3c1b917..92a9313 100644
> > > --- a/ndctl/util/json-smart.c
> > > +++ b/ndctl/util/json-smart.c
> > > @@ -30,8 +30,8 @@ static void smart_threshold_to_json(struct
> > > ndctl_dimm *dimm,
> > >         if (!cmd)
> > >                 return;
> > >
> > > -       rc = ndctl_cmd_submit(cmd);
> > > -       if (rc || ndctl_cmd_get_firmware_status(cmd))
> > > +       rc = ndctl_cmd_submit_xlat(cmd);
> > > +       if ((rc < 0) || ndctl_cmd_get_firmware_status(cmd))
> > >                 goto out;
> >
> > Can't we just do:
> >
> > rc = ndctl_cmd_submit_xlat(cmd);
> > if (rc < 0)
> >     goto out;
> >
> > ...and drop the open coded ndctl_cmd_get_firmware_status()?
> >
> > In general it seems like most users of
> > ndctl_cmd_get_firmware_status()
> > would be happy with ndctl_cmd_submit_xlat() instead.
>
> Yes good catch - I'll see where else we can make this change and
> respin. The users of ndctl_cmd_get_firmware_status that use ACPI DSMs
> probably still stay since _xlat, at least for now, only handles
> commands that are defined in dimm_ops.
>

Ah true, good point.
diff mbox series

Patch

diff --git a/ndctl/inject-smart.c b/ndctl/inject-smart.c
index eaa137a..00c81b8 100644
--- a/ndctl/inject-smart.c
+++ b/ndctl/inject-smart.c
@@ -280,8 +280,8 @@  static int smart_set_thresh(struct ndctl_dimm *dimm)
 		goto out;
 	}
 
-	rc = ndctl_cmd_submit(st_cmd);
-	if (rc) {
+	rc = ndctl_cmd_submit_xlat(st_cmd);
+	if (rc < 0) {
 		error("%s: smart threshold command failed: %s (%d)\n",
 			name, strerror(abs(rc)), rc);
 		goto out;
@@ -320,8 +320,8 @@  static int smart_set_thresh(struct ndctl_dimm *dimm)
 		ndctl_cmd_smart_threshold_set_alarm_control(sst_cmd, alarm);
 	}
 
-	rc = ndctl_cmd_submit(sst_cmd);
-	if (rc)
+	rc = ndctl_cmd_submit_xlat(sst_cmd);
+	if (rc < 0)
 		error("%s: smart set threshold command failed: %s (%d)\n",
 			name, strerror(abs(rc)), rc);
 
@@ -351,8 +351,8 @@  out:
 			if (sctx.err_continue == false) \
 				goto out; \
 		} \
-		rc = ndctl_cmd_submit(si_cmd); \
-		if (rc) { \
+		rc = ndctl_cmd_submit_xlat(si_cmd); \
+		if (rc < 0) { \
 			error("%s: smart inject %s command failed: %s (%d)\n", \
 				name, #arg, strerror(abs(rc)), rc); \
 			if (sctx.err_continue == false) \
@@ -382,8 +382,8 @@  out:
 			if (sctx.err_continue == false) \
 				goto out; \
 		} \
-		rc = ndctl_cmd_submit(si_cmd); \
-		if (rc) { \
+		rc = ndctl_cmd_submit_xlat(si_cmd); \
+		if (rc < 0) { \
 			error("%s: smart inject %s command failed: %s (%d)\n", \
 				name, #arg, strerror(abs(rc)), rc); \
 			if (sctx.err_continue == false) \
diff --git a/ndctl/util/json-smart.c b/ndctl/util/json-smart.c
index 3c1b917..92a9313 100644
--- a/ndctl/util/json-smart.c
+++ b/ndctl/util/json-smart.c
@@ -30,8 +30,8 @@  static void smart_threshold_to_json(struct ndctl_dimm *dimm,
 	if (!cmd)
 		return;
 
-	rc = ndctl_cmd_submit(cmd);
-	if (rc || ndctl_cmd_get_firmware_status(cmd))
+	rc = ndctl_cmd_submit_xlat(cmd);
+	if ((rc < 0) || ndctl_cmd_get_firmware_status(cmd))
 		goto out;
 
 	alarm_control = ndctl_cmd_smart_threshold_get_alarm_control(cmd);
@@ -115,8 +115,8 @@  struct json_object *util_dimm_health_to_json(struct ndctl_dimm *dimm)
 	if (!cmd)
 		goto err;
 
-	rc = ndctl_cmd_submit(cmd);
-	if (rc || ndctl_cmd_get_firmware_status(cmd)) {
+	rc = ndctl_cmd_submit_xlat(cmd);
+	if ((rc < 0) || ndctl_cmd_get_firmware_status(cmd)) {
 		jobj = json_object_new_string("unknown");
 		if (jobj)
 			json_object_object_add(jhealth, "health_state", jobj);