From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:53601) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QNSBc-0005Ex-A6 for qemu-devel@nongnu.org; Fri, 20 May 2011 12:04:25 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1QNSBb-0003JQ-Hh for qemu-devel@nongnu.org; Fri, 20 May 2011 12:04:24 -0400 Received: from verein.lst.de ([213.95.11.211]:45257 helo=newverein.lst.de) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QNSBb-0003JG-Cp for qemu-devel@nongnu.org; Fri, 20 May 2011 12:04:23 -0400 Date: Fri, 20 May 2011 18:04:22 +0200 From: Christoph Hellwig Message-ID: <20110520160422.GM4466@lst.de> References: <1305630067-2119-1-git-send-email-pbonzini@redhat.com> <1305630067-2119-14-git-send-email-pbonzini@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1305630067-2119-14-git-send-email-pbonzini@redhat.com> Subject: Re: [Qemu-devel] [PATCH v3 13/21] scsi: do not call send_command directly List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Paolo Bonzini Cc: qemu-devel@nongnu.org > -void scsi_req_enqueue(SCSIRequest *req) > +int32_t scsi_req_enqueue(SCSIRequest *req, uint8_t *buf) > { > + int32_t rc; > assert(!req->enqueued); > scsi_req_ref(req); > req->enqueued = true; > QTAILQ_INSERT_TAIL(&req->dev->requests, req, next); > + > + /* Make sure the request doesn't disappear under send_command's feet. */ > + scsi_req_ref(req); > + rc = req->dev->info->send_command(req, buf); > + scsi_req_unref(req); > + return rc; How would it disappear given that we grabbed another reference just before? That probably needs a bit more documentation here. Also why not move the two scsi_req_ref calls together?