History

Merge tag 'for-5.8-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux

Pull btrfs updates from David Sterba: "Highlights: - speedup dead root detection during orphan cleanup, eg. when there are many deleted subvolumes waiting to be cleaned, the trees are now looked up in radix tree instead of a O(N^2) search - snapshot creation with inherited qgroup will mark the qgroup inconsistent, requires a rescan - send will emit file capabilities after chown, this produces a stream that does not need postprocessing to set the capabilities again - direct io ported to iomap infrastructure, cleaned up and simplified code, notably removing last use of struct buffer_head in btrfs code Core changes: - factor out backreference iteration, to be used by ordinary backreferences and relocation code - improved global block reserve utilization * better logic to serialize requests * increased maximum available for unlink * improved handling on large pages (64K) - direct io cleanups and fixes * simplify layering, where cloned bios were unnecessarily created for some cases * error handling fixes (submit, endio) * remove repair worker thread, used to avoid deadlocks during repair - refactored block group reading code, preparatory work for new type of block group storage that should improve mount time on large filesystems Cleanups: - cleaned up (and slightly sped up) set/get helpers for metadata data structure members - root bit REF_COWS got renamed to SHAREABLE to reflect the that the blocks of the tree get shared either among subvolumes or with the relocation trees Fixes: - when subvolume deletion fails due to ENOSPC, the filesystem is not turned read-only - device scan deals with devices from other filesystems that changed ownership due to overwrite (mkfs) - fix a race between scrub and block group removal/allocation - fix long standing bug of a runaway balance operation, printing the same line to the syslog, caused by a stale status bit on a reloc tree that prevented progress - fix corrupt log due to concurrent fsync of inodes with shared extents - fix space underflow for NODATACOW and buffered writes when it for some reason needs to fallback to COW mode" * tag 'for-5.8-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux: (133 commits) btrfs: fix space_info bytes_may_use underflow during space cache writeout btrfs: fix space_info bytes_may_use underflow after nocow buffered write btrfs: fix wrong file range cleanup after an error filling dealloc range btrfs: remove redundant local variable in read_block_for_search btrfs: open code key_search btrfs: split btrfs_direct_IO to read and write part btrfs: remove BTRFS_INODE_READDIO_NEED_LOCK fs: remove dio_end_io() btrfs: switch to iomap_dio_rw() for dio iomap: remove lockdep_assert_held() iomap: add a filesystem hook for direct I/O bio submission fs: export generic_file_buffered_read() btrfs: turn space cache writeout failure messages into debug messages btrfs: include error on messages about failure to write space/inode caches btrfs: remove useless 'fail_unlock' label from btrfs_csum_file_blocks() btrfs: do not ignore error from btrfs_next_leaf() when inserting checksums btrfs: make checksum item extension more efficient btrfs: fix corrupt log due to concurrent fsync of inodes with shared extents btrfs: unexport btrfs_compress_set_level() btrfs: simplify iget helpers ...

Linus Torvalds committed 6 years ago

Commit f3cdc8a2 parents 8eeae5b 2166e5e52 files · +3224 −3045Browse files

Showing the changes to include/linux (3 of 52 files). Show all

Unified · Split

3 files
  1. include/linux/bio.h +8 −0
  2. include/linux/fs.h +2 −2
  3. include/linux/iomap.h +2 −0
include/linux/bio.h+8−0
@@ -169,6 +169,14 @@ static inline void bio_advance_iter(const struct bio *bio, · 168 unmodified lines
169169 #define bio_for_each_bvec(bvl, bio, iter) \
170170 __bio_for_each_bvec(bvl, bio, iter, (bio)->bi_iter)
171171
172+/*
173+ * Iterate over all multi-page bvecs. Drivers shouldn't use this version for the
174+ * same reasons as bio_for_each_segment_all().
175+ */
176+#define bio_for_each_bvec_all(bvl, bio, i) \
177+ for (i = 0, bvl = bio_first_bvec_all(bio); \
178+ i < (bio)->bi_vcnt; i++, bvl++) \
179+
172180 #define bio_iter_last(bvec, iter) ((iter).bi_size == (bvec).bv_len)
173181
174182 static inline unsigned bio_segments(struct bio *bio)
include/linux/fs.h+2−2
@@ -3148,6 +3148,8 @@ extern int generic_file_rw_checks(struct file *file_in, struct file *file_out); · 3147 unmodified lines
31483148 extern int generic_copy_file_checks(struct file *file_in, loff_t pos_in,
31493149 struct file *file_out, loff_t pos_out,
31503150 size_t *count, unsigned int flags);
3151+extern ssize_t generic_file_buffered_read(struct kiocb *iocb,
3152+ struct iov_iter *to, ssize_t already_read);
31513153 extern ssize_t generic_file_read_iter(struct kiocb *, struct iov_iter *);
31523154 extern ssize_t __generic_file_write_iter(struct kiocb *, struct iov_iter *);
31533155 extern ssize_t generic_file_write_iter(struct kiocb *, struct iov_iter *);
@@ -3209,8 +3211,6 @@ enum { · 55 unmodified lines
32093211 DIO_SKIP_HOLES = 0x02,
32103212 };
32113213
3212−void dio_end_io(struct bio *bio);
3213−
32143214 ssize_t __blockdev_direct_IO(struct kiocb *iocb, struct inode *inode,
32153215 struct block_device *bdev, struct iov_iter *iter,
32163216 get_block_t get_block,
include/linux/iomap.h+2−0
@@ -251,6 +251,8 @@ int iomap_writepages(struct address_space *mapping, · 250 unmodified lines
251251 struct iomap_dio_ops {
252252 int (*end_io)(struct kiocb *iocb, ssize_t size, int error,
253253 unsigned flags);
254+ blk_qc_t (*submit_io)(struct inode *inode, struct iomap *iomap,
255+ struct bio *bio, loff_t file_offset);
254256 };
255257
256258 ssize_t iomap_dio_rw(struct kiocb *iocb, struct iov_iter *iter,