Re: [PATCH] tcmu: clean up the scatter helper
> On 11/08/2017 04:39 PM, Bryant G. Ly wrote: >> On 7/30/17 5:19 PM, Nicholas A. Bellinger wrote: >> >>> On Thu, 2017-07-13 at 14:33 +0800, lixi...@cmss.chinamobile.com wrote: From: Xiubo LiAdd some comments to make the scatter code to be more readable. Signed-off-by: Xiubo Li --- drivers/target/target_core_user.c | 30 +- 1 file changed, 25 insertions(+), 5 deletions(-) >>> Applied to target-pending/for-next. >>> >>> Thanks Xiubo + MNC. >>> >> This one seems to also be missing from the tree. >> > I ported this one to my patchset that is built without the > "tcmu: Add fifo type waiter list support to avoid starvation" patch: > > https://www.spinics.net/lists/target-devel/msg16153.html > Thanks Mike! I was trying to catch up and I missed all that. I see that the current for-next has everything. -Bryant
Re: [PATCH] tcmu: clean up the scatter helper
On 11/08/2017 04:39 PM, Bryant G. Ly wrote: > On 7/30/17 5:19 PM, Nicholas A. Bellinger wrote: > >> On Thu, 2017-07-13 at 14:33 +0800, lixi...@cmss.chinamobile.com wrote: >>> From: Xiubo Li>>> >>> Add some comments to make the scatter code to be more readable. >>> >>> Signed-off-by: Xiubo Li >>> --- >>> drivers/target/target_core_user.c | 30 +- >>> 1 file changed, 25 insertions(+), 5 deletions(-) >>> >> Applied to target-pending/for-next. >> >> Thanks Xiubo + MNC. >> > This one seems to also be missing from the tree. > I ported this one to my patchset that is built without the "tcmu: Add fifo type waiter list support to avoid starvation" patch: https://www.spinics.net/lists/target-devel/msg16153.html
Re: [PATCH] tcmu: clean up the scatter helper
On 7/30/17 5:19 PM, Nicholas A. Bellinger wrote: > On Thu, 2017-07-13 at 14:33 +0800, lixi...@cmss.chinamobile.com wrote: >> From: Xiubo Li>> >> Add some comments to make the scatter code to be more readable. >> >> Signed-off-by: Xiubo Li >> --- >> drivers/target/target_core_user.c | 30 +- >> 1 file changed, 25 insertions(+), 5 deletions(-) >> > Applied to target-pending/for-next. > > Thanks Xiubo + MNC. > This one seems to also be missing from the tree. -Bryant
Re: [PATCH] tcmu: clean up the scatter helper
On Thu, 2017-07-13 at 14:33 +0800, lixi...@cmss.chinamobile.com wrote: > From: Xiubo Li> > Add some comments to make the scatter code to be more readable. > > Signed-off-by: Xiubo Li > --- > drivers/target/target_core_user.c | 30 +- > 1 file changed, 25 insertions(+), 5 deletions(-) > Applied to target-pending/for-next. Thanks Xiubo + MNC.
Re: [PATCH] tcmu: clean up the scatter helper
On 07/13/2017 01:33 AM, lixi...@cmss.chinamobile.com wrote: > From: Xiubo Li> > Add some comments to make the scatter code to be more readable. > > Signed-off-by: Xiubo Li > --- Reviewed-by: Mike Christie
[PATCH] tcmu: clean up the scatter helper
From: Xiubo LiAdd some comments to make the scatter code to be more readable. Signed-off-by: Xiubo Li --- drivers/target/target_core_user.c | 30 +- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/drivers/target/target_core_user.c b/drivers/target/target_core_user.c index 9030c2a..4f529ed3 100644 --- a/drivers/target/target_core_user.c +++ b/drivers/target/target_core_user.c @@ -532,8 +532,7 @@ static inline size_t head_to_end(size_t head, size_t size) return size - head; } -static inline void new_iov(struct iovec **iov, int *iov_cnt, - struct tcmu_dev *udev) +static inline void new_iov(struct iovec **iov, int *iov_cnt) { struct iovec *iovec; @@ -586,19 +585,38 @@ static int scatter_data_area(struct tcmu_dev *udev, to = kmap_atomic(page); } - copy_bytes = min_t(size_t, sg_remaining, - block_remaining); + /* +* Covert to virtual offset of the ring data area. +*/ to_offset = get_block_offset_user(udev, dbi, block_remaining); + /* +* The following code will gather and map the blocks +* to the same iovec when the blocks are all next to +* each other. +*/ + copy_bytes = min_t(size_t, sg_remaining, + block_remaining); if (*iov_cnt != 0 && to_offset == iov_tail(*iov)) { + /* +* Will append to the current iovec, because +* the current block page is next to the +* previous one. +*/ (*iov)->iov_len += copy_bytes; } else { - new_iov(iov, iov_cnt, udev); + /* +* Will allocate a new iovec because we are +* first time here or the current block page +* is not next to the previous one. +*/ + new_iov(iov, iov_cnt); (*iov)->iov_base = (void __user *)to_offset; (*iov)->iov_len = copy_bytes; } + if (copy_data) { offset = DATA_BLOCK_SIZE - block_remaining; memcpy(to + offset, @@ -606,11 +624,13 @@ static int scatter_data_area(struct tcmu_dev *udev, copy_bytes); tcmu_flush_dcache_range(to, copy_bytes); } + sg_remaining -= copy_bytes; block_remaining -= copy_bytes; } kunmap_atomic(from - sg->offset); } + if (to) kunmap_atomic(to); -- 1.8.3.1