Messages in this thread Patch in this message | | | Date | Thu, 19 Apr 2007 12:10:34 -0700 (PDT) | From | Christoph Lameter <> | Subject | Re: [RFC 4/8] Enhance fallback functions in libs to support higher order pages |
| |
On Thu, 19 Apr 2007, Adam Litke wrote:
> On 4/19/07, Christoph Lameter <clameter@sgi.com> wrote: > > @@ -331,11 +331,15 @@ int simple_prepare_write(struct file *fi > > unsigned from, unsigned to) > > { > > if (!PageUptodate(page)) { > > - if (to - from != PAGE_CACHE_SIZE) { > > + if (to - from != page_cache_size(file->f_mapping)) { > > Where do you introduce page_cache_size()? Is this added by a > different set of patches I should have applied first?
Yuck. Missed that one in the control file. Insert this patch before this one.
Variable Order Page Cache: Add functions to establish sizes
We use the macros PAGE_CACHE_SIZE PAGE_CACHE_SHIFT PAGE_CACHE_MASK and PAGE_CACHE_ALIGN in various places in the kernel. These are now the base page size but we do not have a means to calculating these values for higher order pages.
Provide these functions. An address_space pointer must be passed to them.
New function Related base page constant --------------------------------------------------- page_cache_shift(a) PAGE_CACHE_SHIFT page_cache_size(a) PAGE_CACHE_SIZE page_cache_mask(a) PAGE_CACHE_MASK page_cache_align(addr,a) PAGE_CACHE_ALIGN(addr)
Signed-off-by: Christoph Lameter <clameter@sgi.com>
--- include/linux/pagemap.h | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+)
Index: linux-2.6.21-rc7/include/linux/pagemap.h =================================================================== --- linux-2.6.21-rc7.orig/include/linux/pagemap.h 2007-04-18 23:01:09.000000000 -0700 +++ linux-2.6.21-rc7/include/linux/pagemap.h 2007-04-18 23:03:32.000000000 -0700 @@ -49,6 +49,27 @@ static inline void mapping_set_gfp_mask( #define PAGE_CACHE_MASK PAGE_MASK #define PAGE_CACHE_ALIGN(addr) (((addr)+PAGE_CACHE_SIZE-1)&PAGE_CACHE_MASK) +static inline int page_cache_shift(struct address_space *a) +{ + return a->order + PAGE_CACHE_SHIFT; +} + +static inline unsigned long page_cache_size(struct address_space *a) +{ + return PAGE_CACHE_SIZE << a->order; +} + +static inline unsigned long page_cache_mask(struct address_space *a) +{ + return PAGE_CACHE_MASK << a->order; +} + +static inline unsigned long page_cache_align(unsigned long addr, + struct address_space *a) +{ + return (((addr) + page_cache_size(a) - 1) & page_cache_mask(a)); +} + #define page_cache_get(page) get_page(page) #define page_cache_release(page) put_page(page) void release_pages(struct page **pages, int nr, int cold); - 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/
| |