On Wed, 2010-04-14 at 11:57 +0200, Andi Kleen wrote: > Yehuda Sadeh <yehuda@xxxxxxxxxxxxxxx> 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 -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html