Thread (22 messages) 22 messages, 3 authors, 2021-08-31

Re: [RFC PATCH v3 06/15] perf workqueue: introduce workqueue struct

From: Riccardo Mancini <hidden>
Date: 2021-08-31 16:13:24
Also in: lkml

Hi Namhyung,
thanks again for taking your time to review.

On Tue, 2021-08-24 at 12:27 -0700, Namhyung Kim wrote:
Hi Riccardo,

On Fri, Aug 20, 2021 at 3:54 AM Riccardo Mancini [off-list ref] wrote:
quoted
+/**
+ * workqueue_strerror - print message regarding lastest error in @wq
+ *
+ * Buffer size should be at least WORKQUEUE_STRERR_BUFSIZE bytes.
+ */
+int workqueue_strerror(struct workqueue_struct *wq, int err, char *buf,
size_t size)
+{
+       int ret;
+       char sbuf[THREADPOOL_STRERR_BUFSIZE], *emsg;
+       const char *errno_str;
+
+       errno_str = workqueue_errno_str[-err-WORKQUEUE_ERROR__OFFSET];
It seems easy to crash with an invalid err argument.
Yup, I should add a check in the next version.
quoted
+
+       switch (err) {
+       case -WORKQUEUE_ERROR__POOLNEW:
+       case -WORKQUEUE_ERROR__POOLEXE:
+       case -WORKQUEUE_ERROR__POOLSTOP:
+       case -WORKQUEUE_ERROR__POOLSTARTTHREAD:
+               if (IS_ERR_OR_NULL(wq))
+                       return scnprintf(buf, size, "%s: unknown.\n",
+                               errno_str);
+
+               ret = threadpool__strerror(wq->pool, wq->pool_errno, sbuf,
sizeof(sbuf));
+               if (ret < 0)
+                       return ret;
+               return scnprintf(buf, size, "%s: %s.\n", errno_str, sbuf);
+       case -WORKQUEUE_ERROR__WRITEPIPE:
+       case -WORKQUEUE_ERROR__READPIPE:
+               emsg = str_error_r(errno, sbuf, sizeof(sbuf));

This means the errno should be kept before calling this, right?
Yeah, I should make sure to preserve it, I think it's done this way in some
other functions.
Otherwise, I can save it in a struct attribute, which is maybe simpler.
quoted
+               return scnprintf(buf, size, "%s: %s.\n", errno_str, emsg);
+       case -WORKQUEUE_ERROR__INVALIDMSG:
+               return scnprintf(buf, size, "%s.\n", errno_str);
+       default:
+               emsg = str_error_r(err, sbuf, sizeof(sbuf));
+               return scnprintf(buf, size, "Error: %s", emsg);
Newline at the end?
Forgot it, thanks!

Riccardo
Thanks,
Namhyung

quoted
+       }
+}
+
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help