On Tue, Aug 18, 2020 at 5:50 AM Miklos Szeredi <miklos@xxxxxxxxxx> wrote: > > How do you propose handling variable size attributes, like the list of > fs options? I really REALLY think those things should just be ASCII data. I think marshalling binary data is actively evil and wrong. It's great for well-specified wire protocols. It's great for internal communication in user space. It's *NOT* great for a kernel system call interface. One single simple binary structure? Sure. That's how system calls work. I'm not claiming that things like "stat()" are wrong because they take binary data. But marshalling random binary structures into some buffer? Let's avoid that. Particularly for these kinds of fairly free-form things like fs options. Those things *are* strings, most of them. Exactly because it needs a level of flexibility that binary data just doesn't have. So I'd suggest something that is very much like "statfsat()", which gets a buffer and a length, and returns an extended "struct statfs" *AND* just a string description at the end. And if you don't pass a sufficiently big buffer, it will not do some random "continuations". No state between system calls. It gets truncated, and you need to pass a bigger buffer, kind of like "snprintf()". I think people who have problems parsing plain ASCII text are just wrong. It's not that expensive. The thing that makes /proc/mounts expensive is not the individual lines - it's that there are a lot of them. Linus