drbd: mod_req has now a return value
Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com> Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
This commit is contained in:
Родитель
288f422ec1
Коммит
2a80699f80
|
@ -382,10 +382,11 @@ out_conflict:
|
||||||
* and it enforces that we have to think in a very structured manner
|
* and it enforces that we have to think in a very structured manner
|
||||||
* about the "events" that may happen to a request during its life time ...
|
* about the "events" that may happen to a request during its life time ...
|
||||||
*/
|
*/
|
||||||
void __req_mod(struct drbd_request *req, enum drbd_req_event what,
|
int __req_mod(struct drbd_request *req, enum drbd_req_event what,
|
||||||
struct bio_and_error *m)
|
struct bio_and_error *m)
|
||||||
{
|
{
|
||||||
struct drbd_conf *mdev = req->mdev;
|
struct drbd_conf *mdev = req->mdev;
|
||||||
|
int rv = 0;
|
||||||
m->bio = NULL;
|
m->bio = NULL;
|
||||||
|
|
||||||
switch (what) {
|
switch (what) {
|
||||||
|
@ -657,6 +658,8 @@ void __req_mod(struct drbd_request *req, enum drbd_req_event what,
|
||||||
_req_may_be_done(req, m);
|
_req_may_be_done(req, m);
|
||||||
break;
|
break;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* we may do a local read if:
|
/* we may do a local read if:
|
||||||
|
|
|
@ -297,36 +297,43 @@ struct bio_and_error {
|
||||||
|
|
||||||
extern void _req_may_be_done(struct drbd_request *req,
|
extern void _req_may_be_done(struct drbd_request *req,
|
||||||
struct bio_and_error *m);
|
struct bio_and_error *m);
|
||||||
extern void __req_mod(struct drbd_request *req, enum drbd_req_event what,
|
extern int __req_mod(struct drbd_request *req, enum drbd_req_event what,
|
||||||
struct bio_and_error *m);
|
struct bio_and_error *m);
|
||||||
extern void complete_master_bio(struct drbd_conf *mdev,
|
extern void complete_master_bio(struct drbd_conf *mdev,
|
||||||
struct bio_and_error *m);
|
struct bio_and_error *m);
|
||||||
|
|
||||||
/* use this if you don't want to deal with calling complete_master_bio()
|
/* use this if you don't want to deal with calling complete_master_bio()
|
||||||
* outside the spinlock, e.g. when walking some list on cleanup. */
|
* outside the spinlock, e.g. when walking some list on cleanup. */
|
||||||
static inline void _req_mod(struct drbd_request *req, enum drbd_req_event what)
|
static inline int _req_mod(struct drbd_request *req, enum drbd_req_event what)
|
||||||
{
|
{
|
||||||
struct drbd_conf *mdev = req->mdev;
|
struct drbd_conf *mdev = req->mdev;
|
||||||
struct bio_and_error m;
|
struct bio_and_error m;
|
||||||
|
int rv;
|
||||||
|
|
||||||
/* __req_mod possibly frees req, do not touch req after that! */
|
/* __req_mod possibly frees req, do not touch req after that! */
|
||||||
__req_mod(req, what, &m);
|
rv = __req_mod(req, what, &m);
|
||||||
if (m.bio)
|
if (m.bio)
|
||||||
complete_master_bio(mdev, &m);
|
complete_master_bio(mdev, &m);
|
||||||
|
|
||||||
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* completion of master bio is outside of spinlock.
|
/* completion of master bio is outside of spinlock.
|
||||||
* If you need it irqsave, do it your self! */
|
* If you need it irqsave, do it your self! */
|
||||||
static inline void req_mod(struct drbd_request *req,
|
static inline int req_mod(struct drbd_request *req,
|
||||||
enum drbd_req_event what)
|
enum drbd_req_event what)
|
||||||
{
|
{
|
||||||
struct drbd_conf *mdev = req->mdev;
|
struct drbd_conf *mdev = req->mdev;
|
||||||
struct bio_and_error m;
|
struct bio_and_error m;
|
||||||
|
int rv;
|
||||||
|
|
||||||
spin_lock_irq(&mdev->req_lock);
|
spin_lock_irq(&mdev->req_lock);
|
||||||
__req_mod(req, what, &m);
|
rv = __req_mod(req, what, &m);
|
||||||
spin_unlock_irq(&mdev->req_lock);
|
spin_unlock_irq(&mdev->req_lock);
|
||||||
|
|
||||||
if (m.bio)
|
if (m.bio)
|
||||||
complete_master_bio(mdev, &m);
|
complete_master_bio(mdev, &m);
|
||||||
|
|
||||||
|
return rv;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
Загрузка…
Ссылка в новой задаче