On Tue, Feb 01, 2022 at 02:14:42AM +0000, Matthew Wilcox wrote: > On Mon, Jan 31, 2022 at 05:33:29PM -0800, Luis Chamberlain wrote: > > It would seem we keep tacking on things with ioctls for the block > > layer and filesystems. Even for new trendy things like io_uring [0]. > > I think the problem is that it's a huge effort to add a new syscall. As we'll all agree it should be. > You have to get it into each architecture. Having a single place to > add a new syscall would help reduce the number of places we use > multiplexor syscalls like ioctl(). Jeesh, is such a thing really possible? I wonder if Arnd has tried or what he'd think... I'm not arguing in favor of this, I am not sure if we want to be encouraging new syscalls for everything. I'd agree that if its generic perhaps so, but my own focus on this thread was block / fs. So my hope with this thread was to encourage discussion for alternatives to ioctls specifically for the block layer / filesystems. > > For a few years I have found this odd, and have slowly started > > asking folks why we don't consider alternatives like a generic > > netlink family. I've at least been told that this is desirable > > but no one has worked on it. > > I don't know that I agree that "generic netlink" is desirable. > I'd like to know more about the pros and cons of this idea. Yeah it was just an idea example of a framework which does actually get us closer to some form of real data types for what is being supported, and which also pushes us to use kdoc. > > Possible issues? Kernels without CONFIG_NET. Is that a deal breaker? > > We already have a few filesystems with their own generic netlink > > families, so not sure if this is a good argument against this. > > > > mcgrof@fulton ~/linux-next (git::master)$ git grep genl_register_family fs > > fs/cifs/netlink.c: ret = genl_register_family(&cifs_genl_family); > > fs/dlm/netlink.c: return genl_register_family(&family); > > fs/ksmbd/transport_ipc.c: ret = genl_register_family(&ksmbd_genl_family); > > fs/quota/netlink.c: if (genl_register_family("a_genl_family) != 0) > > I'm not sure these are good arguments in favour ... other than quota, > these are all network filesystems, which aren't much use without > CONFIG_NET. It's a good point. > > mcgrof@fulton ~/linux-next (git::master)$ git grep genl_register_family drivers/block > > drivers/block/nbd.c: if (genl_register_family(&nbd_genl_family)) { > > The, er, _network_ block device, right? :) Sure. Luis