From patchwork Mon Feb 23 19:20:34 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mikulas Patocka X-Patchwork-Id: 8486 X-Patchwork-Delegate: agk@redhat.com Received: from hormel.redhat.com (hormel1.redhat.com [209.132.177.33]) by demeter.kernel.org (8.14.2/8.14.2) with ESMTP id n1NJKdOU029838 for ; Mon, 23 Feb 2009 19:20:39 GMT Received: from listman.util.phx.redhat.com (listman.util.phx.redhat.com [10.8.4.110]) by hormel.redhat.com (Postfix) with ESMTP id 33719619B72; Mon, 23 Feb 2009 14:20:39 -0500 (EST) Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by listman.util.phx.redhat.com (8.13.1/8.13.1) with ESMTP id n1NJKbVs011316 for ; Mon, 23 Feb 2009 14:20:38 -0500 Received: from hs20-bc2-1.build.redhat.com (hs20-bc2-1.build.redhat.com [10.10.28.34]) by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n1NJKbsH028604 for ; Mon, 23 Feb 2009 14:20:37 -0500 Received: from hs20-bc2-1.build.redhat.com (localhost.localdomain [127.0.0.1]) by hs20-bc2-1.build.redhat.com (8.13.1/8.13.1) with ESMTP id n1NJKYt9025132 for ; Mon, 23 Feb 2009 14:20:34 -0500 Received: from localhost (mpatocka@localhost) by hs20-bc2-1.build.redhat.com (8.13.1/8.13.1/Submit) with ESMTP id n1NJKYJH025126 for ; Mon, 23 Feb 2009 14:20:34 -0500 X-Authentication-Warning: hs20-bc2-1.build.redhat.com: mpatocka owned process doing -bs Date: Mon, 23 Feb 2009 14:20:34 -0500 (EST) From: Mikulas Patocka X-X-Sender: mpatocka@hs20-bc2-1.build.redhat.com To: dm-devel@redhat.com Message-ID: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.58 on 172.16.52.254 X-loop: dm-devel@redhat.com Subject: [dm-devel] [PATCH 4/14] barriers X-BeenThere: dm-devel@redhat.com X-Mailman-Version: 2.1.5 Precedence: junk Reply-To: device-mapper development List-Id: device-mapper development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: dm-devel-bounces@redhat.com Errors-To: dm-devel-bounces@redhat.com Remove struct dm_wq_req and move "work" directly to struct mapped_device. In the new implementation, the thread will do just one type of work (processing the queue), there is no need for separate work requests for it. Signed-off-by: Mikulas Patocka --- drivers/md/dm.c | 23 ++++++----------------- 1 file changed, 6 insertions(+), 17 deletions(-) -- dm-devel mailing list dm-devel@redhat.com https://www.redhat.com/mailman/listinfo/dm-devel Index: linux-2.6.29-rc3-devel/drivers/md/dm.c =================================================================== --- linux-2.6.29-rc3-devel.orig/drivers/md/dm.c 2009-02-05 05:38:32.000000000 +0100 +++ linux-2.6.29-rc3-devel/drivers/md/dm.c 2009-02-05 05:38:36.000000000 +0100 @@ -99,11 +99,6 @@ union map_info *dm_get_mapinfo(struct bi /* * Work processed by per-device workqueue. */ -struct dm_wq_req { - struct work_struct work; - struct mapped_device *md; -}; - struct mapped_device { struct rw_semaphore io_lock; struct mutex suspend_lock; @@ -125,6 +120,7 @@ struct mapped_device { */ atomic_t pending; wait_queue_head_t wait; + struct work_struct work; struct bio_list deferred; struct bio_list pushback; @@ -1064,6 +1060,8 @@ out: static struct block_device_operations dm_blk_dops; +static void dm_wq_work(struct work_struct *work); + /* * Allocate and initialise a blank device with a given minor. */ @@ -1130,6 +1128,7 @@ static struct mapped_device *alloc_dev(i atomic_set(&md->pending, 0); init_waitqueue_head(&md->wait); + INIT_WORK(&md->work, dm_wq_work); init_waitqueue_head(&md->eventq); md->disk->major = _major; @@ -1423,26 +1422,16 @@ static void __merge_pushback_list(struct static void dm_wq_work(struct work_struct *work) { - struct dm_wq_req *req = container_of(work, struct dm_wq_req, work); - struct mapped_device *md = req->md; + struct mapped_device *md = container_of(work, struct mapped_device, work); down_write(&md->io_lock); __flush_deferred_io(md); up_write(&md->io_lock); } -static void dm_wq_queue(struct mapped_device *md, struct dm_wq_req *req) -{ - req->md = md; - INIT_WORK(&req->work, dm_wq_work); - queue_work(md->wq, &req->work); -} - static void dm_queue_flush(struct mapped_device *md) { - struct dm_wq_req req; - - dm_wq_queue(md, &req); + queue_work(md->wq, &md->work); flush_workqueue(md->wq); }