]> git.hungrycats.org Git - linux/commitdiff
Fix page_address() to not re-evaluate its arguments
authorLinus Torvalds <torvalds@penguin.transmeta.com>
Wed, 15 Jan 2003 07:42:14 +0000 (23:42 -0800)
committerLinus Torvalds <torvalds@penguin.transmeta.com>
Wed, 15 Jan 2003 07:42:14 +0000 (23:42 -0800)
multiple times under certain circumstances.

This fixes svc_tcp_recvfrom().

Found by Ted Phelps <phelps@dstc.edu.au>

include/linux/mm.h

index 9d2c7e53fb88fd2f3a14a09fcade824f3b3eae04..50eb18eb0488b5f76c03898ce3fef55fbb394108 100644 (file)
@@ -296,9 +296,10 @@ static inline void set_page_zone(struct page *page, unsigned long zone_num)
        page->flags |= zone_num << ZONE_SHIFT;
 }
 
-#define lowmem_page_address(page)                                      \
-       __va( ( ((page) - page_zone(page)->zone_mem_map)                \
-                       + page_zone(page)->zone_start_pfn) << PAGE_SHIFT)
+static inline void * lowmem_page_address(struct page *page)
+{
+       return __va( ( (page - page_zone(page)->zone_mem_map)   + page_zone(page)->zone_start_pfn) << PAGE_SHIFT);
+}
 
 #if defined(CONFIG_HIGHMEM) && !defined(WANT_PAGE_VIRTUAL)
 #define HASHED_PAGE_VIRTUAL