All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Bryn M. Reeves" <breeves@redhat.com>
To: device-mapper development <dm-devel@redhat.com>
Cc: Heinz Mauelshagen <mauelshagen@redhat.com>
Subject: [PATCH] additional bio list helpers
Date: Tue, 06 Feb 2007 11:00:15 +0000	[thread overview]
Message-ID: <45C85FBF.7060207@redhat.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 441 bytes --]

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Add a couple of extra helper routines to drivers/md/dm-bio-list.h. This
patch is required for the current dm-loop patch.

Kind regards,

Bryn.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)
Comment: Using GnuPG with Fedora - http://enigmail.mozdev.org

iD8DBQFFyF+/6YSQoMYUY94RAnB0AJ9CUAbLJhy9sGeAkQuKvjfPOcXFhgCfXqXT
td9QjIOQK+ECBVf3H0Wl83g=
=NX1z
-----END PGP SIGNATURE-----

[-- Attachment #2: dm-bio-list-helpers.patch --]
[-- Type: text/x-patch, Size: 2395 bytes --]

Add additional bio list helpers to dm-bio-list.h:

bio_list_empty
bio_list_nr
bio_list_join
bio_list_join_init
bio_list_merge_init
bio_list_push

These are used by dm-loop for manipulating lists of bios to be
resubmitted by the fs I/O code.

Signed-off-by: Heinz Mauelshagen <hjm@redhat.com>
Signed-off-by: Bryn Reeves <breeves@redhat.com>

===================================================================
diff --git a/drivers/md/dm-bio-list.h b/drivers/md/dm-bio-list.h
index da43496..301efae 100644
--- a/drivers/md/dm-bio-list.h
+++ b/drivers/md/dm-bio-list.h
@@ -14,11 +14,33 @@ struct bio_list {
 	struct bio *tail;
 };
 
+static inline int  bio_list_empty(struct bio_list *bl)
+{
+	return bl->head == NULL && bl->tail == NULL;
+}
+
+#define BIO_LIST_HEAD(bl)	struct bio_list bl = { NULL, NULL }
+
 static inline void bio_list_init(struct bio_list *bl)
 {
 	bl->head = bl->tail = NULL;
 }
 
+#define bio_for_each(bio, bl) \
+	for (bio = (bl)->head; bio; bio = bio->bi_next)
+
+static inline int bio_list_nr(struct bio_list *bl)
+{
+	int i=0;
+	struct bio *bio;
+
+	if(bio_list_empty(bl))
+		return i;
+	bio_for_each(bio, bl)
+		i++;
+	return i;
+}
+
 static inline void bio_list_add(struct bio_list *bl, struct bio *bio)
 {
 	bio->bi_next = NULL;
@@ -33,9 +55,6 @@ static inline void bio_list_add(struct bio_list *bl, struct bio *bio)
 
 static inline void bio_list_merge(struct bio_list *bl, struct bio_list *bl2)
 {
-	if (!bl2->head)
-		return;
-
 	if (bl->tail)
 		bl->tail->bi_next = bl2->head;
 	else
@@ -58,6 +77,40 @@ static inline void bio_list_merge_head(struct bio_list *bl,
 	bl->head = bl2->head;
 }
 
+static inline void bio_list_join(struct bio_list *bl, struct bio_list *bl2)
+{
+	if (bio_list_empty(bl2))
+		return;
+
+	bl2->tail->bi_next = bl->head;
+	bl->head = bl2->head;
+
+	if (!bl->tail)
+		bl->tail = bl2->tail;
+}
+
+static inline void bio_list_join_init(struct bio_list *bl, struct bio_list *bl2)
+{
+	bio_list_join(bl, bl2);
+	bio_list_init(bl2);
+}
+
+static inline void bio_list_merge_init(struct bio_list *bl,
+				       struct bio_list *bl2)
+{
+	bio_list_merge(bl, bl2);
+	bio_list_init(bl2);
+}
+
+static inline void bio_list_push(struct bio_list *bl, struct bio *bio)
+{
+	bio->bi_next = bl->head;
+	bl->head = bio;
+
+	if (!bl->tail)
+		bl->tail = bio;
+}
+
 static inline struct bio *bio_list_pop(struct bio_list *bl)
 {
 	struct bio *bio = bl->head;

[-- Attachment #3: Type: text/plain, Size: 0 bytes --]



             reply	other threads:[~2007-02-06 11:00 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-02-06 11:00 Bryn M. Reeves [this message]
2007-02-06 21:05 ` [PATCH] additional bio list helpers Kiyoshi Ueda
2007-02-07 11:26   ` Bryn M. Reeves

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=45C85FBF.7060207@redhat.com \
    --to=breeves@redhat.com \
    --cc=dm-devel@redhat.com \
    --cc=mauelshagen@redhat.com \
    /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.