1. A method of transferring data from a client device to a host system, comprising: the client reading a first one or more bits from a data structure on the host, wherein the data structure comprises a first pair of slots, a second pair of slots and the first one or more bits, and wherein the first one or more bits indicate that the first pair of slots has been read from most recently by the host; the client reading a second one or more bits from a local memory, wherein the second one or more bits indicate that a first slot of the second pair of slots has been written to more recently; the client incrementing a value of a locally stored counter to a latest value, wherein the latest value of the locally stored counter is useable to indicate which slot has most recently been written to; the client writing first data to a second slot of the second pair of slots, wherein the client writes the data to the second slot of the second pair of slots based on the first one or more bits indicating that the first pair of slots has been read from most recently by the host and the second one or more bits indicating that the first slot of the second pair of slots has been written to more recently; wherein the first data includes the latest value of the locally stored counter; the client updating the second one or more bits in the local memory to indicate that the second slot of the second pair of slots has been written to more recently.