Merge tag 'xfs-for-linus-3.18-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git...
[linux-2.6-microblaze.git] / mm / zsmalloc.c
index c81f63e..839a48c 100644 (file)
@@ -628,7 +628,7 @@ static void init_zspage(struct page *first_page, struct size_class *class)
        while (page) {
                struct page *next_page;
                struct link_free *link;
-               unsigned int i, objs_on_page;
+               unsigned int i = 1;
 
                /*
                 * page->index stores offset of first object starting
@@ -641,14 +641,10 @@ static void init_zspage(struct page *first_page, struct size_class *class)
 
                link = (struct link_free *)kmap_atomic(page) +
                                                off / sizeof(*link);
-               objs_on_page = (PAGE_SIZE - off) / class->size;
 
-               for (i = 1; i <= objs_on_page; i++) {
-                       off += class->size;
-                       if (off < PAGE_SIZE) {
-                               link->next = obj_location_to_handle(page, i);
-                               link += class->size / sizeof(*link);
-                       }
+               while ((off += class->size) < PAGE_SIZE) {
+                       link->next = obj_location_to_handle(page, i++);
+                       link += class->size / sizeof(*link);
                }
 
                /*
@@ -660,7 +656,7 @@ static void init_zspage(struct page *first_page, struct size_class *class)
                link->next = obj_location_to_handle(next_page, 0);
                kunmap_atomic(link);
                page = next_page;
-               off = (off + class->size) % PAGE_SIZE;
+               off %= PAGE_SIZE;
        }
 }