Pull btrfs updates from David Sterba: "A number of core changes that make things work better in general, code is simpler and cleaner. Core changes: - per-inode file extent tree, for in memory tracking of contiguous extent ranges to make sure i_size adjustments are accurate - tree root structures are protected by reference counts, replacing SRCU that did not cover some cases - leak detector for tree root structures - per-transaction pinned extent tracking - buffer heads are replaced by bios for super block access - speedup of extent back reference resolution, on an example test scenario the runtime of send went down from a hour to minutes - factor out locking scheme used for subvolume writer and NOCOW exclusion, abstracted as DREW lock, double reader-writer exclusion (allow either readers or writers) - cleanup and abstract extent allocation policies, preparation for zoned device support - make reflink/clone_range work on inline extents - add more cancellation point for relocation, improves long response from 'balance cancel' - add page migration callback for data pages - switch to guid for uuids, with additional cleanups of the interface - make ranged full fsyncs more efficient - removal of obsolete ioctl flag BTRFS_SUBVOL_CREATE_ASYNC - remove b-tree readahead from delayed refs paths, avoiding seek and read unnecessary blocks Features: - v2 of ioctl to delete subvolumes, allowing to delete by id and more future extensions Fixes: - fix qgroup rescan worker that could block umount - fix crash during unmount due to race with delayed inode workers - fix dellaloc flushing logic that could create unnecessary chunks under heavy load - fix missing file extent item for hole after ranged fsync - several fixes in relocation error handling Other: - more documentation of relocation, device replace, space reservations - many random cleanups" * tag 'for-5.7-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux: (210 commits) btrfs: fix missing semaphore unlock in btrfs_sync_file btrfs: use nofs allocations for running delayed items btrfs: sysfs: Use scnprintf() instead of snprintf() btrfs: do not resolve backrefs for roots that are being deleted btrfs: track reloc roots based on their commit root bytenr btrfs: restart relocate_tree_blocks properly btrfs: reloc: reorder reservation before root selection btrfs: do not readahead in build_backref_tree btrfs: do not use readahead for running delayed refs btrfs: Remove async_transid from btrfs_mksubvol/create_subvol/create_snapshot btrfs: Remove transid argument from btrfs_ioctl_snap_create_transid btrfs: Remove BTRFS_SUBVOL_CREATE_ASYNC support btrfs: kill the subvol_srcu btrfs: make btrfs_cleanup_fs_roots use the radix tree lock btrfs: don't take an extra root ref at allocation time btrfs: hold a ref on the root on the dead roots list btrfs: make inodes hold a ref on their roots btrfs: move the root freeing stuff into btrfs_put_root btrfs: move ino_cache_inode dropping out of btrfs_free_fs_root btrfs: make the extent buffer leak check per fs info ...
Showing the changes to include/linux (1 of 65 files). Show all
Unified · Split
| @@ -43,6 +43,16 @@ static inline void guid_copy(guid_t *dst, const guid_t *src) · 42 unmodified lines | ||
| 43 | 43 | memcpy(dst, src, sizeof(guid_t)); |
| 44 | 44 | } |
| 45 | 45 | |
| 46 | +static inline void import_guid(guid_t *dst, const __u8 *src) | |
| 47 | +{ | |
| 48 | + memcpy(dst, src, sizeof(guid_t)); | |
| 49 | +} | |
| 50 | + | |
| 51 | +static inline void export_guid(__u8 *dst, const guid_t *src) | |
| 52 | +{ | |
| 53 | + memcpy(dst, src, sizeof(guid_t)); | |
| 54 | +} | |
| 55 | + | |
| 46 | 56 | static inline bool guid_is_null(const guid_t *guid) |
| 47 | 57 | { |
| 48 | 58 | return guid_equal(guid, &guid_null); |
| @@ -58,12 +68,23 @@ static inline void uuid_copy(uuid_t *dst, const uuid_t *src) · 9 unmodified lines | ||
| 58 | 68 | memcpy(dst, src, sizeof(uuid_t)); |
| 59 | 69 | } |
| 60 | 70 | |
| 71 | +static inline void import_uuid(uuid_t *dst, const __u8 *src) | |
| 72 | +{ | |
| 73 | + memcpy(dst, src, sizeof(uuid_t)); | |
| 74 | +} | |
| 75 | + | |
| 76 | +static inline void export_uuid(__u8 *dst, const uuid_t *src) | |
| 77 | +{ | |
| 78 | + memcpy(dst, src, sizeof(uuid_t)); | |
| 79 | +} | |
| 80 | + | |
| 61 | 81 | static inline bool uuid_is_null(const uuid_t *uuid) |
| 62 | 82 | { |
| 63 | 83 | return uuid_equal(uuid, &uuid_null); |
| 64 | 84 | } |
| 65 | 85 | |
| 66 | 86 | void generate_random_uuid(unsigned char uuid[16]); |
| 87 | +void generate_random_guid(unsigned char guid[16]); | |
| 67 | 88 | |
| 68 | 89 | extern void guid_gen(guid_t *u); |
| 69 | 90 | extern void uuid_gen(uuid_t *u); |
| @@ -77,7 +98,6 @@ int guid_parse(const char *uuid, guid_t *u); · 7 unmodified lines | ||
| 77 | 98 | int uuid_parse(const char *uuid, uuid_t *u); |
| 78 | 99 | |
| 79 | 100 | /* backwards compatibility, don't use in new code */ |
| 80 | −#define uuid_le_gen(u) guid_gen(u) | |
| 81 | 101 | #define uuid_le_to_bin(guid, u) guid_parse(guid, u) |
| 82 | 102 | |
| 83 | 103 | static inline int uuid_le_cmp(const guid_t u1, const guid_t u2) |