> { > - ctrl->csts |= NVME_CSTS_CFS; > + if (test_and_set_bit(NVME_CSTS_CFS, (unsigned long *)&ctrl->csts)) > + return; > + This can't work - test_and_set_bit takes a bit index and NVME_CSTS_CFS is the actual value. I think we'll need a lock to protect ->csts instead.