diff options
author | Philipp Reisner | 2011-05-03 16:19:31 +0200 |
---|---|---|
committer | Philipp Reisner | 2012-11-08 16:55:43 +0100 |
commit | 9958c857c760eec76f4fdf288b6f33a1c3b41833 (patch) | |
tree | 619cf127b6ef99494712d0139a8fdc7fead7f5a9 /drivers/block/drbd/drbd_receiver.c | |
parent | drbd: RCU for disk_conf (diff) | |
download | kernel-qcow2-linux-9958c857c760eec76f4fdf288b6f33a1c3b41833.tar.gz kernel-qcow2-linux-9958c857c760eec76f4fdf288b6f33a1c3b41833.tar.xz kernel-qcow2-linux-9958c857c760eec76f4fdf288b6f33a1c3b41833.zip |
drbd: Made the fifo object a self contained object (preparing for RCU)
* Moved rs_planed into it, named total
* When having a pointer to the object the values can
be embedded into the fifo object.
Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
Diffstat (limited to 'drivers/block/drbd/drbd_receiver.c')
-rw-r--r-- | drivers/block/drbd/drbd_receiver.c | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_receiver.c index add41764ec54..19b421f44ff7 100644 --- a/drivers/block/drbd/drbd_receiver.c +++ b/drivers/block/drbd/drbd_receiver.c @@ -3159,7 +3159,7 @@ static int receive_SyncParam(struct drbd_tconn *tconn, struct packet_info *pi) struct net_conf *old_net_conf, *new_net_conf = NULL; struct disk_conf *old_disk_conf, *new_disk_conf = NULL; const int apv = tconn->agreed_pro_version; - int *rs_plan_s = NULL; + struct fifo_buffer *rs_plan_s = NULL; int fifo_size = 0; int err; @@ -3277,8 +3277,8 @@ static int receive_SyncParam(struct drbd_tconn *tconn, struct packet_info *pi) new_disk_conf->c_max_rate = be32_to_cpu(p->c_max_rate); fifo_size = (new_disk_conf->c_plan_ahead * 10 * SLEEP_TIME) / HZ; - if (fifo_size != mdev->rs_plan_s.size && fifo_size > 0) { - rs_plan_s = kzalloc(sizeof(int) * fifo_size, GFP_KERNEL); + if (fifo_size != mdev->rs_plan_s->size) { + rs_plan_s = fifo_alloc(fifo_size); if (!rs_plan_s) { dev_err(DEV, "kmalloc of fifo_buffer failed"); put_ldev(mdev); @@ -3317,10 +3317,8 @@ static int receive_SyncParam(struct drbd_tconn *tconn, struct packet_info *pi) rcu_assign_pointer(mdev->ldev->disk_conf, new_disk_conf); spin_lock(&mdev->peer_seq_lock); if (rs_plan_s) { - kfree(mdev->rs_plan_s.values); - mdev->rs_plan_s.values = rs_plan_s; - mdev->rs_plan_s.size = fifo_size; - mdev->rs_planed = 0; + kfree(mdev->rs_plan_s); + mdev->rs_plan_s = rs_plan_s; } spin_unlock(&mdev->peer_seq_lock); @@ -3333,6 +3331,7 @@ static int receive_SyncParam(struct drbd_tconn *tconn, struct packet_info *pi) return 0; disconnect: + kfree(rs_plan_s); mutex_unlock(&mdev->tconn->conf_update); /* just for completeness: actually not needed, * as this is not reached if csums_tfm was ok. */ |