drbd: mod_req has now a return value
authorPhilipp Reisner <philipp.reisner@linbit.com>
Wed, 9 Jun 2010 12:07:43 +0000 (14:07 +0200)
committerPhilipp Reisner <philipp.reisner@linbit.com>
Thu, 14 Oct 2010 12:26:45 +0000 (14:26 +0200)
Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
drivers/block/drbd/drbd_req.c
drivers/block/drbd/drbd_req.h

index 4a30e2c..d9df1a1 100644 (file)
@@ -382,10 +382,11 @@ out_conflict:
  *  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 ...
  */
-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 drbd_conf *mdev = req->mdev;
+       int rv = 0;
        m->bio = NULL;
 
        switch (what) {
@@ -657,6 +658,8 @@ void __req_mod(struct drbd_request *req, enum drbd_req_event what,
                _req_may_be_done(req, m);
                break;
        };
+
+       return rv;
 }
 
 /* we may do a local read if:
index 47b931f..db37c6e 100644 (file)
@@ -297,36 +297,43 @@ struct bio_and_error {
 
 extern void _req_may_be_done(struct drbd_request *req,
                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);
 extern void complete_master_bio(struct drbd_conf *mdev,
                struct bio_and_error *m);
 
 /* 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. */
-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 bio_and_error m;
+       int rv;
 
        /* __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)
                complete_master_bio(mdev, &m);
+
+       return rv;
 }
 
 /* completion of master bio is outside of spinlock.
  * 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)
 {
        struct drbd_conf *mdev = req->mdev;
        struct bio_and_error m;
+       int rv;
+
        spin_lock_irq(&mdev->req_lock);
-       __req_mod(req, what, &m);
+       rv = __req_mod(req, what, &m);
        spin_unlock_irq(&mdev->req_lock);
 
        if (m.bio)
                complete_master_bio(mdev, &m);
+
+       return rv;
 }
 #endif