[lkml]   [2004]   [Jun]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    SubjectRe: kiocb->private is too large for kiocb's on-stack
    William Lee Irwin III <> wrote:
    > sizeof(struct kiocb) is dangerously large for a structure commonly
    > allocated on-stack. This patch converts the 24*sizeof(long) field,
    > ->private, to a void pointer for use by file_operations entrypoints.
    > A ->dtor() method is added to the kiocb in order to support the release
    > of dynamically allocated structures referred to by ->private.
    > The sole in-tree users of ->private are async network read/write,
    > which are not, in fact, async, and so need not handle preallocated
    > ->private as they would need to if ->ki_retry were ever used. The sole
    > truly async operations are direct IO pread()/pwrite() which do not
    > now use ->ki_retry(). All they would need to do in that case is to
    > check for ->private already being allocated for async kiocbs.
    > This rips 88B off the stack on 32-bit in the common case.

    > int sock_sendmsg(struct socket *sock, struct msghdr *msg, size_t size)
    > {
    > struct kiocb iocb;
    > + struct sock_iocb siocb;
    > int ret;
    > init_sync_kiocb(&iocb, NULL);
    > + iocb.private = &siocb;
    > ret = __sock_sendmsg(&iocb, sock, msg, size);
    > if (-EIOCBQUEUED == ret)
    > ret = wait_on_sync_kiocb(&iocb);

    That's so much better than what we had before it ain't funny.

    Was this runtime tested?
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to
    More majordomo info at
    Please read the FAQ at

     \ /
      Last update: 2005-03-22 14:04    [W:0.020 / U:7.112 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site