* @state: for use by whichever driver currently owns the message
  * @resources: for resource management when the SPI message is processed
  * @prepared: spi_prepare_message was called for the this message
- * @t: for use with spi_message_alloc() when message and transfers have
- *     been allocated together
  *
  * A @spi_message is used to execute an atomic sequence of data transfers,
  * each represented by a struct spi_transfer.  The sequence is "atomic"
 
        /* List of spi_res resources when the SPI message is processed */
        struct list_head        resources;
-
-       /* For embedding transfers into the memory of the message */
-       struct spi_transfer     t[];
 };
 
 static inline void spi_message_init_no_memset(struct spi_message *m)
  */
 static inline struct spi_message *spi_message_alloc(unsigned ntrans, gfp_t flags)
 {
-       struct spi_message *m;
+       struct spi_message_with_transfers {
+               struct spi_message m;
+               struct spi_transfer t[];
+       } *mwt;
+       unsigned i;
+
+       mwt = kzalloc(struct_size(mwt, t, ntrans), flags);
+       if (!mwt)
+               return NULL;
 
-       m = kzalloc(struct_size(m, t, ntrans), flags);
-       if (m) {
-               unsigned i;
+       spi_message_init_no_memset(&mwt->m);
+       for (i = 0; i < ntrans; i++)
+               spi_message_add_tail(&mwt->t[i], &mwt->m);
 
-               spi_message_init_no_memset(m);
-               for (i = 0; i < ntrans; i++)
-                       spi_message_add_tail(&m->t[i], m);
-       }
-       return m;
+       return &mwt->m;
 }
 
 static inline void spi_message_free(struct spi_message *m)