swap_info: reorder its fields
Hugh Dickins [Tue, 15 Dec 2009 01:58:48 +0000 (17:58 -0800)]
Reorder (and comment) the fields of swap_info_struct, to make better
use of its cachelines: it's good for swap_duplicate() in particular
if unsigned int max and swap_map are near the start.

Signed-off-by: Hugh Dickins <hugh.dickins@tiscali.co.uk>
Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Cc: Rik van Riel <riel@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

include/linux/swap.h

index ac43d87..9f0ca32 100644 (file)
@@ -167,21 +167,21 @@ struct swap_info_struct {
        signed short    prio;           /* swap priority of this type */
        signed char     type;           /* strange name for an index */
        signed char     next;           /* next type on the swap list */
-       struct file *swap_file;
-       struct block_device *bdev;
-       struct swap_extent first_swap_extent;
-       struct swap_extent *curr_swap_extent;
-       unsigned char *swap_map;
-       unsigned int lowest_bit;
-       unsigned int highest_bit;
+       unsigned int    max;            /* extent of the swap_map */
+       unsigned char *swap_map;        /* vmalloc'ed array of usage counts */
+       unsigned int lowest_bit;        /* index of first free in swap_map */
+       unsigned int highest_bit;       /* index of last free in swap_map */
+       unsigned int pages;             /* total of usable pages of swap */
+       unsigned int inuse_pages;       /* number of those currently in use */
+       unsigned int cluster_next;      /* likely index for next allocation */
+       unsigned int cluster_nr;        /* countdown to next cluster search */
        unsigned int lowest_alloc;      /* while preparing discard cluster */
        unsigned int highest_alloc;     /* while preparing discard cluster */
-       unsigned int cluster_next;
-       unsigned int cluster_nr;
-       unsigned int pages;
-       unsigned int max;
-       unsigned int inuse_pages;
-       unsigned int old_block_size;
+       struct swap_extent *curr_swap_extent;
+       struct swap_extent first_swap_extent;
+       struct block_device *bdev;      /* swap device or bdev of swap file */
+       struct file *swap_file;         /* seldom referenced */
+       unsigned int old_block_size;    /* seldom referenced */
 };
 
 struct swap_list_t {