]> rtime.felk.cvut.cz Git - zynq/linux.git/blobdiff - drivers/block/zram/zram_drv.c
Apply preempt_rt patch-4.9-rt1.patch.xz
[zynq/linux.git] / drivers / block / zram / zram_drv.c
index 5497f7fc44d04c0287a6c51d968a7df0165a37c3..3826072a23c5df712b5b97a88b6ccbdb7cd0b0f0 100644 (file)
@@ -519,6 +519,8 @@ static struct zram_meta *zram_meta_alloc(char *pool_name, u64 disksize)
                goto out_error;
        }
 
+       zram_meta_init_table_locks(meta, disksize);
+
        return meta;
 
 out_error:
@@ -566,28 +568,28 @@ static int zram_decompress_page(struct zram *zram, char *mem, u32 index)
        struct zram_meta *meta = zram->meta;
        unsigned long handle;
        unsigned int size;
+       struct zcomp_strm *zstrm;
 
-       bit_spin_lock(ZRAM_ACCESS, &meta->table[index].value);
+       zram_lock_table(&meta->table[index]);
        handle = meta->table[index].handle;
        size = zram_get_obj_size(meta, index);
 
        if (!handle || zram_test_flag(meta, index, ZRAM_ZERO)) {
-               bit_spin_unlock(ZRAM_ACCESS, &meta->table[index].value);
+               zram_unlock_table(&meta->table[index]);
                clear_page(mem);
                return 0;
        }
 
+       zstrm = zcomp_stream_get(zram->comp);
        cmem = zs_map_object(meta->mem_pool, handle, ZS_MM_RO);
        if (size == PAGE_SIZE) {
                copy_page(mem, cmem);
        } else {
-               struct zcomp_strm *zstrm = zcomp_stream_get(zram->comp);
-
                ret = zcomp_decompress(zstrm, cmem, size, mem);
-               zcomp_stream_put(zram->comp);
        }
        zs_unmap_object(meta->mem_pool, handle);
-       bit_spin_unlock(ZRAM_ACCESS, &meta->table[index].value);
+       zcomp_stream_put(zram->comp);
+       zram_unlock_table(&meta->table[index]);
 
        /* Should NEVER happen. Return bio error if it does. */
        if (unlikely(ret)) {
@@ -607,14 +609,14 @@ static int zram_bvec_read(struct zram *zram, struct bio_vec *bvec,
        struct zram_meta *meta = zram->meta;
        page = bvec->bv_page;
 
-       bit_spin_lock(ZRAM_ACCESS, &meta->table[index].value);
+       zram_lock_table(&meta->table[index]);
        if (unlikely(!meta->table[index].handle) ||
                        zram_test_flag(meta, index, ZRAM_ZERO)) {
-               bit_spin_unlock(ZRAM_ACCESS, &meta->table[index].value);
+               zram_unlock_table(&meta->table[index]);
                handle_zero_page(bvec);
                return 0;
        }
-       bit_spin_unlock(ZRAM_ACCESS, &meta->table[index].value);
+       zram_unlock_table(&meta->table[index]);
 
        if (is_partial_io(bvec))
                /* Use  a temporary buffer to decompress the page */
@@ -691,10 +693,10 @@ compress_again:
                if (user_mem)
                        kunmap_atomic(user_mem);
                /* Free memory associated with this sector now. */
-               bit_spin_lock(ZRAM_ACCESS, &meta->table[index].value);
+               zram_lock_table(&meta->table[index]);
                zram_free_page(zram, index);
                zram_set_flag(meta, index, ZRAM_ZERO);
-               bit_spin_unlock(ZRAM_ACCESS, &meta->table[index].value);
+               zram_unlock_table(&meta->table[index]);
 
                atomic64_inc(&zram->stats.zero_pages);
                ret = 0;
@@ -785,12 +787,12 @@ compress_again:
         * Free memory associated with this sector
         * before overwriting unused sectors.
         */
-       bit_spin_lock(ZRAM_ACCESS, &meta->table[index].value);
+       zram_lock_table(&meta->table[index]);
        zram_free_page(zram, index);
 
        meta->table[index].handle = handle;
        zram_set_obj_size(meta, index, clen);
-       bit_spin_unlock(ZRAM_ACCESS, &meta->table[index].value);
+       zram_unlock_table(&meta->table[index]);
 
        /* Update stats */
        atomic64_add(clen, &zram->stats.compr_data_size);
@@ -833,9 +835,9 @@ static void zram_bio_discard(struct zram *zram, u32 index,
        }
 
        while (n >= PAGE_SIZE) {
-               bit_spin_lock(ZRAM_ACCESS, &meta->table[index].value);
+               zram_lock_table(&meta->table[index]);
                zram_free_page(zram, index);
-               bit_spin_unlock(ZRAM_ACCESS, &meta->table[index].value);
+               zram_unlock_table(&meta->table[index]);
                atomic64_inc(&zram->stats.notify_free);
                index++;
                n -= PAGE_SIZE;
@@ -964,9 +966,9 @@ static void zram_slot_free_notify(struct block_device *bdev,
        zram = bdev->bd_disk->private_data;
        meta = zram->meta;
 
-       bit_spin_lock(ZRAM_ACCESS, &meta->table[index].value);
+       zram_lock_table(&meta->table[index]);
        zram_free_page(zram, index);
-       bit_spin_unlock(ZRAM_ACCESS, &meta->table[index].value);
+       zram_unlock_table(&meta->table[index]);
        atomic64_inc(&zram->stats.notify_free);
 }