From 523b58fc0485a7cc391493e05c1a6543041a43d1 Mon Sep 17 00:00:00 2001 From: Wojciech Malikowski Date: Mon, 29 Jul 2019 11:32:12 -0400 Subject: [PATCH] lib/ftl: Fix padding size calculation Padding size calculation should take into account already acquired write buffer entries in case number of blocks left for closing band is less than write buffer size. Signed-off-by: Wojciech Malikowski Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/463525 (master) (cherry picked from commit b08337c216f23878d10c52d54c2177cccf495898) Change-Id: I0f9c9bc94eb5a4736eede30ec424c81103e1256f Signed-off-by: Tomasz Zawadzki Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/467136 Tested-by: SPDK CI Jenkins Reviewed-by: Paul Luse Reviewed-by: Jim Harris Reviewed-by: Wojciech Malikowski Reviewed-by: Ben Walker --- lib/ftl/ftl_core.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/ftl/ftl_core.c b/lib/ftl/ftl_core.c index ce2f54722..c01dcf09b 100644 --- a/lib/ftl/ftl_core.c +++ b/lib/ftl/ftl_core.c @@ -758,8 +758,10 @@ ftl_wptr_pad_band(struct ftl_wptr *wptr) size_t blocks_left, rwb_size, pad_size; blocks_left = ftl_wptr_user_lbks_left(wptr); + assert(size <= blocks_left); + assert(blocks_left % dev->xfer_size == 0); rwb_size = ftl_rwb_size(dev->rwb) - size; - pad_size = spdk_min(blocks_left, rwb_size); + pad_size = spdk_min(blocks_left - size, rwb_size); /* Pad write buffer until band is full */ ftl_rwb_pad(dev, pad_size);