Dave Olien <[EMAIL PROTECTED]> wrote:
>
>  +extern inline void zero_fill_bio(struct bio *bio)
>  +{
>  +    unsigned long flags;
>  +    struct bio_vec *bv;
>  +    int i;
>  +
>  +    bio_for_each_segment(bv, bio, i) {
>  +            char *data = bvec_kmap_irq(bv, &flags);
>  +            memset(data, 0, bv->bv_len);
>  +            flush_dcache_page(bv->bv_page);
>  +            bvec_kunmap_irq(data, &flags);
>  +    }
>  +}

heavens.  Why was this made inline?  And extern inline?

It's too big for inlining (and is super-slow anyway) and will cause all
sorts of unpleasant header file dependencies for all architectures.  bio.h
now needs to see the implementation of everyone's flush_dcache_page(), for
example.


Something like this?

--- 
25/include/linux/bio.h~add-local-bio-pool-support-and-modify-dm-uninline-zero_fill_bio
      2005-02-02 18:17:18.225901376 -0800
+++ 25-akpm/include/linux/bio.h 2005-02-02 18:17:18.230900616 -0800
@@ -286,6 +286,7 @@ extern void bio_set_pages_dirty(struct b
 extern void bio_check_pages_dirty(struct bio *bio);
 extern struct bio *bio_copy_user(struct request_queue *, unsigned long, 
unsigned int, int);
 extern int bio_uncopy_user(struct bio *);
+void zero_fill_bio(struct bio *bio);
 
 #ifdef CONFIG_HIGHMEM
 /*
@@ -335,18 +336,4 @@ extern inline char *__bio_kmap_irq(struc
        __bio_kmap_irq((bio), (bio)->bi_idx, (flags))
 #define bio_kunmap_irq(buf,flags)      __bio_kunmap_irq(buf, flags)
 
-extern inline void zero_fill_bio(struct bio *bio)
-{
-       unsigned long flags;
-       struct bio_vec *bv;
-       int i;
-
-       bio_for_each_segment(bv, bio, i) {
-               char *data = bvec_kmap_irq(bv, &flags);
-               memset(data, 0, bv->bv_len);
-               flush_dcache_page(bv->bv_page);
-               bvec_kunmap_irq(data, &flags);
-       }
-}
-
 #endif /* __LINUX_BIO_H */
diff -puN 
fs/bio.c~add-local-bio-pool-support-and-modify-dm-uninline-zero_fill_bio 
fs/bio.c
--- 25/fs/bio.c~add-local-bio-pool-support-and-modify-dm-uninline-zero_fill_bio 
2005-02-02 18:17:18.227901072 -0800
+++ 25-akpm/fs/bio.c    2005-02-02 18:17:18.231900464 -0800
@@ -182,6 +182,21 @@ struct bio *bio_alloc(int gfp_mask, int 
        return bio_alloc_bioset(gfp_mask, nr_iovecs, fs_bio_set);
 }
 
+void zero_fill_bio(struct bio *bio)
+{
+       unsigned long flags;
+       struct bio_vec *bv;
+       int i;
+
+       bio_for_each_segment(bv, bio, i) {
+               char *data = bvec_kmap_irq(bv, &flags);
+               memset(data, 0, bv->bv_len);
+               flush_dcache_page(bv->bv_page);
+               bvec_kunmap_irq(data, &flags);
+       }
+}
+EXPORT_SYMBOL(zero_fill_bio);
+
 /**
  * bio_put - release a reference to a bio
  * @bio:   bio to release reference to
_

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to