Skip to content

Commit

Permalink
Merge branch 'nvme-4.19' of git://git.infradead.org/nvme into for-linus
Browse files Browse the repository at this point in the history
Pull NVMe fixes from Christoph.

* 'nvme-4.19' of git://git.infradead.org/nvme:
  nvmet: free workqueue object if module init fails
  nvme-fcloop: Fix dropped LS's to removed target port
  nvme-pci: add a memory barrier to nvme_dbbuf_update_and_check_event
  • Loading branch information
Jens Axboe committed Aug 29, 2018
2 parents 8f3fafc + 04db0e5 commit 52bd456
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 2 deletions.
8 changes: 8 additions & 0 deletions drivers/nvme/host/pci.c
Original file line number Diff line number Diff line change
Expand Up @@ -316,6 +316,14 @@ static bool nvme_dbbuf_update_and_check_event(u16 value, u32 *dbbuf_db,
old_value = *dbbuf_db;
*dbbuf_db = value;

/*
* Ensure that the doorbell is updated before reading the event
* index from memory. The controller needs to provide similar
* ordering to ensure the envent index is updated before reading
* the doorbell.
*/
mb();

if (!nvme_dbbuf_need_event(*dbbuf_ei, value, old_value))
return false;
}
Expand Down
4 changes: 3 additions & 1 deletion drivers/nvme/target/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -1210,7 +1210,7 @@ static int __init nvmet_init(void)

error = nvmet_init_discovery();
if (error)
goto out;
goto out_free_work_queue;

error = nvmet_init_configfs();
if (error)
Expand All @@ -1219,6 +1219,8 @@ static int __init nvmet_init(void)

out_exit_discovery:
nvmet_exit_discovery();
out_free_work_queue:
destroy_workqueue(buffered_io_wq);
out:
return error;
}
Expand Down
3 changes: 2 additions & 1 deletion drivers/nvme/target/fcloop.c
Original file line number Diff line number Diff line change
Expand Up @@ -311,7 +311,7 @@ fcloop_tgt_lsrqst_done_work(struct work_struct *work)
struct fcloop_tport *tport = tls_req->tport;
struct nvmefc_ls_req *lsreq = tls_req->lsreq;

if (tport->remoteport)
if (!tport || tport->remoteport)
lsreq->done(lsreq, tls_req->status);
}

Expand All @@ -329,6 +329,7 @@ fcloop_ls_req(struct nvme_fc_local_port *localport,

if (!rport->targetport) {
tls_req->status = -ECONNREFUSED;
tls_req->tport = NULL;
schedule_work(&tls_req->work);
return ret;
}
Expand Down

0 comments on commit 52bd456

Please sign in to comment.