* [RFC 00/12] drbd: part 11 of adding multiple volume support to drbd
@ 2011-09-29 8:15 Philipp Reisner
2011-09-29 8:15 ` [PATCH 01/12] drbd: validate_req_change_req_state(): Return 0 upon success and an error code otherwise Philipp Reisner
` (11 more replies)
0 siblings, 12 replies; 13+ messages in thread
From: Philipp Reisner @ 2011-09-29 8:15 UTC (permalink / raw)
To: linux-kernel, Jens Axboe; +Cc: drbd-dev
This the first request for review of drbd-8.4. The complete set has
477 patches. This is the eleventh installment containing 12 patches.
The whole set is available here:
git://git.drbd.org/linux-2.6-drbd.git for-jens
and is jens_for-3.2_drivers...for-jens
and this part is 6533a57^...570536f
This patch series contains:
* Code Cleanups, removal of wrong comments
* Adapt 0 = success / -errno calling convention
* renamed ee -> peer_req
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH 01/12] drbd: validate_req_change_req_state(): Return 0 upon success and an error code otherwise
2011-09-29 8:15 [RFC 00/12] drbd: part 11 of adding multiple volume support to drbd Philipp Reisner
@ 2011-09-29 8:15 ` Philipp Reisner
2011-09-29 8:15 ` [PATCH 02/12] drbd: Make all asynchronous command handlers return " Philipp Reisner
` (10 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Philipp Reisner @ 2011-09-29 8:15 UTC (permalink / raw)
To: linux-kernel, Jens Axboe; +Cc: drbd-dev
From: Andreas Gruenbacher <agruen@linbit.com>
Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
---
drivers/block/drbd/drbd_receiver.c | 26 +++++++++++++-------------
1 files changed, 13 insertions(+), 13 deletions(-)
diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_receiver.c
index 7539253..af9c2c0 100644
--- a/drivers/block/drbd/drbd_receiver.c
+++ b/drivers/block/drbd/drbd_receiver.c
@@ -4587,14 +4587,14 @@ validate_req_change_req_state(struct drbd_conf *mdev, u64 id, sector_t sector,
req = find_request(mdev, root, id, sector, missing_ok, func);
if (unlikely(!req)) {
spin_unlock_irq(&mdev->tconn->req_lock);
- return false;
+ return -EIO;
}
__req_mod(req, what, &m);
spin_unlock_irq(&mdev->tconn->req_lock);
if (m.bio)
complete_master_bio(mdev, &m);
- return true;
+ return 0;
}
static int got_BlockAck(struct drbd_tconn *tconn, struct packet_info *pi)
@@ -4642,9 +4642,9 @@ static int got_BlockAck(struct drbd_tconn *tconn, struct packet_info *pi)
return false;
}
- return validate_req_change_req_state(mdev, p->block_id, sector,
- &mdev->write_requests, __func__,
- what, false);
+ return !validate_req_change_req_state(mdev, p->block_id, sector,
+ &mdev->write_requests, __func__,
+ what, false);
}
static int got_NegAck(struct drbd_tconn *tconn, struct packet_info *pi)
@@ -4655,7 +4655,7 @@ static int got_NegAck(struct drbd_tconn *tconn, struct packet_info *pi)
int size = be32_to_cpu(p->blksize);
bool missing_ok = tconn->net_conf->wire_protocol == DRBD_PROT_A ||
tconn->net_conf->wire_protocol == DRBD_PROT_B;
- bool found;
+ int err;
mdev = vnr_to_mdev(tconn, pi->vnr);
if (!mdev)
@@ -4669,10 +4669,10 @@ static int got_NegAck(struct drbd_tconn *tconn, struct packet_info *pi)
return true;
}
- found = validate_req_change_req_state(mdev, p->block_id, sector,
- &mdev->write_requests, __func__,
- NEG_ACKED, missing_ok);
- if (!found) {
+ err = validate_req_change_req_state(mdev, p->block_id, sector,
+ &mdev->write_requests, __func__,
+ NEG_ACKED, missing_ok);
+ if (err) {
/* Protocol A has no P_WRITE_ACKs, but has P_NEG_ACKs.
The master bio might already be completed, therefore the
request is no longer in the collision hash. */
@@ -4700,9 +4700,9 @@ static int got_NegDReply(struct drbd_tconn *tconn, struct packet_info *pi)
dev_err(DEV, "Got NegDReply; Sector %llus, len %u; Fail original request.\n",
(unsigned long long)sector, be32_to_cpu(p->blksize));
- return validate_req_change_req_state(mdev, p->block_id, sector,
- &mdev->read_requests, __func__,
- NEG_ACKED, false);
+ return !validate_req_change_req_state(mdev, p->block_id, sector,
+ &mdev->read_requests, __func__,
+ NEG_ACKED, false);
}
static int got_NegRSDReply(struct drbd_tconn *tconn, struct packet_info *pi)
--
1.7.4.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 02/12] drbd: Make all asynchronous command handlers return 0 upon success and an error code otherwise
2011-09-29 8:15 [RFC 00/12] drbd: part 11 of adding multiple volume support to drbd Philipp Reisner
2011-09-29 8:15 ` [PATCH 01/12] drbd: validate_req_change_req_state(): Return 0 upon success and an error code otherwise Philipp Reisner
@ 2011-09-29 8:15 ` Philipp Reisner
2011-09-29 8:15 ` [PATCH 03/12] drbd: drbd_init_ee() no longer exists Philipp Reisner
` (9 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Philipp Reisner @ 2011-09-29 8:15 UTC (permalink / raw)
To: linux-kernel, Jens Axboe; +Cc: drbd-dev
From: Andreas Gruenbacher <agruen@linbit.com>
Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
---
drivers/block/drbd/drbd_receiver.c | 69 +++++++++++++++++-------------------
1 files changed, 33 insertions(+), 36 deletions(-)
diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_receiver.c
index af9c2c0..cd2586b 100644
--- a/drivers/block/drbd/drbd_receiver.c
+++ b/drivers/block/drbd/drbd_receiver.c
@@ -4506,7 +4506,7 @@ static int got_conn_RqSReply(struct drbd_tconn *tconn, struct packet_info *pi)
}
wake_up(&tconn->ping_wait);
- return true;
+ return 0;
}
static int got_RqSReply(struct drbd_tconn *tconn, struct packet_info *pi)
@@ -4517,7 +4517,7 @@ static int got_RqSReply(struct drbd_tconn *tconn, struct packet_info *pi)
mdev = vnr_to_mdev(tconn, pi->vnr);
if (!mdev)
- return false;
+ return -EIO;
if (retcode >= SS_SUCCESS) {
set_bit(CL_ST_CHG_SUCCESS, &mdev->flags);
@@ -4528,12 +4528,12 @@ static int got_RqSReply(struct drbd_tconn *tconn, struct packet_info *pi)
}
wake_up(&mdev->state_wait);
- return true;
+ return 0;
}
static int got_Ping(struct drbd_tconn *tconn, struct packet_info *pi)
{
- return !drbd_send_ping_ack(tconn);
+ return drbd_send_ping_ack(tconn);
}
@@ -4544,7 +4544,7 @@ static int got_PingAck(struct drbd_tconn *tconn, struct packet_info *pi)
if (!test_and_set_bit(GOT_PING_ACK, &tconn->flags))
wake_up(&tconn->ping_wait);
- return true;
+ return 0;
}
static int got_IsInSync(struct drbd_tconn *tconn, struct packet_info *pi)
@@ -4556,7 +4556,7 @@ static int got_IsInSync(struct drbd_tconn *tconn, struct packet_info *pi)
mdev = vnr_to_mdev(tconn, pi->vnr);
if (!mdev)
- return false;
+ return -EIO;
D_ASSERT(mdev->tconn->agreed_pro_version >= 89);
@@ -4572,7 +4572,7 @@ static int got_IsInSync(struct drbd_tconn *tconn, struct packet_info *pi)
dec_rs_pending(mdev);
atomic_add(blksize >> 9, &mdev->rs_sect_in);
- return true;
+ return 0;
}
static int
@@ -4607,14 +4607,14 @@ static int got_BlockAck(struct drbd_tconn *tconn, struct packet_info *pi)
mdev = vnr_to_mdev(tconn, pi->vnr);
if (!mdev)
- return false;
+ return -EIO;
update_peer_seq(mdev, be32_to_cpu(p->seq_num));
if (p->block_id == ID_SYNCER) {
drbd_set_in_sync(mdev, sector, blksize);
dec_rs_pending(mdev);
- return true;
+ return 0;
}
switch (pi->cmd) {
case P_RS_WRITE_ACK:
@@ -4638,13 +4638,12 @@ static int got_BlockAck(struct drbd_tconn *tconn, struct packet_info *pi)
what = POSTPONE_WRITE;
break;
default:
- D_ASSERT(0);
- return false;
+ BUG();
}
- return !validate_req_change_req_state(mdev, p->block_id, sector,
- &mdev->write_requests, __func__,
- what, false);
+ return validate_req_change_req_state(mdev, p->block_id, sector,
+ &mdev->write_requests, __func__,
+ what, false);
}
static int got_NegAck(struct drbd_tconn *tconn, struct packet_info *pi)
@@ -4659,14 +4658,14 @@ static int got_NegAck(struct drbd_tconn *tconn, struct packet_info *pi)
mdev = vnr_to_mdev(tconn, pi->vnr);
if (!mdev)
- return false;
+ return -EIO;
update_peer_seq(mdev, be32_to_cpu(p->seq_num));
if (p->block_id == ID_SYNCER) {
dec_rs_pending(mdev);
drbd_rs_failed_io(mdev, sector, size);
- return true;
+ return 0;
}
err = validate_req_change_req_state(mdev, p->block_id, sector,
@@ -4679,10 +4678,10 @@ static int got_NegAck(struct drbd_tconn *tconn, struct packet_info *pi)
/* In Protocol B we might already have got a P_RECV_ACK
but then get a P_NEG_ACK afterwards. */
if (!missing_ok)
- return false;
+ return err;
drbd_set_out_of_sync(mdev, sector, size);
}
- return true;
+ return 0;
}
static int got_NegDReply(struct drbd_tconn *tconn, struct packet_info *pi)
@@ -4693,16 +4692,16 @@ static int got_NegDReply(struct drbd_tconn *tconn, struct packet_info *pi)
mdev = vnr_to_mdev(tconn, pi->vnr);
if (!mdev)
- return false;
+ return -EIO;
update_peer_seq(mdev, be32_to_cpu(p->seq_num));
dev_err(DEV, "Got NegDReply; Sector %llus, len %u; Fail original request.\n",
(unsigned long long)sector, be32_to_cpu(p->blksize));
- return !validate_req_change_req_state(mdev, p->block_id, sector,
- &mdev->read_requests, __func__,
- NEG_ACKED, false);
+ return validate_req_change_req_state(mdev, p->block_id, sector,
+ &mdev->read_requests, __func__,
+ NEG_ACKED, false);
}
static int got_NegRSDReply(struct drbd_tconn *tconn, struct packet_info *pi)
@@ -4714,7 +4713,7 @@ static int got_NegRSDReply(struct drbd_tconn *tconn, struct packet_info *pi)
mdev = vnr_to_mdev(tconn, pi->vnr);
if (!mdev)
- return false;
+ return -EIO;
sector = be64_to_cpu(p->sector);
size = be32_to_cpu(p->blksize);
@@ -4731,14 +4730,12 @@ static int got_NegRSDReply(struct drbd_tconn *tconn, struct packet_info *pi)
case P_RS_CANCEL:
break;
default:
- D_ASSERT(0);
- put_ldev(mdev);
- return false;
+ BUG();
}
put_ldev(mdev);
}
- return true;
+ return 0;
}
static int got_BarrierAck(struct drbd_tconn *tconn, struct packet_info *pi)
@@ -4748,7 +4745,7 @@ static int got_BarrierAck(struct drbd_tconn *tconn, struct packet_info *pi)
mdev = vnr_to_mdev(tconn, pi->vnr);
if (!mdev)
- return false;
+ return -EIO;
tl_release(mdev->tconn, p->barrier, be32_to_cpu(p->set_size));
@@ -4759,7 +4756,7 @@ static int got_BarrierAck(struct drbd_tconn *tconn, struct packet_info *pi)
add_timer(&mdev->start_resync_timer);
}
- return true;
+ return 0;
}
static int got_OVResult(struct drbd_tconn *tconn, struct packet_info *pi)
@@ -4772,7 +4769,7 @@ static int got_OVResult(struct drbd_tconn *tconn, struct packet_info *pi)
mdev = vnr_to_mdev(tconn, pi->vnr);
if (!mdev)
- return false;
+ return -EIO;
sector = be64_to_cpu(p->sector);
size = be32_to_cpu(p->blksize);
@@ -4785,7 +4782,7 @@ static int got_OVResult(struct drbd_tconn *tconn, struct packet_info *pi)
ov_out_of_sync_print(mdev);
if (!get_ldev(mdev))
- return true;
+ return 0;
drbd_rs_complete_io(mdev, sector);
dec_rs_pending(mdev);
@@ -4809,12 +4806,12 @@ static int got_OVResult(struct drbd_tconn *tconn, struct packet_info *pi)
}
}
put_ldev(mdev);
- return true;
+ return 0;
}
static int got_skip(struct drbd_tconn *tconn, struct packet_info *pi)
{
- return true;
+ return 0;
}
static int tconn_process_done_ee(struct drbd_tconn *tconn)
@@ -4968,10 +4965,10 @@ int drbd_asender(struct drbd_thread *thi)
}
}
if (received == expect) {
- bool rv;
+ bool err;
- rv = cmd->fn(tconn, &pi);
- if (!rv) {
+ err = cmd->fn(tconn, &pi);
+ if (err) {
conn_err(tconn, "%pf failed\n", cmd->fn);
goto reconnect;
}
--
1.7.4.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 03/12] drbd: drbd_init_ee() no longer exists
2011-09-29 8:15 [RFC 00/12] drbd: part 11 of adding multiple volume support to drbd Philipp Reisner
2011-09-29 8:15 ` [PATCH 01/12] drbd: validate_req_change_req_state(): Return 0 upon success and an error code otherwise Philipp Reisner
2011-09-29 8:15 ` [PATCH 02/12] drbd: Make all asynchronous command handlers return " Philipp Reisner
@ 2011-09-29 8:15 ` Philipp Reisner
2011-09-29 8:15 ` [PATCH 04/12] drbd: Rename drbd_alloc_ee() to drbd_alloc_peer_req() Philipp Reisner
` (8 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Philipp Reisner @ 2011-09-29 8:15 UTC (permalink / raw)
To: linux-kernel, Jens Axboe; +Cc: drbd-dev
From: Andreas Gruenbacher <agruen@linbit.com>
Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
---
drivers/block/drbd/drbd_main.c | 4 ----
drivers/block/drbd/drbd_receiver.c | 1 -
2 files changed, 0 insertions(+), 5 deletions(-)
diff --git a/drivers/block/drbd/drbd_main.c b/drivers/block/drbd/drbd_main.c
index 6afcfab..f759a7e 100644
--- a/drivers/block/drbd/drbd_main.c
+++ b/drivers/block/drbd/drbd_main.c
@@ -2006,10 +2006,6 @@ void drbd_mdev_cleanup(struct drbd_conf *mdev)
drbd_free_resources(mdev);
clear_bit(AL_SUSPENDED, &mdev->flags);
- /*
- * currently we drbd_init_ee only on module load, so
- * we may do drbd_release_ee only on module unload!
- */
D_ASSERT(list_empty(&mdev->active_ee));
D_ASSERT(list_empty(&mdev->sync_ee));
D_ASSERT(list_empty(&mdev->done_ee));
diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_receiver.c
index cd2586b..b4ab05e 100644
--- a/drivers/block/drbd/drbd_receiver.c
+++ b/drivers/block/drbd/drbd_receiver.c
@@ -309,7 +309,6 @@ You need to hold the req_lock:
You must not have the req_lock:
drbd_free_ee()
drbd_alloc_ee()
- drbd_init_ee()
drbd_release_ee()
drbd_ee_fix_bhs()
drbd_process_done_ee()
--
1.7.4.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 04/12] drbd: Rename drbd_alloc_ee() to drbd_alloc_peer_req()
2011-09-29 8:15 [RFC 00/12] drbd: part 11 of adding multiple volume support to drbd Philipp Reisner
` (2 preceding siblings ...)
2011-09-29 8:15 ` [PATCH 03/12] drbd: drbd_init_ee() no longer exists Philipp Reisner
@ 2011-09-29 8:15 ` Philipp Reisner
2011-09-29 8:15 ` [PATCH 05/12] drbd: Rename drbd_free_ee() and variants to *_peer_req() Philipp Reisner
` (7 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Philipp Reisner @ 2011-09-29 8:15 UTC (permalink / raw)
To: linux-kernel, Jens Axboe; +Cc: drbd-dev
From: Andreas Gruenbacher <agruen@linbit.com>
Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
---
drivers/block/drbd/drbd_int.h | 6 +++---
drivers/block/drbd/drbd_receiver.c | 12 ++++++------
drivers/block/drbd/drbd_worker.c | 3 ++-
3 files changed, 11 insertions(+), 10 deletions(-)
diff --git a/drivers/block/drbd/drbd_int.h b/drivers/block/drbd/drbd_int.h
index 8f67093..3198eb1 100644
--- a/drivers/block/drbd/drbd_int.h
+++ b/drivers/block/drbd/drbd_int.h
@@ -1456,9 +1456,9 @@ extern int drbd_submit_peer_request(struct drbd_conf *,
struct drbd_peer_request *, const unsigned,
const int);
extern int drbd_release_ee(struct drbd_conf *mdev, struct list_head *list);
-extern struct drbd_peer_request *drbd_alloc_ee(struct drbd_conf *,
- u64, sector_t, unsigned int,
- gfp_t) __must_hold(local);
+extern struct drbd_peer_request *drbd_alloc_peer_req(struct drbd_conf *, u64,
+ sector_t, unsigned int,
+ gfp_t) __must_hold(local);
extern void drbd_free_some_ee(struct drbd_conf *, struct drbd_peer_request *,
int);
#define drbd_free_ee(m,e) drbd_free_some_ee(m, e, 0)
diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_receiver.c
index b4ab05e..0187426 100644
--- a/drivers/block/drbd/drbd_receiver.c
+++ b/drivers/block/drbd/drbd_receiver.c
@@ -308,7 +308,7 @@ You need to hold the req_lock:
You must not have the req_lock:
drbd_free_ee()
- drbd_alloc_ee()
+ drbd_alloc_peer_req()
drbd_release_ee()
drbd_ee_fix_bhs()
drbd_process_done_ee()
@@ -317,8 +317,8 @@ You must not have the req_lock:
*/
struct drbd_peer_request *
-drbd_alloc_ee(struct drbd_conf *mdev, u64 id, sector_t sector,
- unsigned int data_size, gfp_t gfp_mask) __must_hold(local)
+drbd_alloc_peer_req(struct drbd_conf *mdev, u64 id, sector_t sector,
+ unsigned int data_size, gfp_t gfp_mask) __must_hold(local)
{
struct drbd_peer_request *peer_req;
struct page *page;
@@ -330,7 +330,7 @@ drbd_alloc_ee(struct drbd_conf *mdev, u64 id, sector_t sector,
peer_req = mempool_alloc(drbd_ee_mempool, gfp_mask & ~__GFP_HIGHMEM);
if (!peer_req) {
if (!(gfp_mask & __GFP_NOWARN))
- dev_err(DEV, "alloc_ee: Allocation of an EE failed\n");
+ dev_err(DEV, "%s: allocation failed\n", __func__);
return NULL;
}
@@ -1379,7 +1379,7 @@ read_in_block(struct drbd_conf *mdev, u64 id, sector_t sector,
/* GFP_NOIO, because we must not cause arbitrary write-out: in a DRBD
* "criss-cross" setup, that might cause write-out on some other DRBD,
* which in turn might block on the other node at this very place. */
- peer_req = drbd_alloc_ee(mdev, id, sector, data_size, GFP_NOIO);
+ peer_req = drbd_alloc_peer_req(mdev, id, sector, data_size, GFP_NOIO);
if (!peer_req)
return NULL;
@@ -2240,7 +2240,7 @@ static int receive_DataRequest(struct drbd_tconn *tconn, struct packet_info *pi)
/* GFP_NOIO, because we must not cause arbitrary write-out: in a DRBD
* "criss-cross" setup, that might cause write-out on some other DRBD,
* which in turn might block on the other node at this very place. */
- peer_req = drbd_alloc_ee(mdev, p->block_id, sector, size, GFP_NOIO);
+ peer_req = drbd_alloc_peer_req(mdev, p->block_id, sector, size, GFP_NOIO);
if (!peer_req) {
put_ldev(mdev);
return -ENOMEM;
diff --git a/drivers/block/drbd/drbd_worker.c b/drivers/block/drbd/drbd_worker.c
index 3c7b6d7..dfdfb5a 100644
--- a/drivers/block/drbd/drbd_worker.c
+++ b/drivers/block/drbd/drbd_worker.c
@@ -354,7 +354,8 @@ static int read_for_csum(struct drbd_conf *mdev, sector_t sector, int size)
/* GFP_TRY, because if there is no memory available right now, this may
* be rescheduled for later. It is "only" background resync, after all. */
- peer_req = drbd_alloc_ee(mdev, ID_SYNCER /* unused */, sector, size, GFP_TRY);
+ peer_req = drbd_alloc_peer_req(mdev, ID_SYNCER /* unused */, sector,
+ size, GFP_TRY);
if (!peer_req)
goto defer;
--
1.7.4.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 05/12] drbd: Rename drbd_free_ee() and variants to *_peer_req()
2011-09-29 8:15 [RFC 00/12] drbd: part 11 of adding multiple volume support to drbd Philipp Reisner
` (3 preceding siblings ...)
2011-09-29 8:15 ` [PATCH 04/12] drbd: Rename drbd_alloc_ee() to drbd_alloc_peer_req() Philipp Reisner
@ 2011-09-29 8:15 ` Philipp Reisner
2011-09-29 8:15 ` [PATCH 06/12] drbd: Rename drbd_release_ee() to drbd_free_peer_reqs() Philipp Reisner
` (6 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Philipp Reisner @ 2011-09-29 8:15 UTC (permalink / raw)
To: linux-kernel, Jens Axboe; +Cc: drbd-dev
From: Andreas Gruenbacher <agruen@linbit.com>
Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
---
drivers/block/drbd/drbd_int.h | 8 ++++----
drivers/block/drbd/drbd_receiver.c | 22 +++++++++++-----------
drivers/block/drbd/drbd_worker.c | 22 +++++++++++-----------
3 files changed, 26 insertions(+), 26 deletions(-)
diff --git a/drivers/block/drbd/drbd_int.h b/drivers/block/drbd/drbd_int.h
index 3198eb1..d94c6756 100644
--- a/drivers/block/drbd/drbd_int.h
+++ b/drivers/block/drbd/drbd_int.h
@@ -1459,10 +1459,10 @@ extern int drbd_release_ee(struct drbd_conf *mdev, struct list_head *list);
extern struct drbd_peer_request *drbd_alloc_peer_req(struct drbd_conf *, u64,
sector_t, unsigned int,
gfp_t) __must_hold(local);
-extern void drbd_free_some_ee(struct drbd_conf *, struct drbd_peer_request *,
- int);
-#define drbd_free_ee(m,e) drbd_free_some_ee(m, e, 0)
-#define drbd_free_net_ee(m,e) drbd_free_some_ee(m, e, 1)
+extern void __drbd_free_peer_req(struct drbd_conf *, struct drbd_peer_request *,
+ int);
+#define drbd_free_peer_req(m,e) __drbd_free_peer_req(m, e, 0)
+#define drbd_free_net_peer_req(m,e) __drbd_free_peer_req(m, e, 1)
extern void drbd_wait_ee_list_empty(struct drbd_conf *mdev,
struct list_head *head);
extern void _drbd_wait_ee_list_empty(struct drbd_conf *mdev,
diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_receiver.c
index 0187426..a8c5c76 100644
--- a/drivers/block/drbd/drbd_receiver.c
+++ b/drivers/block/drbd/drbd_receiver.c
@@ -223,7 +223,7 @@ static void drbd_kick_lo_and_reclaim_net(struct drbd_conf *mdev)
spin_unlock_irq(&mdev->tconn->req_lock);
list_for_each_entry_safe(peer_req, t, &reclaimed, w.list)
- drbd_free_net_ee(mdev, peer_req);
+ drbd_free_net_peer_req(mdev, peer_req);
}
/**
@@ -307,7 +307,7 @@ You need to hold the req_lock:
_drbd_wait_ee_list_empty()
You must not have the req_lock:
- drbd_free_ee()
+ drbd_free_peer_req()
drbd_alloc_peer_req()
drbd_release_ee()
drbd_ee_fix_bhs()
@@ -362,7 +362,7 @@ drbd_alloc_peer_req(struct drbd_conf *mdev, u64 id, sector_t sector,
return NULL;
}
-void drbd_free_some_ee(struct drbd_conf *mdev, struct drbd_peer_request *peer_req,
+void __drbd_free_peer_req(struct drbd_conf *mdev, struct drbd_peer_request *peer_req,
int is_net)
{
if (peer_req->flags & EE_HAS_DIGEST)
@@ -385,7 +385,7 @@ int drbd_release_ee(struct drbd_conf *mdev, struct list_head *list)
spin_unlock_irq(&mdev->tconn->req_lock);
list_for_each_entry_safe(peer_req, t, &work_list, w.list) {
- drbd_free_some_ee(mdev, peer_req, is_net);
+ __drbd_free_peer_req(mdev, peer_req, is_net);
count++;
}
return count;
@@ -412,7 +412,7 @@ static int drbd_process_done_ee(struct drbd_conf *mdev)
spin_unlock_irq(&mdev->tconn->req_lock);
list_for_each_entry_safe(peer_req, t, &reclaimed, w.list)
- drbd_free_net_ee(mdev, peer_req);
+ drbd_free_net_peer_req(mdev, peer_req);
/* possible callbacks here:
* e_end_block, and e_end_resync_block, e_send_discard_write.
@@ -425,7 +425,7 @@ static int drbd_process_done_ee(struct drbd_conf *mdev)
err2 = peer_req->w.cb(&peer_req->w, !!err);
if (!err)
err = err2;
- drbd_free_ee(mdev, peer_req);
+ drbd_free_peer_req(mdev, peer_req);
}
wake_up(&mdev->ee_wait);
@@ -1395,7 +1395,7 @@ read_in_block(struct drbd_conf *mdev, u64 id, sector_t sector,
}
kunmap(page);
if (err) {
- drbd_free_ee(mdev, peer_req);
+ drbd_free_peer_req(mdev, peer_req);
return NULL;
}
ds -= len;
@@ -1406,7 +1406,7 @@ read_in_block(struct drbd_conf *mdev, u64 id, sector_t sector,
if (memcmp(dig_in, dig_vv, dgs)) {
dev_err(DEV, "Digest integrity check FAILED: %llus +%u\n",
(unsigned long long)sector, data_size);
- drbd_free_ee(mdev, peer_req);
+ drbd_free_peer_req(mdev, peer_req);
return NULL;
}
}
@@ -1547,7 +1547,7 @@ static int recv_resync_read(struct drbd_conf *mdev, sector_t sector, int data_si
list_del(&peer_req->w.list);
spin_unlock_irq(&mdev->tconn->req_lock);
- drbd_free_ee(mdev, peer_req);
+ drbd_free_peer_req(mdev, peer_req);
fail:
put_ldev(mdev);
return -EIO;
@@ -2109,7 +2109,7 @@ static int receive_Data(struct drbd_tconn *tconn, struct packet_info *pi)
out_interrupted:
drbd_may_finish_epoch(mdev, peer_req->epoch, EV_PUT + EV_CLEANUP);
put_ldev(mdev);
- drbd_free_ee(mdev, peer_req);
+ drbd_free_peer_req(mdev, peer_req);
return err;
}
@@ -2364,7 +2364,7 @@ submit:
out_free_e:
put_ldev(mdev);
- drbd_free_ee(mdev, peer_req);
+ drbd_free_peer_req(mdev, peer_req);
return -EIO;
}
diff --git a/drivers/block/drbd/drbd_worker.c b/drivers/block/drbd/drbd_worker.c
index dfdfb5a..d2317c7 100644
--- a/drivers/block/drbd/drbd_worker.c
+++ b/drivers/block/drbd/drbd_worker.c
@@ -319,7 +319,7 @@ static int w_e_send_csum(struct drbd_work *w, int cancel)
* some distributed deadlock, if the other side blocks on
* congestion as well, because our receiver blocks in
* drbd_pp_alloc due to pp_in_use > max_buffers. */
- drbd_free_ee(mdev, peer_req);
+ drbd_free_peer_req(mdev, peer_req);
peer_req = NULL;
inc_rs_pending(mdev);
err = drbd_send_drequest_csum(mdev, sector, size,
@@ -333,7 +333,7 @@ static int w_e_send_csum(struct drbd_work *w, int cancel)
out:
if (peer_req)
- drbd_free_ee(mdev, peer_req);
+ drbd_free_peer_req(mdev, peer_req);
if (unlikely(err))
dev_err(DEV, "drbd_send_drequest(..., csum) failed\n");
@@ -376,7 +376,7 @@ static int read_for_csum(struct drbd_conf *mdev, sector_t sector, int size)
list_del(&peer_req->w.list);
spin_unlock_irq(&mdev->tconn->req_lock);
- drbd_free_ee(mdev, peer_req);
+ drbd_free_peer_req(mdev, peer_req);
defer:
put_ldev(mdev);
return -EAGAIN;
@@ -900,7 +900,7 @@ static void move_to_net_ee_or_free(struct drbd_conf *mdev, struct drbd_peer_requ
spin_unlock_irq(&mdev->tconn->req_lock);
wake_up(&drbd_pp_wait);
} else
- drbd_free_ee(mdev, peer_req);
+ drbd_free_peer_req(mdev, peer_req);
}
/**
@@ -916,7 +916,7 @@ int w_e_end_data_req(struct drbd_work *w, int cancel)
int err;
if (unlikely(cancel)) {
- drbd_free_ee(mdev, peer_req);
+ drbd_free_peer_req(mdev, peer_req);
dec_unacked(mdev);
return 0;
}
@@ -953,7 +953,7 @@ int w_e_end_rsdata_req(struct drbd_work *w, int cancel)
int err;
if (unlikely(cancel)) {
- drbd_free_ee(mdev, peer_req);
+ drbd_free_peer_req(mdev, peer_req);
dec_unacked(mdev);
return 0;
}
@@ -1005,7 +1005,7 @@ int w_e_end_csum_rs_req(struct drbd_work *w, int cancel)
int err, eq = 0;
if (unlikely(cancel)) {
- drbd_free_ee(mdev, peer_req);
+ drbd_free_peer_req(mdev, peer_req);
dec_unacked(mdev);
return 0;
}
@@ -1088,7 +1088,7 @@ int w_e_end_ov_req(struct drbd_work *w, int cancel)
* some distributed deadlock, if the other side blocks on
* congestion as well, because our receiver blocks in
* drbd_pp_alloc due to pp_in_use > max_buffers. */
- drbd_free_ee(mdev, peer_req);
+ drbd_free_peer_req(mdev, peer_req);
peer_req = NULL;
inc_rs_pending(mdev);
err = drbd_send_drequest_csum(mdev, sector, size,
@@ -1100,7 +1100,7 @@ int w_e_end_ov_req(struct drbd_work *w, int cancel)
out:
if (peer_req)
- drbd_free_ee(mdev, peer_req);
+ drbd_free_peer_req(mdev, peer_req);
dec_unacked(mdev);
return err;
}
@@ -1128,7 +1128,7 @@ int w_e_end_ov_reply(struct drbd_work *w, int cancel)
int err, eq = 0;
if (unlikely(cancel)) {
- drbd_free_ee(mdev, peer_req);
+ drbd_free_peer_req(mdev, peer_req);
dec_unacked(mdev);
return 0;
}
@@ -1159,7 +1159,7 @@ int w_e_end_ov_reply(struct drbd_work *w, int cancel)
* some distributed deadlock, if the other side blocks on
* congestion as well, because our receiver blocks in
* drbd_pp_alloc due to pp_in_use > max_buffers. */
- drbd_free_ee(mdev, peer_req);
+ drbd_free_peer_req(mdev, peer_req);
if (!eq)
drbd_ov_out_of_sync_found(mdev, sector, size);
else
--
1.7.4.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 06/12] drbd: Rename drbd_release_ee() to drbd_free_peer_reqs()
2011-09-29 8:15 [RFC 00/12] drbd: part 11 of adding multiple volume support to drbd Philipp Reisner
` (4 preceding siblings ...)
2011-09-29 8:15 ` [PATCH 05/12] drbd: Rename drbd_free_ee() and variants to *_peer_req() Philipp Reisner
@ 2011-09-29 8:15 ` Philipp Reisner
2011-09-29 8:15 ` [PATCH 07/12] drbd: Rename reclaim_net_ee(), drbd_process_done_ee(), drbd_process_done_ee(), tconn_process_done_ee() to *_peer_reqs Philipp Reisner
` (5 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Philipp Reisner @ 2011-09-29 8:15 UTC (permalink / raw)
To: linux-kernel, Jens Axboe; +Cc: drbd-dev
From: Andreas Gruenbacher <agruen@linbit.com>
Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
---
drivers/block/drbd/drbd_int.h | 2 +-
drivers/block/drbd/drbd_main.c | 14 +++++++-------
drivers/block/drbd/drbd_receiver.c | 6 +++---
3 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/drivers/block/drbd/drbd_int.h b/drivers/block/drbd/drbd_int.h
index d94c6756..53d6dc3 100644
--- a/drivers/block/drbd/drbd_int.h
+++ b/drivers/block/drbd/drbd_int.h
@@ -1455,7 +1455,7 @@ extern int drbd_rs_should_slow_down(struct drbd_conf *mdev, sector_t sector);
extern int drbd_submit_peer_request(struct drbd_conf *,
struct drbd_peer_request *, const unsigned,
const int);
-extern int drbd_release_ee(struct drbd_conf *mdev, struct list_head *list);
+extern int drbd_free_peer_reqs(struct drbd_conf *, struct list_head *);
extern struct drbd_peer_request *drbd_alloc_peer_req(struct drbd_conf *, u64,
sector_t, unsigned int,
gfp_t) __must_hold(local);
diff --git a/drivers/block/drbd/drbd_main.c b/drivers/block/drbd/drbd_main.c
index f759a7e..5149755 100644
--- a/drivers/block/drbd/drbd_main.c
+++ b/drivers/block/drbd/drbd_main.c
@@ -2153,27 +2153,27 @@ static struct notifier_block drbd_notifier = {
.notifier_call = drbd_notify_sys,
};
-static void drbd_release_ee_lists(struct drbd_conf *mdev)
+static void drbd_release_all_peer_reqs(struct drbd_conf *mdev)
{
int rr;
- rr = drbd_release_ee(mdev, &mdev->active_ee);
+ rr = drbd_free_peer_reqs(mdev, &mdev->active_ee);
if (rr)
dev_err(DEV, "%d EEs in active list found!\n", rr);
- rr = drbd_release_ee(mdev, &mdev->sync_ee);
+ rr = drbd_free_peer_reqs(mdev, &mdev->sync_ee);
if (rr)
dev_err(DEV, "%d EEs in sync list found!\n", rr);
- rr = drbd_release_ee(mdev, &mdev->read_ee);
+ rr = drbd_free_peer_reqs(mdev, &mdev->read_ee);
if (rr)
dev_err(DEV, "%d EEs in read list found!\n", rr);
- rr = drbd_release_ee(mdev, &mdev->done_ee);
+ rr = drbd_free_peer_reqs(mdev, &mdev->done_ee);
if (rr)
dev_err(DEV, "%d EEs in done list found!\n", rr);
- rr = drbd_release_ee(mdev, &mdev->net_ee);
+ rr = drbd_free_peer_reqs(mdev, &mdev->net_ee);
if (rr)
dev_err(DEV, "%d EEs in net list found!\n", rr);
}
@@ -2205,7 +2205,7 @@ void drbd_delete_device(unsigned int minor)
drbd_free_resources(mdev);
- drbd_release_ee_lists(mdev);
+ drbd_release_all_peer_reqs(mdev);
lc_destroy(mdev->act_log);
lc_destroy(mdev->resync);
diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_receiver.c
index a8c5c76..b59d2f8 100644
--- a/drivers/block/drbd/drbd_receiver.c
+++ b/drivers/block/drbd/drbd_receiver.c
@@ -309,7 +309,7 @@ You need to hold the req_lock:
You must not have the req_lock:
drbd_free_peer_req()
drbd_alloc_peer_req()
- drbd_release_ee()
+ drbd_free_peer_reqs()
drbd_ee_fix_bhs()
drbd_process_done_ee()
drbd_clear_done_ee()
@@ -373,7 +373,7 @@ void __drbd_free_peer_req(struct drbd_conf *mdev, struct drbd_peer_request *peer
mempool_free(peer_req, drbd_ee_mempool);
}
-int drbd_release_ee(struct drbd_conf *mdev, struct list_head *list)
+int drbd_free_peer_reqs(struct drbd_conf *mdev, struct list_head *list)
{
LIST_HEAD(work_list);
struct drbd_peer_request *peer_req, *t;
@@ -4175,7 +4175,7 @@ static int drbd_disconnected(int vnr, void *p, void *data)
* Actually we don't care for exactly when the network stack does its
* put_page(), but release our reference on these pages right here.
*/
- i = drbd_release_ee(mdev, &mdev->net_ee);
+ i = drbd_free_peer_reqs(mdev, &mdev->net_ee);
if (i)
dev_info(DEV, "net_ee not empty, killed %u entries\n", i);
i = atomic_read(&mdev->pp_in_use_by_net);
--
1.7.4.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 07/12] drbd: Rename reclaim_net_ee(), drbd_process_done_ee(), drbd_process_done_ee(), tconn_process_done_ee() to *_peer_reqs
2011-09-29 8:15 [RFC 00/12] drbd: part 11 of adding multiple volume support to drbd Philipp Reisner
` (5 preceding siblings ...)
2011-09-29 8:15 ` [PATCH 06/12] drbd: Rename drbd_release_ee() to drbd_free_peer_reqs() Philipp Reisner
@ 2011-09-29 8:15 ` Philipp Reisner
2011-09-29 8:15 ` [PATCH 08/12] drbd: Rename drbd_{ ee -> peer_req }_has_active_page Philipp Reisner
` (4 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Philipp Reisner @ 2011-09-29 8:15 UTC (permalink / raw)
To: linux-kernel, Jens Axboe; +Cc: drbd-dev
From: Andreas Gruenbacher <agruen@linbit.com>
Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
---
drivers/block/drbd/drbd_receiver.c | 42 ++++++++++++++++-------------------
1 files changed, 19 insertions(+), 23 deletions(-)
diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_receiver.c
index b59d2f8..0eda1f0 100644
--- a/drivers/block/drbd/drbd_receiver.c
+++ b/drivers/block/drbd/drbd_receiver.c
@@ -195,7 +195,8 @@ static struct page *drbd_pp_first_pages_or_try_alloc(struct drbd_conf *mdev, int
return NULL;
}
-static void reclaim_net_ee(struct drbd_conf *mdev, struct list_head *to_be_freed)
+static void reclaim_finished_net_peer_reqs(struct drbd_conf *mdev,
+ struct list_head *to_be_freed)
{
struct drbd_peer_request *peer_req;
struct list_head *le, *tle;
@@ -219,7 +220,7 @@ static void drbd_kick_lo_and_reclaim_net(struct drbd_conf *mdev)
struct drbd_peer_request *peer_req, *t;
spin_lock_irq(&mdev->tconn->req_lock);
- reclaim_net_ee(mdev, &reclaimed);
+ reclaim_finished_net_peer_reqs(mdev, &reclaimed);
spin_unlock_irq(&mdev->tconn->req_lock);
list_for_each_entry_safe(peer_req, t, &reclaimed, w.list)
@@ -311,7 +312,7 @@ You must not have the req_lock:
drbd_alloc_peer_req()
drbd_free_peer_reqs()
drbd_ee_fix_bhs()
- drbd_process_done_ee()
+ drbd_finish_peer_reqs()
drbd_clear_done_ee()
drbd_wait_ee_list_empty()
*/
@@ -391,15 +392,10 @@ int drbd_free_peer_reqs(struct drbd_conf *mdev, struct list_head *list)
return count;
}
-
-/* See also comments in _req_mod(,BARRIER_ACKED)
- * and receive_Barrier.
- *
- * Move entries from net_ee to done_ee, if ready.
- * Grab done_ee, call all callbacks, free the entries.
- * The callbacks typically send out ACKs.
+/*
+ * See also comments in _req_mod(,BARRIER_ACKED) and receive_Barrier.
*/
-static int drbd_process_done_ee(struct drbd_conf *mdev)
+static int drbd_finish_peer_reqs(struct drbd_conf *mdev)
{
LIST_HEAD(work_list);
LIST_HEAD(reclaimed);
@@ -407,7 +403,7 @@ static int drbd_process_done_ee(struct drbd_conf *mdev)
int err = 0;
spin_lock_irq(&mdev->tconn->req_lock);
- reclaim_net_ee(mdev, &reclaimed);
+ reclaim_finished_net_peer_reqs(mdev, &reclaimed);
list_splice_init(&mdev->done_ee, &work_list);
spin_unlock_irq(&mdev->tconn->req_lock);
@@ -1491,8 +1487,10 @@ static int recv_dless_read(struct drbd_conf *mdev, struct drbd_request *req,
return 0;
}
-/* e_end_resync_block() is called via
- * drbd_process_done_ee() by asender only */
+/*
+ * e_end_resync_block() is called in asender context via
+ * drbd_finish_peer_reqs().
+ */
static int e_end_resync_block(struct drbd_work *w, int unused)
{
struct drbd_peer_request *peer_req =
@@ -1681,8 +1679,8 @@ static void restart_conflicting_writes(struct drbd_conf *mdev,
}
}
-/* e_end_block() is called via drbd_process_done_ee().
- * this means this function only runs in the asender thread
+/*
+ * e_end_block() is called in asender context via drbd_finish_peer_reqs().
*/
static int e_end_block(struct drbd_work *w, int cancel)
{
@@ -4146,9 +4144,7 @@ static int drbd_disconnected(int vnr, void *p, void *data)
* to be "canceled" */
drbd_flush_workqueue(mdev);
- /* This also does reclaim_net_ee(). If we do this too early, we might
- * miss some resync ee and pages.*/
- drbd_process_done_ee(mdev);
+ drbd_finish_peer_reqs(mdev);
kfree(mdev->p_uuid);
mdev->p_uuid = NULL;
@@ -4813,7 +4809,7 @@ static int got_skip(struct drbd_tconn *tconn, struct packet_info *pi)
return 0;
}
-static int tconn_process_done_ee(struct drbd_tconn *tconn)
+static int tconn_finish_peer_reqs(struct drbd_tconn *tconn)
{
struct drbd_conf *mdev;
int i, not_empty = 0;
@@ -4822,7 +4818,7 @@ static int tconn_process_done_ee(struct drbd_tconn *tconn)
clear_bit(SIGNAL_ASENDER, &tconn->flags);
flush_signals(current);
idr_for_each_entry(&tconn->volumes, mdev, i) {
- if (drbd_process_done_ee(mdev))
+ if (drbd_finish_peer_reqs(mdev))
return 1; /* error */
}
set_bit(SIGNAL_ASENDER, &tconn->flags);
@@ -4895,8 +4891,8 @@ int drbd_asender(struct drbd_thread *thi)
much to send */
if (!tconn->net_conf->no_cork)
drbd_tcp_cork(tconn->meta.socket);
- if (tconn_process_done_ee(tconn)) {
- conn_err(tconn, "tconn_process_done_ee() failed\n");
+ if (tconn_finish_peer_reqs(tconn)) {
+ conn_err(tconn, "tconn_finish_peer_reqs() failed\n");
goto reconnect;
}
/* but unconditionally uncork unless disabled */
--
1.7.4.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 08/12] drbd: Rename drbd_{ ee -> peer_req }_has_active_page
2011-09-29 8:15 [RFC 00/12] drbd: part 11 of adding multiple volume support to drbd Philipp Reisner
` (6 preceding siblings ...)
2011-09-29 8:15 ` [PATCH 07/12] drbd: Rename reclaim_net_ee(), drbd_process_done_ee(), drbd_process_done_ee(), tconn_process_done_ee() to *_peer_reqs Philipp Reisner
@ 2011-09-29 8:15 ` Philipp Reisner
2011-09-29 8:15 ` [PATCH 09/12] drbd: Make drbd_wait_ee_list_empty() and _drbd_wait_ee_list_empty() static Philipp Reisner
` (3 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Philipp Reisner @ 2011-09-29 8:15 UTC (permalink / raw)
To: linux-kernel, Jens Axboe; +Cc: drbd-dev
From: Andreas Gruenbacher <agruen@linbit.com>
Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
---
drivers/block/drbd/drbd_int.h | 2 +-
drivers/block/drbd/drbd_receiver.c | 2 +-
drivers/block/drbd/drbd_worker.c | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/block/drbd/drbd_int.h b/drivers/block/drbd/drbd_int.h
index 53d6dc3..d64aaf3 100644
--- a/drivers/block/drbd/drbd_int.h
+++ b/drivers/block/drbd/drbd_int.h
@@ -1594,7 +1594,7 @@ static inline int drbd_bio_has_active_page(struct bio *bio)
return 0;
}
-static inline int drbd_ee_has_active_page(struct drbd_peer_request *peer_req)
+static inline int drbd_peer_req_has_active_page(struct drbd_peer_request *peer_req)
{
struct page *page = peer_req->pages;
page_chain_for_each(page) {
diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_receiver.c
index 0eda1f0..8b73589 100644
--- a/drivers/block/drbd/drbd_receiver.c
+++ b/drivers/block/drbd/drbd_receiver.c
@@ -208,7 +208,7 @@ static void reclaim_finished_net_peer_reqs(struct drbd_conf *mdev,
list_for_each_safe(le, tle, &mdev->net_ee) {
peer_req = list_entry(le, struct drbd_peer_request, w.list);
- if (drbd_ee_has_active_page(peer_req))
+ if (drbd_peer_req_has_active_page(peer_req))
break;
list_move(le, to_be_freed);
}
diff --git a/drivers/block/drbd/drbd_worker.c b/drivers/block/drbd/drbd_worker.c
index d2317c7..2a80563 100644
--- a/drivers/block/drbd/drbd_worker.c
+++ b/drivers/block/drbd/drbd_worker.c
@@ -890,7 +890,7 @@ out:
/* helper */
static void move_to_net_ee_or_free(struct drbd_conf *mdev, struct drbd_peer_request *peer_req)
{
- if (drbd_ee_has_active_page(peer_req)) {
+ if (drbd_peer_req_has_active_page(peer_req)) {
/* This might happen if sendpage() has not finished */
int i = (peer_req->i.size + PAGE_SIZE -1) >> PAGE_SHIFT;
atomic_add(i, &mdev->pp_in_use_by_net);
--
1.7.4.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 09/12] drbd: Make drbd_wait_ee_list_empty() and _drbd_wait_ee_list_empty() static
2011-09-29 8:15 [RFC 00/12] drbd: part 11 of adding multiple volume support to drbd Philipp Reisner
` (7 preceding siblings ...)
2011-09-29 8:15 ` [PATCH 08/12] drbd: Rename drbd_{ ee -> peer_req }_has_active_page Philipp Reisner
@ 2011-09-29 8:15 ` Philipp Reisner
2011-09-29 8:15 ` [PATCH 10/12] drbd: Rename drbd_pp_first_pages_or_try_alloc() to __drbd_alloc_pages() Philipp Reisner
` (2 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Philipp Reisner @ 2011-09-29 8:15 UTC (permalink / raw)
To: linux-kernel, Jens Axboe; +Cc: drbd-dev
From: Andreas Gruenbacher <agruen@linbit.com>
Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
---
drivers/block/drbd/drbd_int.h | 4 ----
drivers/block/drbd/drbd_receiver.c | 6 ++++--
2 files changed, 4 insertions(+), 6 deletions(-)
diff --git a/drivers/block/drbd/drbd_int.h b/drivers/block/drbd/drbd_int.h
index d64aaf3..8fc21a7 100644
--- a/drivers/block/drbd/drbd_int.h
+++ b/drivers/block/drbd/drbd_int.h
@@ -1463,10 +1463,6 @@ extern void __drbd_free_peer_req(struct drbd_conf *, struct drbd_peer_request *,
int);
#define drbd_free_peer_req(m,e) __drbd_free_peer_req(m, e, 0)
#define drbd_free_net_peer_req(m,e) __drbd_free_peer_req(m, e, 1)
-extern void drbd_wait_ee_list_empty(struct drbd_conf *mdev,
- struct list_head *head);
-extern void _drbd_wait_ee_list_empty(struct drbd_conf *mdev,
- struct list_head *head);
extern void drbd_set_recv_tcq(struct drbd_conf *mdev, int tcq_enabled);
extern void _drbd_clear_done_ee(struct drbd_conf *mdev, struct list_head *to_be_freed);
extern void conn_flush_workqueue(struct drbd_tconn *tconn);
diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_receiver.c
index 8b73589..3003d9e 100644
--- a/drivers/block/drbd/drbd_receiver.c
+++ b/drivers/block/drbd/drbd_receiver.c
@@ -428,7 +428,8 @@ static int drbd_finish_peer_reqs(struct drbd_conf *mdev)
return err;
}
-void _drbd_wait_ee_list_empty(struct drbd_conf *mdev, struct list_head *head)
+static void _drbd_wait_ee_list_empty(struct drbd_conf *mdev,
+ struct list_head *head)
{
DEFINE_WAIT(wait);
@@ -443,7 +444,8 @@ void _drbd_wait_ee_list_empty(struct drbd_conf *mdev, struct list_head *head)
}
}
-void drbd_wait_ee_list_empty(struct drbd_conf *mdev, struct list_head *head)
+static void drbd_wait_ee_list_empty(struct drbd_conf *mdev,
+ struct list_head *head)
{
spin_lock_irq(&mdev->tconn->req_lock);
_drbd_wait_ee_list_empty(mdev, head);
--
1.7.4.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 10/12] drbd: Rename drbd_pp_first_pages_or_try_alloc() to __drbd_alloc_pages()
2011-09-29 8:15 [RFC 00/12] drbd: part 11 of adding multiple volume support to drbd Philipp Reisner
` (8 preceding siblings ...)
2011-09-29 8:15 ` [PATCH 09/12] drbd: Make drbd_wait_ee_list_empty() and _drbd_wait_ee_list_empty() static Philipp Reisner
@ 2011-09-29 8:15 ` Philipp Reisner
2011-09-29 8:15 ` [PATCH 11/12] drbd: Rename drbd_pp_alloc() to drbd_alloc_pages() and make it non-static Philipp Reisner
2011-09-29 8:15 ` [PATCH 12/12] drbd: Rename drbd_pp_free() to drbd_free_pages() Philipp Reisner
11 siblings, 0 replies; 13+ messages in thread
From: Philipp Reisner @ 2011-09-29 8:15 UTC (permalink / raw)
To: linux-kernel, Jens Axboe; +Cc: drbd-dev
From: Andreas Gruenbacher <agruen@linbit.com>
Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
---
drivers/block/drbd/drbd_receiver.c | 9 +++++----
1 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_receiver.c
index 3003d9e..0e4e651 100644
--- a/drivers/block/drbd/drbd_receiver.c
+++ b/drivers/block/drbd/drbd_receiver.c
@@ -150,11 +150,12 @@ static void page_chain_add(struct page **head,
*head = chain_first;
}
-static struct page *drbd_pp_first_pages_or_try_alloc(struct drbd_conf *mdev, int number)
+static struct page *__drbd_alloc_pages(struct drbd_conf *mdev,
+ unsigned int number)
{
struct page *page = NULL;
struct page *tmp = NULL;
- int i = 0;
+ unsigned int i = 0;
/* Yes, testing drbd_pp_vacant outside the lock is racy.
* So what. It saves a spin_lock. */
@@ -247,7 +248,7 @@ static struct page *drbd_pp_alloc(struct drbd_conf *mdev, unsigned number, bool
/* Yes, we may run up to @number over max_buffers. If we
* follow it strictly, the admin will get it wrong anyways. */
if (atomic_read(&mdev->pp_in_use) < mdev->tconn->net_conf->max_buffers)
- page = drbd_pp_first_pages_or_try_alloc(mdev, number);
+ page = __drbd_alloc_pages(mdev, number);
while (page == NULL) {
prepare_to_wait(&drbd_pp_wait, &wait, TASK_INTERRUPTIBLE);
@@ -255,7 +256,7 @@ static struct page *drbd_pp_alloc(struct drbd_conf *mdev, unsigned number, bool
drbd_kick_lo_and_reclaim_net(mdev);
if (atomic_read(&mdev->pp_in_use) < mdev->tconn->net_conf->max_buffers) {
- page = drbd_pp_first_pages_or_try_alloc(mdev, number);
+ page = __drbd_alloc_pages(mdev, number);
if (page)
break;
}
--
1.7.4.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 11/12] drbd: Rename drbd_pp_alloc() to drbd_alloc_pages() and make it non-static
2011-09-29 8:15 [RFC 00/12] drbd: part 11 of adding multiple volume support to drbd Philipp Reisner
` (9 preceding siblings ...)
2011-09-29 8:15 ` [PATCH 10/12] drbd: Rename drbd_pp_first_pages_or_try_alloc() to __drbd_alloc_pages() Philipp Reisner
@ 2011-09-29 8:15 ` Philipp Reisner
2011-09-29 8:15 ` [PATCH 12/12] drbd: Rename drbd_pp_free() to drbd_free_pages() Philipp Reisner
11 siblings, 0 replies; 13+ messages in thread
From: Philipp Reisner @ 2011-09-29 8:15 UTC (permalink / raw)
To: linux-kernel, Jens Axboe; +Cc: drbd-dev
From: Andreas Gruenbacher <agruen@linbit.com>
Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
---
drivers/block/drbd/drbd_int.h | 1 +
drivers/block/drbd/drbd_receiver.c | 15 ++++++++-------
drivers/block/drbd/drbd_worker.c | 6 +++---
3 files changed, 12 insertions(+), 10 deletions(-)
diff --git a/drivers/block/drbd/drbd_int.h b/drivers/block/drbd/drbd_int.h
index 8fc21a7..2d9a124 100644
--- a/drivers/block/drbd/drbd_int.h
+++ b/drivers/block/drbd/drbd_int.h
@@ -1463,6 +1463,7 @@ extern void __drbd_free_peer_req(struct drbd_conf *, struct drbd_peer_request *,
int);
#define drbd_free_peer_req(m,e) __drbd_free_peer_req(m, e, 0)
#define drbd_free_net_peer_req(m,e) __drbd_free_peer_req(m, e, 1)
+extern struct page *drbd_alloc_pages(struct drbd_conf *, unsigned int, bool);
extern void drbd_set_recv_tcq(struct drbd_conf *mdev, int tcq_enabled);
extern void _drbd_clear_done_ee(struct drbd_conf *mdev, struct list_head *to_be_freed);
extern void conn_flush_workqueue(struct drbd_tconn *tconn);
diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_receiver.c
index 0e4e651..eeeedeb 100644
--- a/drivers/block/drbd/drbd_receiver.c
+++ b/drivers/block/drbd/drbd_receiver.c
@@ -184,7 +184,7 @@ static struct page *__drbd_alloc_pages(struct drbd_conf *mdev,
return page;
/* Not enough pages immediately available this time.
- * No need to jump around here, drbd_pp_alloc will retry this
+ * No need to jump around here, drbd_alloc_pages will retry this
* function "soon". */
if (page) {
tmp = page_chain_tail(page, NULL);
@@ -229,7 +229,7 @@ static void drbd_kick_lo_and_reclaim_net(struct drbd_conf *mdev)
}
/**
- * drbd_pp_alloc() - Returns @number pages, retries forever (or until signalled)
+ * drbd_alloc_pages() - Returns @number pages, retries forever (or until signalled)
* @mdev: DRBD device.
* @number: number of pages requested
* @retry: whether to retry, if not enough pages are available right now
@@ -240,7 +240,8 @@ static void drbd_kick_lo_and_reclaim_net(struct drbd_conf *mdev)
*
* Returns a page chain linked via page->private.
*/
-static struct page *drbd_pp_alloc(struct drbd_conf *mdev, unsigned number, bool retry)
+struct page *drbd_alloc_pages(struct drbd_conf *mdev, unsigned int number,
+ bool retry)
{
struct page *page = NULL;
DEFINE_WAIT(wait);
@@ -265,7 +266,7 @@ static struct page *drbd_pp_alloc(struct drbd_conf *mdev, unsigned number, bool
break;
if (signal_pending(current)) {
- dev_warn(DEV, "drbd_pp_alloc interrupted!\n");
+ dev_warn(DEV, "drbd_alloc_pages interrupted!\n");
break;
}
@@ -278,7 +279,7 @@ static struct page *drbd_pp_alloc(struct drbd_conf *mdev, unsigned number, bool
return page;
}
-/* Must not be used from irq, as that may deadlock: see drbd_pp_alloc.
+/* Must not be used from irq, as that may deadlock: see drbd_alloc_pages.
* Is also used from inside an other spin_lock_irq(&mdev->tconn->req_lock);
* Either links the page chain back to the global pool,
* or returns all pages to the system. */
@@ -336,7 +337,7 @@ drbd_alloc_peer_req(struct drbd_conf *mdev, u64 id, sector_t sector,
return NULL;
}
- page = drbd_pp_alloc(mdev, nr_pages, (gfp_mask & __GFP_WAIT));
+ page = drbd_alloc_pages(mdev, nr_pages, (gfp_mask & __GFP_WAIT));
if (!page)
goto fail;
@@ -1425,7 +1426,7 @@ static int drbd_drain_block(struct drbd_conf *mdev, int data_size)
if (!data_size)
return 0;
- page = drbd_pp_alloc(mdev, 1, 1);
+ page = drbd_alloc_pages(mdev, 1, 1);
data = kmap(page);
while (data_size) {
diff --git a/drivers/block/drbd/drbd_worker.c b/drivers/block/drbd/drbd_worker.c
index 2a80563..62536bc 100644
--- a/drivers/block/drbd/drbd_worker.c
+++ b/drivers/block/drbd/drbd_worker.c
@@ -318,7 +318,7 @@ static int w_e_send_csum(struct drbd_work *w, int cancel)
* In case we block on congestion, we could otherwise run into
* some distributed deadlock, if the other side blocks on
* congestion as well, because our receiver blocks in
- * drbd_pp_alloc due to pp_in_use > max_buffers. */
+ * drbd_alloc_pages due to pp_in_use > max_buffers. */
drbd_free_peer_req(mdev, peer_req);
peer_req = NULL;
inc_rs_pending(mdev);
@@ -1087,7 +1087,7 @@ int w_e_end_ov_req(struct drbd_work *w, int cancel)
* In case we block on congestion, we could otherwise run into
* some distributed deadlock, if the other side blocks on
* congestion as well, because our receiver blocks in
- * drbd_pp_alloc due to pp_in_use > max_buffers. */
+ * drbd_alloc_pages due to pp_in_use > max_buffers. */
drbd_free_peer_req(mdev, peer_req);
peer_req = NULL;
inc_rs_pending(mdev);
@@ -1158,7 +1158,7 @@ int w_e_end_ov_reply(struct drbd_work *w, int cancel)
* In case we block on congestion, we could otherwise run into
* some distributed deadlock, if the other side blocks on
* congestion as well, because our receiver blocks in
- * drbd_pp_alloc due to pp_in_use > max_buffers. */
+ * drbd_alloc_pages due to pp_in_use > max_buffers. */
drbd_free_peer_req(mdev, peer_req);
if (!eq)
drbd_ov_out_of_sync_found(mdev, sector, size);
--
1.7.4.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 12/12] drbd: Rename drbd_pp_free() to drbd_free_pages()
2011-09-29 8:15 [RFC 00/12] drbd: part 11 of adding multiple volume support to drbd Philipp Reisner
` (10 preceding siblings ...)
2011-09-29 8:15 ` [PATCH 11/12] drbd: Rename drbd_pp_alloc() to drbd_alloc_pages() and make it non-static Philipp Reisner
@ 2011-09-29 8:15 ` Philipp Reisner
11 siblings, 0 replies; 13+ messages in thread
From: Philipp Reisner @ 2011-09-29 8:15 UTC (permalink / raw)
To: linux-kernel, Jens Axboe; +Cc: drbd-dev
From: Andreas Gruenbacher <agruen@linbit.com>
Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
---
drivers/block/drbd/drbd_receiver.c | 6 +++---
1 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_receiver.c
index eeeedeb..06c6152 100644
--- a/drivers/block/drbd/drbd_receiver.c
+++ b/drivers/block/drbd/drbd_receiver.c
@@ -283,7 +283,7 @@ struct page *drbd_alloc_pages(struct drbd_conf *mdev, unsigned int number,
* Is also used from inside an other spin_lock_irq(&mdev->tconn->req_lock);
* Either links the page chain back to the global pool,
* or returns all pages to the system. */
-static void drbd_pp_free(struct drbd_conf *mdev, struct page *page, int is_net)
+static void drbd_free_pages(struct drbd_conf *mdev, struct page *page, int is_net)
{
atomic_t *a = is_net ? &mdev->pp_in_use_by_net : &mdev->pp_in_use;
int i;
@@ -370,7 +370,7 @@ void __drbd_free_peer_req(struct drbd_conf *mdev, struct drbd_peer_request *peer
{
if (peer_req->flags & EE_HAS_DIGEST)
kfree(peer_req->digest);
- drbd_pp_free(mdev, peer_req->pages, is_net);
+ drbd_free_pages(mdev, peer_req->pages, is_net);
D_ASSERT(atomic_read(&peer_req->pending_bios) == 0);
D_ASSERT(drbd_interval_empty(&peer_req->i));
mempool_free(peer_req, drbd_ee_mempool);
@@ -1438,7 +1438,7 @@ static int drbd_drain_block(struct drbd_conf *mdev, int data_size)
data_size -= len;
}
kunmap(page);
- drbd_pp_free(mdev, page, 0);
+ drbd_free_pages(mdev, page, 0);
return err;
}
--
1.7.4.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
end of thread, other threads:[~2011-09-29 8:19 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-09-29 8:15 [RFC 00/12] drbd: part 11 of adding multiple volume support to drbd Philipp Reisner
2011-09-29 8:15 ` [PATCH 01/12] drbd: validate_req_change_req_state(): Return 0 upon success and an error code otherwise Philipp Reisner
2011-09-29 8:15 ` [PATCH 02/12] drbd: Make all asynchronous command handlers return " Philipp Reisner
2011-09-29 8:15 ` [PATCH 03/12] drbd: drbd_init_ee() no longer exists Philipp Reisner
2011-09-29 8:15 ` [PATCH 04/12] drbd: Rename drbd_alloc_ee() to drbd_alloc_peer_req() Philipp Reisner
2011-09-29 8:15 ` [PATCH 05/12] drbd: Rename drbd_free_ee() and variants to *_peer_req() Philipp Reisner
2011-09-29 8:15 ` [PATCH 06/12] drbd: Rename drbd_release_ee() to drbd_free_peer_reqs() Philipp Reisner
2011-09-29 8:15 ` [PATCH 07/12] drbd: Rename reclaim_net_ee(), drbd_process_done_ee(), drbd_process_done_ee(), tconn_process_done_ee() to *_peer_reqs Philipp Reisner
2011-09-29 8:15 ` [PATCH 08/12] drbd: Rename drbd_{ ee -> peer_req }_has_active_page Philipp Reisner
2011-09-29 8:15 ` [PATCH 09/12] drbd: Make drbd_wait_ee_list_empty() and _drbd_wait_ee_list_empty() static Philipp Reisner
2011-09-29 8:15 ` [PATCH 10/12] drbd: Rename drbd_pp_first_pages_or_try_alloc() to __drbd_alloc_pages() Philipp Reisner
2011-09-29 8:15 ` [PATCH 11/12] drbd: Rename drbd_pp_alloc() to drbd_alloc_pages() and make it non-static Philipp Reisner
2011-09-29 8:15 ` [PATCH 12/12] drbd: Rename drbd_pp_free() to drbd_free_pages() Philipp Reisner
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.