OSDN Git Service

dm mpath: reduce size of struct multipath
authorMike Snitzer <snitzer@redhat.com>
Sat, 2 Jun 2012 23:29:43 +0000 (00:29 +0100)
committerAlasdair G Kergon <agk@redhat.com>
Sat, 2 Jun 2012 23:29:43 +0000 (00:29 +0100)
Move multipath structure's 'lock' and 'queue_size' members to eliminate
two 4-byte holes.  Also use a bit within a single unsigned int for each
existing flag (saves 8-bytes).  This allows future flags to be added
without each consuming an unsigned int.

Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Acked-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: Alasdair G Kergon <agk@redhat.com>
drivers/md/dm-mpath.c

index 754f38f..c351607 100644 (file)
@@ -61,11 +61,11 @@ struct multipath {
        struct list_head list;
        struct dm_target *ti;
 
-       spinlock_t lock;
-
        const char *hw_handler_name;
        char *hw_handler_params;
 
+       spinlock_t lock;
+
        unsigned nr_priority_groups;
        struct list_head priority_groups;
 
@@ -81,16 +81,17 @@ struct multipath {
        struct priority_group *next_pg; /* Switch to this PG if set */
        unsigned repeat_count;          /* I/Os left before calling PS again */
 
-       unsigned queue_io;              /* Must we queue all I/O? */
-       unsigned queue_if_no_path;      /* Queue I/O if last path fails? */
-       unsigned saved_queue_if_no_path;/* Saved state during suspension */
+       unsigned queue_io:1;            /* Must we queue all I/O? */
+       unsigned queue_if_no_path:1;    /* Queue I/O if last path fails? */
+       unsigned saved_queue_if_no_path:1; /* Saved state during suspension */
+
        unsigned pg_init_retries;       /* Number of times to retry pg_init */
        unsigned pg_init_count;         /* Number of times pg_init called */
        unsigned pg_init_delay_msecs;   /* Number of msecs before pg_init retry */
 
+       unsigned queue_size;
        struct work_struct process_queued_ios;
        struct list_head queued_ios;
-       unsigned queue_size;
 
        struct work_struct trigger_event;