Prev: USB: testusb: imported David Brownell's USB testing application
Next: [acpi:battery?] kernel oops on boot
From: Andi Kleen on 14 Apr 2010 06:00 Yehuda Sadeh <yehuda(a)hq.newdream.net> 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. -Andi -- ak(a)linux.intel.com -- Speaking for myself only. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
From: yehuda on 14 Apr 2010 13:40
On Wed, 2010-04-14 at 11:57 +0200, Andi Kleen wrote: > Yehuda Sadeh <yehuda(a)hq.newdream.net> 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-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/ |