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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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)



[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [Samba]     [Device Mapper]     [CEPH Development]

  Powered by Linux