All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jens Axboe <axboe@kernel.dk>
To: Dylan Yudaken <dylany@fb.com>,
	"io-uring@vger.kernel.org" <io-uring@vger.kernel.org>
Cc: Kernel Team <Kernel-team@fb.com>,
	"asml.silence@gmail.com" <asml.silence@gmail.com>
Subject: Re: [PATCH 1/3] io_uring: add io_uring_get_opcode
Date: Mon, 25 Apr 2022 08:53:00 -0600	[thread overview]
Message-ID: <0a360d99-a6cf-642a-9873-f779cbbd1f8b@kernel.dk> (raw)
In-Reply-To: <6db369b4e8e0c598ff38d4b91b65004c59637b79.camel@fb.com>

On 4/25/22 8:48 AM, Dylan Yudaken wrote:
> On Mon, 2022-04-25 at 08:29 -0600, Jens Axboe wrote:
>> On 4/25/22 7:21 AM, Dylan Yudaken wrote:
>>> On Mon, 2022-04-25 at 06:38 -0600, Jens Axboe wrote:
>>>> On 4/25/22 3:36 AM, Dylan Yudaken wrote:
>>>>> In some debug scenarios it is useful to have the text
>>>>> representation
>>>>> of
>>>>> the opcode. Add this function in preparation.
>>>>>
>>>>> Signed-off-by: Dylan Yudaken <dylany@fb.com>
>>>>> ---
>>>>>  fs/io_uring.c            | 91
>>>>> ++++++++++++++++++++++++++++++++++++++++
>>>>>  include/linux/io_uring.h |  5 +++
>>>>>  2 files changed, 96 insertions(+)
>>>>>
>>>>> diff --git a/fs/io_uring.c b/fs/io_uring.c
>>>>> index e57d47a23682..326695f74b93 100644
>>>>> --- a/fs/io_uring.c
>>>>> +++ b/fs/io_uring.c
>>>>> @@ -1255,6 +1255,97 @@ static struct kmem_cache *req_cachep;
>>>>>  
>>>>>  static const struct file_operations io_uring_fops;
>>>>>  
>>>>> +const char *io_uring_get_opcode(u8 opcode)
>>>>> +{
>>>>> +       switch (opcode) {
>>>>> +       case IORING_OP_NOP:
>>>>> +               return "NOP";
>>>>> +       case IORING_OP_READV:
>>>>> +               return "READV";
>>>>> +       case IORING_OP_WRITEV:
>>>>> +               return "WRITEV";
>>>>> +       case IORING_OP_FSYNC:
>>>>> +               return "FSYNC";
>>>>> +       case IORING_OP_READ_FIXED:
>>>>> +               return "READ_FIXED";
>>>>> +       case IORING_OP_WRITE_FIXED:
>>>>> +               return "WRITE_FIXED";
>>>>> +       case IORING_OP_POLL_ADD:
>>>>> +               return "POLL_ADD";
>>>>> +       case IORING_OP_POLL_REMOVE:
>>>>> +               return "POLL_REMOVE";
>>>>> +       case IORING_OP_SYNC_FILE_RANGE:
>>>>> +               return "SYNC_FILE_RANGE";
>>>>> +       case IORING_OP_SENDMSG:
>>>>> +               return "SENDMSG";
>>>>> +       case IORING_OP_RECVMSG:
>>>>> +               return "RECVMSG";
>>>>> +       case IORING_OP_TIMEOUT:
>>>>> +               return "TIMEOUT";
>>>>> +       case IORING_OP_TIMEOUT_REMOVE:
>>>>> +               return "TIMEOUT_REMOVE";
>>>>> +       case IORING_OP_ACCEPT:
>>>>> +               return "ACCEPT";
>>>>> +       case IORING_OP_ASYNC_CANCEL:
>>>>> +               return "ASYNC_CANCEL";
>>>>> +       case IORING_OP_LINK_TIMEOUT:
>>>>> +               return "LINK_TIMEOUT";
>>>>> +       case IORING_OP_CONNECT:
>>>>> +               return "CONNECT";
>>>>> +       case IORING_OP_FALLOCATE:
>>>>> +               return "FALLOCATE";
>>>>> +       case IORING_OP_OPENAT:
>>>>> +               return "OPENAT";
>>>>> +       case IORING_OP_CLOSE:
>>>>> +               return "CLOSE";
>>>>> +       case IORING_OP_FILES_UPDATE:
>>>>> +               return "FILES_UPDATE";
>>>>> +       case IORING_OP_STATX:
>>>>> +               return "STATX";
>>>>> +       case IORING_OP_READ:
>>>>> +               return "READ";
>>>>> +       case IORING_OP_WRITE:
>>>>> +               return "WRITE";
>>>>> +       case IORING_OP_FADVISE:
>>>>> +               return "FADVISE";
>>>>> +       case IORING_OP_MADVISE:
>>>>> +               return "MADVISE";
>>>>> +       case IORING_OP_SEND:
>>>>> +               return "SEND";
>>>>> +       case IORING_OP_RECV:
>>>>> +               return "RECV";
>>>>> +       case IORING_OP_OPENAT2:
>>>>> +               return "OPENAT2";
>>>>> +       case IORING_OP_EPOLL_CTL:
>>>>> +               return "EPOLL_CTL";
>>>>> +       case IORING_OP_SPLICE:
>>>>> +               return "SPLICE";
>>>>> +       case IORING_OP_PROVIDE_BUFFERS:
>>>>> +               return "PROVIDE_BUFFERS";
>>>>> +       case IORING_OP_REMOVE_BUFFERS:
>>>>> +               return "REMOVE_BUFFERS";
>>>>> +       case IORING_OP_TEE:
>>>>> +               return "TEE";
>>>>> +       case IORING_OP_SHUTDOWN:
>>>>> +               return "SHUTDOWN";
>>>>> +       case IORING_OP_RENAMEAT:
>>>>> +               return "RENAMEAT";
>>>>> +       case IORING_OP_UNLINKAT:
>>>>> +               return "UNLINKAT";
>>>>> +       case IORING_OP_MKDIRAT:
>>>>> +               return "MKDIRAT";
>>>>> +       case IORING_OP_SYMLINKAT:
>>>>> +               return "SYMLINKAT";
>>>>> +       case IORING_OP_LINKAT:
>>>>> +               return "LINKAT";
>>>>> +       case IORING_OP_MSG_RING:
>>>>> +               return "MSG_RING";
>>>>> +       case IORING_OP_LAST:
>>>>> +               return "LAST";
>>>>> +       }
>>>>> +       return "UNKNOWN";
>>>>> +}
>>>>
>>>> My only worry here is that it's another place to touch when
>>>> adding an
>>>> opcode. I'm assuming the compiler doesn't warn if you're missing
>>>> one
>>>> since it's not strongly typed?
>>>
>>> It doesn't complain, but we could strongly type it to get it to? I
>>> don't think it will break anything (certainly does not locally).
>>> What
>>> about something like this:
>>
>> I think this would be fine. Would probably be cleaner if you just
>> make
>> io_uring_get_opcode() take an enum io_uring_op and just fwd declare
>> it
>> in io_uring.h?
> 
> I cannot do that bit, as there is a separate function for
> CONFIG_IO_URING=n. That would either require different signatures (u8
> vs enum io_uring_op) or including the enum even when not enabled in
> config. Both of these feel ugly.
> 
> I'll send a new series giving the enum a type.

Agree, let's keep the cast then.

-- 
Jens Axboe


  reply	other threads:[~2022-04-25 14:53 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-04-25  9:36 [PATCH 0/3] text representation of opcode in trace Dylan Yudaken
2022-04-25  9:36 ` [PATCH 1/3] io_uring: add io_uring_get_opcode Dylan Yudaken
2022-04-25 12:38   ` Jens Axboe
2022-04-25 13:21     ` Dylan Yudaken
2022-04-25 14:29       ` Jens Axboe
2022-04-25 14:48         ` Dylan Yudaken
2022-04-25 14:53           ` Jens Axboe [this message]
2022-04-25  9:36 ` [PATCH 2/3] io_uring: rename op -> opcode Dylan Yudaken
2022-04-25  9:36 ` [PATCH 3/3] io_uring: use the text representation of ops in trace Dylan Yudaken

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=0a360d99-a6cf-642a-9873-f779cbbd1f8b@kernel.dk \
    --to=axboe@kernel.dk \
    --cc=Kernel-team@fb.com \
    --cc=asml.silence@gmail.com \
    --cc=dylany@fb.com \
    --cc=io-uring@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.