From mboxrd@z Thu Jan 1 00:00:00 1970 From: yehuda Subject: Re: [PATCH 5/6] ceph: refactor mount related functions, add helpers Date: Wed, 14 Apr 2010 10:39:23 -0700 Message-ID: <1271266763.7701.20.camel@yehudasa-desktop> References: <1271201355-9346-1-git-send-email-yehuda@hq.newdream.net> <87bpdm9x0e.fsf@basil.nowhere.org> Mime-Version: 1.0 Content-Type: text/plain Content-Transfer-Encoding: 7bit Cc: linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, sage@newdream.net, axboe@kernel.dk To: Andi Kleen Return-path: In-Reply-To: <87bpdm9x0e.fsf@basil.nowhere.org> Sender: linux-kernel-owner@vger.kernel.org List-Id: linux-fsdevel.vger.kernel.org On Wed, 2010-04-14 at 11:57 +0200, Andi Kleen wrote: > Yehuda Sadeh writes: > > > > +int ceph_copy_to_page_vector(struct page **pages, > > + const char *data, > > + loff_t off, size_t len) > > +{ > > + int i = 0; > > + int po = off & ~PAGE_CACHE_MASK; > > + int left = len; > > + int l; > > + > > + while (left > 0) { > > + l = min_t(int, PAGE_CACHE_SIZE-po, left); > > int seems like exactly the wrong type here. Ah yes.. there are other places around there that need fixing too. Changing to size_t: @@ -362,6 +362,52 @@ static int copy_user_to_page_vector(struct page **pages, return len; } +int ceph_copy_to_page_vector(struct page **pages, + const char *data, + loff_t off, size_t len) +{ + int i = 0; + size_t po = off & ~PAGE_CACHE_MASK; + size_t left = len; + size_t l; + + while (left > 0) { + l = min_t(size_t, PAGE_CACHE_SIZE-po, left); + memcpy(page_address(pages[i]) + po, data, l); + data += l; + left -= l; + po += l; + if (po == PAGE_CACHE_SIZE) { + po = 0; + i++; + } + } + return len; +} + +int ceph_copy_from_page_vector(struct page **pages, + char *data, + loff_t off, size_t len) +{ + int i = 0; + size_t po = off & ~PAGE_CACHE_MASK; + size_t left = len; + size_t l; + + while (left > 0) { + l = min_t(size_t, PAGE_CACHE_SIZE-po, left); + memcpy(data, page_address(pages[i]) + po, l); + data += l; + left -= l; + po += l; + if (po == PAGE_CACHE_SIZE) { + po = 0; + i++; + } + } + return len; +} + /* * copy user data from a page vector into a user pointer */ Thanks, Yehuda