]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
dio: rearrange fields in dio/dio_submit to avoid holes
authorAndi Kleen <ak@linux.intel.com>
Wed, 5 Oct 2011 00:44:03 +0000 (11:44 +1100)
committerStephen Rothwell <sfr@canb.auug.org.au>
Thu, 6 Oct 2011 06:00:12 +0000 (17:00 +1100)
Fix most problems reported by pahole.

There is still a weird 104 byte hole after map_bh. I'm not sure what
causes this.

Signed-off-by: Andi Kleen <ak@linux.intel.com>
Acked-by: Jeff Moyer <jmoyer@redhat.com>
Cc: Jens Axboe <axboe@kernel.dk>
Cc: Christoph Hellwig <hch@lst.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
fs/direct-io.c

index f96bc4b5ed5b78ce942e7b7ee7e2c5965f9a20df..2d07a69431ab77127ac86bd48c696ebe4d1a4d29 100644 (file)
@@ -73,10 +73,10 @@ struct dio_submit {
        sector_t block_in_file;         /* Current offset into the underlying
                                           file in dio_block units. */
        unsigned blocks_available;      /* At block_in_file.  changes */
+       int reap_counter;               /* rate limit reaping */
        sector_t final_block_in_request;/* doesn't change */
        unsigned first_block_in_page;   /* doesn't change, Used only once */
        int boundary;                   /* prev block is at a boundary */
-       int reap_counter;               /* rate limit reaping */
        get_block_t *get_block;         /* block mapping function */
        dio_submit_t *submit_io;        /* IO submition function */
 
@@ -114,27 +114,26 @@ struct dio_submit {
 /* dio_state communicated between submission path and end_io */
 struct dio {
        int flags;                      /* doesn't change */
-       struct inode *inode;
        int rw;
+       struct inode *inode;
        loff_t i_size;                  /* i_size when submitted */
        dio_iodone_t *end_io;           /* IO completion function */
-       struct buffer_head map_bh;      /* last get_block() result */
 
 
        /* BIO completion state */
        spinlock_t bio_lock;            /* protects BIO fields below */
+       int page_errors;                /* errno from get_user_pages() */
+       int is_async;                   /* is IO async ? */
+       int io_error;                   /* IO error in completion path */
        unsigned long refcount;         /* direct_io_worker() and bios */
        struct bio *bio_list;           /* singly linked via bi_private */
        struct task_struct *waiter;     /* waiting task (NULL if none) */
 
        /* AIO related stuff */
        struct kiocb *iocb;             /* kiocb */
-       int is_async;                   /* is IO async ? */
-       int io_error;                   /* IO error in completion path */
        ssize_t result;                 /* IO result */
 
-       int page_errors;                /* errno from get_user_pages() */
-
+       struct buffer_head map_bh;      /* last get_block() result */
        /*
         * pages[] (and any fields placed after it) are not zeroed out at
         * allocation time.  Don't add new fields after pages[] unless you