On Sun, 5 Oct 2014 19:07:07 +0300 "Michael S. Tsirkin" <mst at redhat.com> wrote:> Now that virtio core ensures config changes don't > arrive during probing, drop config_enable flag > in virtio blk. > On removal, flush is now sufficient to guarantee that > no change work is queued. > > This help simplify the driver, and will allow > setting DRIVER_OK earlier without losing config > change notifications. > > Signed-off-by: Michael S. Tsirkin <mst at redhat.com> > --- > drivers/block/virtio_blk.c | 19 ++----------------- > 1 file changed, 2 insertions(+), 17 deletions(-) > > diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c > index 0a58140..c8cf6a1 100644 > --- a/drivers/block/virtio_blk.c > +++ b/drivers/block/virtio_blk.c> @@ -772,9 +766,7 @@ static void virtblk_remove(struct virtio_device *vdev) > int refc; > > /* Prevent config work handler from accessing the device. *//* Common code ensures no further work will be queued. */ instead?> - mutex_lock(&vblk->config_lock); > - vblk->config_enable = false; > - mutex_unlock(&vblk->config_lock); > + flush_work(&vblk->config_work); > > del_gendisk(vblk->disk); > blk_cleanup_queue(vblk->disk->queue);> @@ -806,10 +796,6 @@ static int virtblk_freeze(struct virtio_device *vdev) > vdev->config->reset(vdev); > > /* Prevent config work handler from accessing the device. */dito on the comment> - mutex_lock(&vblk->config_lock); > - vblk->config_enable = false; > - mutex_unlock(&vblk->config_lock); > - > flush_work(&vblk->config_work); > > blk_mq_stop_hw_queues(vblk->disk->queue);
On Mon, Oct 06, 2014 at 01:42:29PM +0200, Cornelia Huck wrote:> On Sun, 5 Oct 2014 19:07:07 +0300 > "Michael S. Tsirkin" <mst at redhat.com> wrote: > > > Now that virtio core ensures config changes don't > > arrive during probing, drop config_enable flag > > in virtio blk. > > On removal, flush is now sufficient to guarantee that > > no change work is queued. > > > > This help simplify the driver, and will allow > > setting DRIVER_OK earlier without losing config > > change notifications. > > > > Signed-off-by: Michael S. Tsirkin <mst at redhat.com> > > --- > > drivers/block/virtio_blk.c | 19 ++----------------- > > 1 file changed, 2 insertions(+), 17 deletions(-) > > > > diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c > > index 0a58140..c8cf6a1 100644 > > --- a/drivers/block/virtio_blk.c > > +++ b/drivers/block/virtio_blk.c > > > @@ -772,9 +766,7 @@ static void virtblk_remove(struct virtio_device *vdev) > > int refc; > > > > /* Prevent config work handler from accessing the device. */ > > /* Common code ensures no further work will be queued. */ > > instead?No, I think you missed the point: this comment now refers to the flush below: flush is required to ensure work handler is not running. Agree?> > - mutex_lock(&vblk->config_lock); > > - vblk->config_enable = false; > > - mutex_unlock(&vblk->config_lock); > > + flush_work(&vblk->config_work); > > > > del_gendisk(vblk->disk); > > blk_cleanup_queue(vblk->disk->queue); > > > @@ -806,10 +796,6 @@ static int virtblk_freeze(struct virtio_device *vdev) > > vdev->config->reset(vdev); > > > > /* Prevent config work handler from accessing the device. */ > > dito on the commentSame here and in -net. Pls confirm.> > - mutex_lock(&vblk->config_lock); > > - vblk->config_enable = false; > > - mutex_unlock(&vblk->config_lock); > > - > > flush_work(&vblk->config_work); > > > > blk_mq_stop_hw_queues(vblk->disk->queue);
On Mon, 6 Oct 2014 15:09:53 +0300 "Michael S. Tsirkin" <mst at redhat.com> wrote:> On Mon, Oct 06, 2014 at 01:42:29PM +0200, Cornelia Huck wrote: > > On Sun, 5 Oct 2014 19:07:07 +0300 > > "Michael S. Tsirkin" <mst at redhat.com> wrote: > > > > > Now that virtio core ensures config changes don't > > > arrive during probing, drop config_enable flag > > > in virtio blk. > > > On removal, flush is now sufficient to guarantee that > > > no change work is queued. > > > > > > This help simplify the driver, and will allow > > > setting DRIVER_OK earlier without losing config > > > change notifications. > > > > > > Signed-off-by: Michael S. Tsirkin <mst at redhat.com> > > > --- > > > drivers/block/virtio_blk.c | 19 ++----------------- > > > 1 file changed, 2 insertions(+), 17 deletions(-) > > > > > > diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c > > > index 0a58140..c8cf6a1 100644 > > > --- a/drivers/block/virtio_blk.c > > > +++ b/drivers/block/virtio_blk.c > > > > > @@ -772,9 +766,7 @@ static void virtblk_remove(struct virtio_device *vdev) > > > int refc; > > > > > > /* Prevent config work handler from accessing the device. */ > > > > /* Common code ensures no further work will be queued. */ > > > > instead? > > No, I think you missed the point: > this comment now refers to the flush below: flush is required to > ensure work handler is not running. > > Agree?I think we both mean the same thing. Preventing the handler from access sounds to me more like "when the handler starts running, it is prevented from accessing the device" (like with setting config_enable, as the code did before). What I meant was "common code has already ensured that our work-queueing function will not be called, therefore flushing the workqueue is enough." (same for net)