]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - mm/zsmalloc.c
zsmalloc: micro-optimize zs_object_copy()
[karo-tx-linux.git] / mm / zsmalloc.c
index 8705a010e2d32b0cb94e9d6b8e882f2d87f8e5e6..a9a9ff233a1380a520f9a0d5d6a6c943f6d97166 100644 (file)
@@ -1537,7 +1537,12 @@ static void zs_object_copy(unsigned long src, unsigned long dst,
                if (written == class->size)
                        break;
 
-               if (s_off + size >= PAGE_SIZE) {
+               s_off += size;
+               s_size -= size;
+               d_off += size;
+               d_size -= size;
+
+               if (s_off >= PAGE_SIZE) {
                        kunmap_atomic(d_addr);
                        kunmap_atomic(s_addr);
                        s_page = get_next_page(s_page);
@@ -1546,21 +1551,15 @@ static void zs_object_copy(unsigned long src, unsigned long dst,
                        d_addr = kmap_atomic(d_page);
                        s_size = class->size - written;
                        s_off = 0;
-               } else {
-                       s_off += size;
-                       s_size -= size;
                }
 
-               if (d_off + size >= PAGE_SIZE) {
+               if (d_off >= PAGE_SIZE) {
                        kunmap_atomic(d_addr);
                        d_page = get_next_page(d_page);
                        BUG_ON(!d_page);
                        d_addr = kmap_atomic(d_page);
                        d_size = class->size - written;
                        d_off = 0;
-               } else {
-                       d_off += size;
-                       d_size -= size;
                }
        }