Re: [PATCH v23 02/10] fs/ntfs3: Add initialization of super block

From: Oleksandr Natalenko
Date: Tue Mar 16 2021 - 03:56:25 EST


Hi.

On Mon, Mar 15, 2021 at 05:44:06PM +0300, Konstantin Komarov wrote:
> This adds initialization of super block
>
> ...SNIP...
>
> +
> +/*
> + * Helper for ntfs_loadlog_and_replay
> + * fill on-disk logfile range by (-1)
> + * this means empty logfile
> + */
> +int ntfs_bio_fill_1(struct ntfs_sb_info *sbi, const struct runs_tree *run)
> +{
> + int err = 0;
> + struct super_block *sb = sbi->sb;
> + struct block_device *bdev = sb->s_bdev;
> + u8 cluster_bits = sbi->cluster_bits;
> + struct bio *new, *bio = NULL;
> + CLST lcn, clen;
> + u64 lbo, len;
> + size_t run_idx;
> + struct page *fill;
> + void *kaddr;
> + struct blk_plug plug;
> +
> + fill = alloc_page(GFP_KERNEL);
> + if (!fill)
> + return -ENOMEM;
> +
> + kaddr = kmap_atomic(fill);
> + memset(kaddr, -1, PAGE_SIZE);
> + kunmap_atomic(kaddr);
> + flush_dcache_page(fill);
> + lock_page(fill);
> +
> + if (!run_lookup_entry(run, 0, &lcn, &clen, &run_idx)) {
> + err = -ENOENT;
> + goto out;
> + }
> +
> + /*
> + * TODO: try blkdev_issue_write_same
> + */
> + blk_start_plug(&plug);
> + do {
> + lbo = (u64)lcn << cluster_bits;
> + len = (u64)clen << cluster_bits;
> +new_bio:
> + new = ntfs_alloc_bio(BIO_MAX_PAGES);
^^^^^^^^^^^^^
this was renamed to BIO_MAX_VECS recently.

> + if (!new) {
> + err = -ENOMEM;
> + break;
> + }
> + if (bio) {
> + bio_chain(bio, new);
> + submit_bio(bio);
> + }
> + bio = new;
> + bio_set_dev(bio, bdev);
> + bio->bi_opf = REQ_OP_WRITE;
> + bio->bi_iter.bi_sector = lbo >> 9;
> +
> + for (;;) {
> + u32 add = len > PAGE_SIZE ? PAGE_SIZE : len;
> +
> + if (bio_add_page(bio, fill, add, 0) < add)
> + goto new_bio;
> +
> + lbo += add;
> + if (len <= add)
> + break;
> + len -= add;
> + }
> + } while (run_get_entry(run, ++run_idx, NULL, &lcn, &clen));
> +
> + if (bio) {
> + if (!err)
> + err = submit_bio_wait(bio);
> + bio_put(bio);
> + }
> + blk_finish_plug(&plug);
> +out:
> + unlock_page(fill);
> + put_page(fill);
> +
> + return err;
> +}
>
> ...SNIP...
>

--
Oleksandr Natalenko (post-factum)