PM: hibernate: Do not get block device exclusively in test_resume mode
[platform/kernel/linux-starfive.git] / kernel / relay.c
index d7edc93..1cb4bb9 100644 (file)
@@ -148,13 +148,13 @@ static struct rchan_buf *relay_create_buf(struct rchan *chan)
 {
        struct rchan_buf *buf;
 
-       if (chan->n_subbufs > KMALLOC_MAX_SIZE / sizeof(size_t *))
+       if (chan->n_subbufs > KMALLOC_MAX_SIZE / sizeof(size_t))
                return NULL;
 
        buf = kzalloc(sizeof(struct rchan_buf), GFP_KERNEL);
        if (!buf)
                return NULL;
-       buf->padding = kmalloc_array(chan->n_subbufs, sizeof(size_t *),
+       buf->padding = kmalloc_array(chan->n_subbufs, sizeof(size_t),
                                     GFP_KERNEL);
        if (!buf->padding)
                goto free_buf;
@@ -989,7 +989,8 @@ static size_t relay_file_read_start_pos(struct rchan_buf *buf)
        size_t subbuf_size = buf->chan->subbuf_size;
        size_t n_subbufs = buf->chan->n_subbufs;
        size_t consumed = buf->subbufs_consumed % n_subbufs;
-       size_t read_pos = consumed * subbuf_size + buf->bytes_consumed;
+       size_t read_pos = (consumed * subbuf_size + buf->bytes_consumed)
+                       % (n_subbufs * subbuf_size);
 
        read_subbuf = read_pos / subbuf_size;
        padding = buf->padding[read_subbuf];