> {
> - 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.