Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752056Ab3FHO2I (ORCPT ); Sat, 8 Jun 2013 10:28:08 -0400 Received: from mail-oa0-f48.google.com ([209.85.219.48]:41721 "EHLO mail-oa0-f48.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751585Ab3FHO2E (ORCPT ); Sat, 8 Jun 2013 10:28:04 -0400 MIME-Version: 1.0 In-Reply-To: <20130606210041.GD5045@htj.dyndns.org> References: <1370523178-5437-1-git-send-email-akinobu.mita@gmail.com> <1370523178-5437-2-git-send-email-akinobu.mita@gmail.com> <20130606210041.GD5045@htj.dyndns.org> Date: Sat, 8 Jun 2013 23:28:04 +0900 Message-ID: Subject: Re: [PATCH 1/3] lib/scatterlist: introduce sg_pcopy_from_buffer() and sg_pcopy_to_buffer() From: Akinobu Mita To: Tejun Heo Cc: LKML , Andrew Morton , Imre Deak , Herbert Xu , "David S. Miller" , linux-crypto@vger.kernel.org, "James E.J. Bottomley" , Douglas Gilbert , linux-scsi@vger.kernel.org Content-Type: text/plain; charset=ISO-8859-1 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2482 Lines: 67 2013/6/7 Tejun Heo : > Hello, > > On Thu, Jun 06, 2013 at 09:52:56PM +0900, Akinobu Mita wrote: >> +static bool sg_miter_get_next_page(struct sg_mapping_iter *miter) >> +{ >> + if (!miter->__remaining) { >> + struct scatterlist *sg; >> + unsigned long pgoffset; >> + >> + if (!__sg_page_iter_next(&miter->piter)) >> + return false; >> + >> + sg = miter->piter.sg; >> + pgoffset = miter->piter.sg_pgoffset; >> + >> + miter->__offset = pgoffset ? 0 : sg->offset; >> + miter->__remaining = sg->offset + sg->length - >> + (pgoffset << PAGE_SHIFT) - miter->__offset; >> + miter->__remaining = min_t(unsigned long, miter->__remaining, >> + PAGE_SIZE - miter->__offset); >> + } >> + >> + return true; >> +} > > It'd be better if separating out this function is a separate patch. > Mixing factoring out something and adding new stuff makes the patch a > bit harder to read. OK, sounds good. I'll do so in next version. But I feel sg_miter_get_next_page() is not very appropriate name, because it gets the next page only if necessary. If I can find more appropriate name, I'll rename it. >> +static bool sg_miter_seek(struct sg_mapping_iter *miter, off_t offset) >> +{ >> + WARN_ON(miter->addr); >> + >> + while (offset) { >> + off_t consumed; >> + >> + if (!sg_miter_get_next_page(miter)) >> + return false; >> + >> + consumed = min_t(off_t, offset, miter->__remaining); >> + miter->__offset += consumed; >> + miter->__remaining -= consumed; >> + offset -= consumed; >> + } >> + >> + return true; >> +} > > While I think the above should work at the beginning, what if @miter > is in the middle of iteration and __remaining isn't zero? sg_miter_seek() should work as far as it is called just after sg_miter_start(), or just after sg_miter_stop() in the middle of iteration (Although I only tested the former case). I omitted a function comment in excuse of the static function, but I should write something I said above. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/