Breno Leitao <leitao@xxxxxxxxxx> writes: > Hello Gabriel, > > On Thu, Aug 17, 2023 at 02:38:46PM -0400, Gabriel Krisman Bertazi wrote: >> Breno Leitao <leitao@xxxxxxxxxx> writes: >> >> > +#if defined(CONFIG_NET) >> > int io_uring_cmd_sock(struct io_uring_cmd *cmd, unsigned int issue_flags) >> > { >> > struct socket *sock = cmd->file->private_data; >> > @@ -189,8 +219,16 @@ int io_uring_cmd_sock(struct io_uring_cmd *cmd, unsigned int issue_flags) >> > if (ret) >> > return ret; >> > return arg; >> > + case SOCKET_URING_OP_GETSOCKOPT: >> > + return io_uring_cmd_getsockopt(sock, cmd, issue_flags); >> > default: >> > return -EOPNOTSUPP; >> > } >> > } >> > +#else >> > +int io_uring_cmd_sock(struct io_uring_cmd *cmd, unsigned int issue_flags) >> > +{ >> > + return -EOPNOTSUPP; >> > +} >> > +#endif >> > EXPORT_SYMBOL_GPL(io_uring_cmd_sock); >> >> The CONFIG_NET guards are unrelated and need to go in a separate commit. >> Specially because it is not only gating getsockopt, but also the already >> merged SOCKET_URING_OP_SIOCINQ/_OP_SIOCOUTQ. > > Well, so far, if CONFIG_NET is disable, and you call > io_uring_cmd_getsockopt, the callbacks will be called and returned > -EOPNOTSUPP. I'm not talking about io_uring_cmd_getsockopt; that would obviously return -EOPNOTSUPP before as well. But you are changing io_uring_cmd_sock, which does more things: int io_uring_cmd_sock(struct io_uring_cmd *cmd, unsigned int issue_flags) { [...] if (!prot || !prot->ioctl) return -EOPNOTSUPP; switch (cmd->sqe->cmd_op) { case SOCKET_URING_OP_SIOCINQ: ret = prot->ioctl(sk, SIOCINQ, &arg); if (ret) return ret; return arg; case SOCKET_URING_OP_SIOCOUTQ: ret = prot->ioctl(sk, SIOCOUTQ, &arg); if (ret) return ret; With your patch, these two cmd_op, are now being gated by CONFIG_NET. I think it makes sense for them to be gated by it, But it should be in a separated change, or at least explained in your commit message. > With this new patch, it will eventually call sk_getsockopt which does > not exist in the CONFIG_NET=n world. That is why I have this > protection now. I.e, this `#if defined(CONFIG_NET)` is only necessary now, > since it is the first time this function (io_uring_cmd_sock) will call a > function that does not exist if CONFIG_NET is disabled. > > I can split it in a different patch, if you think it makes a difference. -- Gabriel Krisman Bertazi