All of lore.kernel.org
 help / color / mirror / Atom feed
From: Joe Thornber <thornber@redhat.com>
To: Joe Thornber <thornber@redhat.com>
Cc: Linux Mailing List <linux-kernel@vger.kernel.org>,
	Andrew Morton <akpm@osdl.org>
Subject: [Patch 4/10] dm: Maintain ordering when deferring bios
Date: Tue, 10 Feb 2004 17:00:06 +0000	[thread overview]
Message-ID: <20040210170006.GJ27507@reti> (raw)
In-Reply-To: <20040210163548.GC27507@reti>

Make sure that we maintain ordering when deferring bios.
--- diff/drivers/md/dm.c	2004-02-10 16:11:30.000000000 +0000
+++ source/drivers/md/dm.c	2004-02-10 16:11:37.000000000 +0000
@@ -5,6 +5,7 @@
  */
 
 #include "dm.h"
+#include "dm-bio-list.h"
 
 #include <linux/init.h>
 #include <linux/module.h>
@@ -47,7 +48,7 @@
 	 */
 	atomic_t pending;
 	wait_queue_head_t wait;
-	struct bio *deferred;
+ 	struct bio_list deferred;
 
 	/*
 	 * The current mapping.
@@ -195,8 +196,7 @@
 		return 1;
 	}
 
-	bio->bi_next = md->deferred;
-	md->deferred = bio;
+	bio_list_add(&md->deferred, bio);
 
 	up_write(&md->lock);
 	return 0;		/* deferred successfully */
@@ -822,8 +822,7 @@
 	dm_table_resume_targets(md->map);
 	clear_bit(DMF_SUSPENDED, &md->flags);
 	clear_bit(DMF_BLOCK_IO, &md->flags);
-	def = md->deferred;
-	md->deferred = NULL;
+	def = bio_list_get(&md->deferred);
 	up_write(&md->lock);
 
 	flush_deferred_io(def);
--- diff/drivers/md/dm-bio-list.h	1970-01-01 01:00:00.000000000 +0100
+++ source/drivers/md/dm-bio-list.h	2004-02-10 16:11:37.000000000 +0000
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2004 Red Hat UK Ltd.
+ *
+ * This file is released under the GPL.
+ */
+
+#ifndef DM_BIO_LIST_H
+#define DM_BIO_LIST_H
+
+#include <linux/bio.h>
+
+struct bio_list {
+	struct bio *head;
+	struct bio *tail;
+};
+
+static inline void bio_list_init(struct bio_list *bl)
+{
+	bl->head = bl->tail = NULL;
+}
+
+static inline void bio_list_add(struct bio_list *bl, struct bio *bio)
+{
+	bio->bi_next = NULL;
+
+	if (bl->tail)
+		bl->tail->bi_next = bio;
+	else
+		bl->head = bio;
+
+	bl->tail = bio;
+}
+
+static inline void bio_list_merge(struct bio_list *bl, struct bio_list *bl2)
+{
+	if (bl->tail)
+		bl->tail->bi_next = bl2->head;
+	else
+		bl->head = bl2->head;
+
+	bl->tail = bl2->tail;
+}
+
+static inline struct bio *bio_list_pop(struct bio_list *bl)
+{
+	struct bio *bio = bl->head;
+
+	if (bio) {
+		bl->head = bl->head->bi_next;
+		if (!bl->head)
+			bl->tail = NULL;
+
+		bio->bi_next = NULL;
+	}
+
+	return bio;
+}
+
+static inline struct bio *bio_list_get(struct bio_list *bl)
+{
+	struct bio *bio = bl->head;
+
+	bl->head = bl->tail = NULL;
+
+	return bio;
+}
+
+#endif

  parent reply	other threads:[~2004-02-10 17:06 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-02-10 16:35 dm core patches Joe Thornber
2004-02-10 16:57 ` [Patch 1/10] dm: Export dm_vcalloc() Joe Thornber
2004-02-10 16:59 ` [Patch 2/10] dm: Lift to_bytes() and to_sectors() into dm.h Joe Thornber
2004-02-10 16:59 ` [Patch 3/10] dm: Get rid of struct dm_deferred_io in dm.c Joe Thornber
2004-02-10 17:33   ` Christophe Saout
2004-02-10 17:00 ` Joe Thornber [this message]
2004-02-10 17:00 ` [Patch 5/10] dm: Tidy up the error path for alloc_dev() Joe Thornber
2004-02-10 17:01 ` [Patch 6/10] dm: block size bug with 64 bit devs Joe Thornber
2004-02-10 17:01 ` [Patch 7/10] dm: Correct GFP flag in dm_table_create() Joe Thornber
2004-02-10 17:02 ` [Patch 8/10] dm: Zero size target sanity check Joe Thornber
2004-02-10 17:02 ` [Patch 9/10] dm: Remove redundant spin lock in dec_pending() Joe Thornber
2004-02-10 17:03 ` [Patch 10/10] dm: drop BIO_SEG_VALID bit Joe Thornber
2004-02-11 10:16 ` dm core patches Lars Marowsky-Bree
2004-02-11 10:35   ` Joe Thornber
2004-02-12 18:51     ` Lars Marowsky-Bree
2004-02-12 20:13       ` Joe Thornber
2004-02-13 15:12         ` Lars Marowsky-Bree
2004-02-13 15:39           ` Joe Thornber
2004-02-13 16:08             ` Arjan van de Ven
2004-02-16  8:19               ` Lars Marowsky-Bree
2004-02-16  9:35                 ` Arjan van de Ven
2004-02-13 23:46             ` Mike Anderson
2004-02-16 12:17             ` Heinz Mauelshagen
2004-02-13 16:03           ` Jens Axboe

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20040210170006.GJ27507@reti \
    --to=thornber@redhat.com \
    --cc=akpm@osdl.org \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.