mirror of https://gitee.com/openkylin/linux.git
block: make bio_inc_remaining() interface accessible again
Commit 326e1dbb57
("block: remove management of bi_remaining when
restoring original bi_end_io") made bio_inc_remaining() private to bio.c
because the only use-case that made sense was confined to the
bio_chain() interface.
Since that time DM thinp went on to use bio_chain() in its relatively
complex implementation of async discard support. That implementation,
even when converted over to use the new async __blkdev_issue_discard()
interface, depends on deferred completion of the original discard bio --
which is most appropriately implemented using bio_inc_remaining().
DM thinp foolishly duplicated bio_inc_remaining(), local to dm-thin.c as
__bio_inc_remaining(), so re-exporting bio_inc_remaining() allows us to
put an end to that foolishness.
All said, bio_inc_remaining() should really only be used in conjunction
with bio_chain(). It isn't intended for generic bio reference counting.
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Acked-by: Joe Thornber <ejt@redhat.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
This commit is contained in:
parent
bbd848e0fa
commit
0ef5a50c16
11
block/bio.c
11
block/bio.c
|
@ -311,17 +311,6 @@ static void bio_chain_endio(struct bio *bio)
|
||||||
bio_endio(__bio_chain_endio(bio));
|
bio_endio(__bio_chain_endio(bio));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Increment chain count for the bio. Make sure the CHAIN flag update
|
|
||||||
* is visible before the raised count.
|
|
||||||
*/
|
|
||||||
static inline void bio_inc_remaining(struct bio *bio)
|
|
||||||
{
|
|
||||||
bio_set_flag(bio, BIO_CHAIN);
|
|
||||||
smp_mb__before_atomic();
|
|
||||||
atomic_inc(&bio->__bi_remaining);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* bio_chain - chain bio completions
|
* bio_chain - chain bio completions
|
||||||
* @bio: the target bio
|
* @bio: the target bio
|
||||||
|
|
|
@ -702,6 +702,17 @@ static inline struct bio *bio_list_get(struct bio_list *bl)
|
||||||
return bio;
|
return bio;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Increment chain count for the bio. Make sure the CHAIN flag update
|
||||||
|
* is visible before the raised count.
|
||||||
|
*/
|
||||||
|
static inline void bio_inc_remaining(struct bio *bio)
|
||||||
|
{
|
||||||
|
bio_set_flag(bio, BIO_CHAIN);
|
||||||
|
smp_mb__before_atomic();
|
||||||
|
atomic_inc(&bio->__bi_remaining);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* bio_set is used to allow other portions of the IO system to
|
* bio_set is used to allow other portions of the IO system to
|
||||||
* allocate their own private memory pools for bio and iovec structures.
|
* allocate their own private memory pools for bio and iovec structures.
|
||||||
|
|
Loading…
Reference in New Issue