On Mon, Mar 03, 2014 at 01:52:13PM -0800, Linus Torvalds wrote: > On Mon, Mar 3, 2014 at 1:26 PM, Al Viro <viro@xxxxxxxxxxxxxxxxxx> wrote: > > On Mon, Mar 03, 2014 at 04:03:59PM -0500, George Spelvin wrote: > >> > >> (If you want to use bits, why not use the two lsbits of the file pointer > >> for the purpose? That would save a lot of space.) > > > > Most of the cases have it kept separately in registers, actually - there's > > a reason why fdget() and friends are inlined. > > Yes. And bit test and set ops on registers are actually cheaper than > playing around with bytes. > > That said, the "fget_light()" interface sucks - exactly because it > doesn't do the "return structure in two registers" thing. We should > get rid of it - there's just one remaining user in networking code, > and it should be rewritten in terms of fdget(). > > That's a separate issue, though. The thing is, the callers in there do *not* keep struct file * at all - they keep struct socket * and use sock->file to get struct file * back when they need it. So struct fd is the wrong thing to use there - it only adds to register pressure. A similar pair of struct socket * and "need to fput that" flag would probably be needed, with sockfd_lookup_light() returning that. -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html