linux/fs/ext4/readpage.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2/*
   3 * linux/fs/ext4/readpage.c
   4 *
   5 * Copyright (C) 2002, Linus Torvalds.
   6 * Copyright (C) 2015, Google, Inc.
   7 *
   8 * This was originally taken from fs/mpage.c
   9 *
  10 * The ext4_mpage_readpages() function here is intended to
  11 * replace mpage_readahead() in the general case, not just for
  12 * encrypted files.  It has some limitations (see below), where it
  13 * will fall back to read_block_full_page(), but these limitations
  14 * should only be hit when page_size != block_size.
  15 *
  16 * This will allow us to attach a callback function to support ext4
  17 * encryption.
  18 *
  19 * If anything unusual happens, such as:
  20 *
  21 * - encountering a page which has buffers
  22 * - encountering a page which has a non-hole after a hole
  23 * - encountering a page with non-contiguous blocks
  24 *
  25 * then this code just gives up and calls the buffer_head-based read function.
  26 * It does handle a page which has holes at the end - that is a common case:
  27 * the end-of-file on blocksize < PAGE_SIZE setups.
  28 *
  29 */
  30
  31#include <linux/kernel.h>
  32#include <linux/export.h>
  33#include <linux/mm.h>
  34#include <linux/kdev_t.h>
  35#include <linux/gfp.h>
  36#include <linux/bio.h>
  37#include <linux/fs.h>
  38#include <linux/buffer_head.h>
  39#include <linux/blkdev.h>
  40#include <linux/highmem.h>
  41#include <linux/prefetch.h>
  42#include <linux/mpage.h>
  43#include <linux/writeback.h>
  44#include <linux/backing-dev.h>
  45#include <linux/pagevec.h>
  46
  47#include "ext4.h"
  48
  49#define NUM_PREALLOC_POST_READ_CTXS     128
  50
  51static struct kmem_cache *bio_post_read_ctx_cache;
  52static mempool_t *bio_post_read_ctx_pool;
  53
  54/* postprocessing steps for read bios */
  55enum bio_post_read_step {
  56        STEP_INITIAL = 0,
  57        STEP_DECRYPT,
  58        STEP_VERITY,
  59        STEP_MAX,
  60};
  61
  62struct bio_post_read_ctx {
  63        struct bio *bio;
  64        struct work_struct work;
  65        unsigned int cur_step;
  66        unsigned int enabled_steps;
  67};
  68
  69static void __read_end_io(struct bio *bio)
  70{
  71        struct page *page;
  72        struct bio_vec *bv;
  73        struct bvec_iter_all iter_all;
  74
  75        bio_for_each_segment_all(bv, bio, iter_all) {
  76                page = bv->bv_page;
  77
  78                /* PG_error was set if any post_read step failed */
  79                if (bio->bi_status || PageError(page)) {
  80                        ClearPageUptodate(page);
  81                        /* will re-read again later */
  82                        ClearPageError(page);
  83                } else {
  84                        SetPageUptodate(page);
  85                }
  86                unlock_page(page);
  87        }
  88        if (bio->bi_private)
  89                mempool_free(bio->bi_private, bio_post_read_ctx_pool);
  90        bio_put(bio);
  91}
  92
  93static void bio_post_read_processing(struct bio_post_read_ctx *ctx);
  94
  95static void decrypt_work(struct work_struct *work)
  96{
  97        struct bio_post_read_ctx *ctx =
  98                container_of(work, struct bio_post_read_ctx, work);
  99
 100        fscrypt_decrypt_bio(ctx->bio);
 101
 102        bio_post_read_processing(ctx);
 103}
 104
 105static void verity_work(struct work_struct *work)
 106{
 107        struct bio_post_read_ctx *ctx =
 108                container_of(work, struct bio_post_read_ctx, work);
 109        struct bio *bio = ctx->bio;
 110
 111        /*
 112         * fsverity_verify_bio() may call readpages() again, and although verity
 113         * will be disabled for that, decryption may still be needed, causing
 114         * another bio_post_read_ctx to be allocated.  So to guarantee that
 115         * mempool_alloc() never deadlocks we must free the current ctx first.
 116         * This is safe because verity is the last post-read step.
 117         */
 118        BUILD_BUG_ON(STEP_VERITY + 1 != STEP_MAX);
 119        mempool_free(ctx, bio_post_read_ctx_pool);
 120        bio->bi_private = NULL;
 121
 122        fsverity_verify_bio(bio);
 123
 124        __read_end_io(bio);
 125}
 126
 127static void bio_post_read_processing(struct bio_post_read_ctx *ctx)
 128{
 129        /*
 130         * We use different work queues for decryption and for verity because
 131         * verity may require reading metadata pages that need decryption, and
 132         * we shouldn't recurse to the same workqueue.
 133         */
 134        switch (++ctx->cur_step) {
 135        case STEP_DECRYPT:
 136                if (ctx->enabled_steps & (1 << STEP_DECRYPT)) {
 137                        INIT_WORK(&ctx->work, decrypt_work);
 138                        fscrypt_enqueue_decrypt_work(&ctx->work);
 139                        return;
 140                }
 141                ctx->cur_step++;
 142                fallthrough;
 143        case STEP_VERITY:
 144                if (ctx->enabled_steps & (1 << STEP_VERITY)) {
 145                        INIT_WORK(&ctx->work, verity_work);
 146                        fsverity_enqueue_verify_work(&ctx->work);
 147                        return;
 148                }
 149                ctx->cur_step++;
 150                fallthrough;
 151        default:
 152                __read_end_io(ctx->bio);
 153        }
 154}
 155
 156static bool bio_post_read_required(struct bio *bio)
 157{
 158        return bio->bi_private && !bio->bi_status;
 159}
 160
 161/*
 162 * I/O completion handler for multipage BIOs.
 163 *
 164 * The mpage code never puts partial pages into a BIO (except for end-of-file).
 165 * If a page does not map to a contiguous run of blocks then it simply falls
 166 * back to block_read_full_page().
 167 *
 168 * Why is this?  If a page's completion depends on a number of different BIOs
 169 * which can complete in any order (or at the same time) then determining the
 170 * status of that page is hard.  See end_buffer_async_read() for the details.
 171 * There is no point in duplicating all that complexity.
 172 */
 173static void mpage_end_io(struct bio *bio)
 174{
 175        if (bio_post_read_required(bio)) {
 176                struct bio_post_read_ctx *ctx = bio->bi_private;
 177
 178                ctx->cur_step = STEP_INITIAL;
 179                bio_post_read_processing(ctx);
 180                return;
 181        }
 182        __read_end_io(bio);
 183}
 184
 185static inline bool ext4_need_verity(const struct inode *inode, pgoff_t idx)
 186{
 187        return fsverity_active(inode) &&
 188               idx < DIV_ROUND_UP(inode->i_size, PAGE_SIZE);
 189}
 190
 191static void ext4_set_bio_post_read_ctx(struct bio *bio,
 192                                       const struct inode *inode,
 193                                       pgoff_t first_idx)
 194{
 195        unsigned int post_read_steps = 0;
 196
 197        if (fscrypt_inode_uses_fs_layer_crypto(inode))
 198                post_read_steps |= 1 << STEP_DECRYPT;
 199
 200        if (ext4_need_verity(inode, first_idx))
 201                post_read_steps |= 1 << STEP_VERITY;
 202
 203        if (post_read_steps) {
 204                /* Due to the mempool, this never fails. */
 205                struct bio_post_read_ctx *ctx =
 206                        mempool_alloc(bio_post_read_ctx_pool, GFP_NOFS);
 207
 208                ctx->bio = bio;
 209                ctx->enabled_steps = post_read_steps;
 210                bio->bi_private = ctx;
 211        }
 212}
 213
 214static inline loff_t ext4_readpage_limit(struct inode *inode)
 215{
 216        if (IS_ENABLED(CONFIG_FS_VERITY) &&
 217            (IS_VERITY(inode) || ext4_verity_in_progress(inode)))
 218                return inode->i_sb->s_maxbytes;
 219
 220        return i_size_read(inode);
 221}
 222
 223int ext4_mpage_readpages(struct inode *inode,
 224                struct readahead_control *rac, struct page *page)
 225{
 226        struct bio *bio = NULL;
 227        sector_t last_block_in_bio = 0;
 228
 229        const unsigned blkbits = inode->i_blkbits;
 230        const unsigned blocks_per_page = PAGE_SIZE >> blkbits;
 231        const unsigned blocksize = 1 << blkbits;
 232        sector_t next_block;
 233        sector_t block_in_file;
 234        sector_t last_block;
 235        sector_t last_block_in_file;
 236        sector_t blocks[MAX_BUF_PER_PAGE];
 237        unsigned page_block;
 238        struct block_device *bdev = inode->i_sb->s_bdev;
 239        int length;
 240        unsigned relative_block = 0;
 241        struct ext4_map_blocks map;
 242        unsigned int nr_pages = rac ? readahead_count(rac) : 1;
 243
 244        map.m_pblk = 0;
 245        map.m_lblk = 0;
 246        map.m_len = 0;
 247        map.m_flags = 0;
 248
 249        for (; nr_pages; nr_pages--) {
 250                int fully_mapped = 1;
 251                unsigned first_hole = blocks_per_page;
 252
 253                if (rac) {
 254                        page = readahead_page(rac);
 255                        prefetchw(&page->flags);
 256                }
 257
 258                if (page_has_buffers(page))
 259                        goto confused;
 260
 261                block_in_file = next_block =
 262                        (sector_t)page->index << (PAGE_SHIFT - blkbits);
 263                last_block = block_in_file + nr_pages * blocks_per_page;
 264                last_block_in_file = (ext4_readpage_limit(inode) +
 265                                      blocksize - 1) >> blkbits;
 266                if (last_block > last_block_in_file)
 267                        last_block = last_block_in_file;
 268                page_block = 0;
 269
 270                /*
 271                 * Map blocks using the previous result first.
 272                 */
 273                if ((map.m_flags & EXT4_MAP_MAPPED) &&
 274                    block_in_file > map.m_lblk &&
 275                    block_in_file < (map.m_lblk + map.m_len)) {
 276                        unsigned map_offset = block_in_file - map.m_lblk;
 277                        unsigned last = map.m_len - map_offset;
 278
 279                        for (relative_block = 0; ; relative_block++) {
 280                                if (relative_block == last) {
 281                                        /* needed? */
 282                                        map.m_flags &= ~EXT4_MAP_MAPPED;
 283                                        break;
 284                                }
 285                                if (page_block == blocks_per_page)
 286                                        break;
 287                                blocks[page_block] = map.m_pblk + map_offset +
 288                                        relative_block;
 289                                page_block++;
 290                                block_in_file++;
 291                        }
 292                }
 293
 294                /*
 295                 * Then do more ext4_map_blocks() calls until we are
 296                 * done with this page.
 297                 */
 298                while (page_block < blocks_per_page) {
 299                        if (block_in_file < last_block) {
 300                                map.m_lblk = block_in_file;
 301                                map.m_len = last_block - block_in_file;
 302
 303                                if (ext4_map_blocks(NULL, inode, &map, 0) < 0) {
 304                                set_error_page:
 305                                        SetPageError(page);
 306                                        zero_user_segment(page, 0,
 307                                                          PAGE_SIZE);
 308                                        unlock_page(page);
 309                                        goto next_page;
 310                                }
 311                        }
 312                        if ((map.m_flags & EXT4_MAP_MAPPED) == 0) {
 313                                fully_mapped = 0;
 314                                if (first_hole == blocks_per_page)
 315                                        first_hole = page_block;
 316                                page_block++;
 317                                block_in_file++;
 318                                continue;
 319                        }
 320                        if (first_hole != blocks_per_page)
 321                                goto confused;          /* hole -> non-hole */
 322
 323                        /* Contiguous blocks? */
 324                        if (page_block && blocks[page_block-1] != map.m_pblk-1)
 325                                goto confused;
 326                        for (relative_block = 0; ; relative_block++) {
 327                                if (relative_block == map.m_len) {
 328                                        /* needed? */
 329                                        map.m_flags &= ~EXT4_MAP_MAPPED;
 330                                        break;
 331                                } else if (page_block == blocks_per_page)
 332                                        break;
 333                                blocks[page_block] = map.m_pblk+relative_block;
 334                                page_block++;
 335                                block_in_file++;
 336                        }
 337                }
 338                if (first_hole != blocks_per_page) {
 339                        zero_user_segment(page, first_hole << blkbits,
 340                                          PAGE_SIZE);
 341                        if (first_hole == 0) {
 342                                if (ext4_need_verity(inode, page->index) &&
 343                                    !fsverity_verify_page(page))
 344                                        goto set_error_page;
 345                                SetPageUptodate(page);
 346                                unlock_page(page);
 347                                goto next_page;
 348                        }
 349                } else if (fully_mapped) {
 350                        SetPageMappedToDisk(page);
 351                }
 352
 353                /*
 354                 * This page will go to BIO.  Do we need to send this
 355                 * BIO off first?
 356                 */
 357                if (bio && (last_block_in_bio != blocks[0] - 1 ||
 358                            !fscrypt_mergeable_bio(bio, inode, next_block))) {
 359                submit_and_realloc:
 360                        submit_bio(bio);
 361                        bio = NULL;
 362                }
 363                if (bio == NULL) {
 364                        /*
 365                         * bio_alloc will _always_ be able to allocate a bio if
 366                         * __GFP_DIRECT_RECLAIM is set, see bio_alloc_bioset().
 367                         */
 368                        bio = bio_alloc(GFP_KERNEL, bio_max_segs(nr_pages));
 369                        fscrypt_set_bio_crypt_ctx(bio, inode, next_block,
 370                                                  GFP_KERNEL);
 371                        ext4_set_bio_post_read_ctx(bio, inode, page->index);
 372                        bio_set_dev(bio, bdev);
 373                        bio->bi_iter.bi_sector = blocks[0] << (blkbits - 9);
 374                        bio->bi_end_io = mpage_end_io;
 375                        bio_set_op_attrs(bio, REQ_OP_READ,
 376                                                rac ? REQ_RAHEAD : 0);
 377                }
 378
 379                length = first_hole << blkbits;
 380                if (bio_add_page(bio, page, length, 0) < length)
 381                        goto submit_and_realloc;
 382
 383                if (((map.m_flags & EXT4_MAP_BOUNDARY) &&
 384                     (relative_block == map.m_len)) ||
 385                    (first_hole != blocks_per_page)) {
 386                        submit_bio(bio);
 387                        bio = NULL;
 388                } else
 389                        last_block_in_bio = blocks[blocks_per_page - 1];
 390                goto next_page;
 391        confused:
 392                if (bio) {
 393                        submit_bio(bio);
 394                        bio = NULL;
 395                }
 396                if (!PageUptodate(page))
 397                        block_read_full_page(page, ext4_get_block);
 398                else
 399                        unlock_page(page);
 400        next_page:
 401                if (rac)
 402                        put_page(page);
 403        }
 404        if (bio)
 405                submit_bio(bio);
 406        return 0;
 407}
 408
 409int __init ext4_init_post_read_processing(void)
 410{
 411        bio_post_read_ctx_cache =
 412                kmem_cache_create("ext4_bio_post_read_ctx",
 413                                  sizeof(struct bio_post_read_ctx), 0, 0, NULL);
 414        if (!bio_post_read_ctx_cache)
 415                goto fail;
 416        bio_post_read_ctx_pool =
 417                mempool_create_slab_pool(NUM_PREALLOC_POST_READ_CTXS,
 418                                         bio_post_read_ctx_cache);
 419        if (!bio_post_read_ctx_pool)
 420                goto fail_free_cache;
 421        return 0;
 422
 423fail_free_cache:
 424        kmem_cache_destroy(bio_post_read_ctx_cache);
 425fail:
 426        return -ENOMEM;
 427}
 428
 429void ext4_exit_post_read_processing(void)
 430{
 431        mempool_destroy(bio_post_read_ctx_pool);
 432        kmem_cache_destroy(bio_post_read_ctx_cache);
 433}
 434