Filipe Manana
b672f4bf9d
Btrfs: send, fix issuing write op when processing hole in no data mode
[ Upstream commit d4dfc0f4d39475ccbbac947880b5464a74c30b99 ]
When doing an incremental send of a filesystem with the no-holes feature
enabled, we end up issuing a write operation when using the no data mode
send flag, instead of issuing an update extent operation. Fix this by
issuing the update extent operation instead.
Trivial reproducer:
$ mkfs.btrfs -f -O no-holes /dev/sdc
$ mkfs.btrfs -f /dev/sdd
$ mount /dev/sdc /mnt/sdc
$ mount /dev/sdd /mnt/sdd
$ xfs_io -f -c "pwrite -S 0xab 0 32K" /mnt/sdc/foobar
$ btrfs subvolume snapshot -r /mnt/sdc /mnt/sdc/snap1
$ xfs_io -c "fpunch 8K 8K" /mnt/sdc/foobar
$ btrfs subvolume snapshot -r /mnt/sdc /mnt/sdc/snap2
$ btrfs send /mnt/sdc/snap1 | btrfs receive /mnt/sdd
$ btrfs send --no-data -p /mnt/sdc/snap1 /mnt/sdc/snap2 \
| btrfs receive -vv /mnt/sdd
Before this change the output of the second receive command is:
receiving snapshot snap2 uuid=f6922049-8c22-e544-9ff9-fc6755918447...
utimes
write foobar, offset 8192, len 8192
utimes foobar
BTRFS_IOC_SET_RECEIVED_SUBVOL uuid=f6922049-8c22-e544-9ff9-...
After this change it is:
receiving snapshot snap2 uuid=564d36a3-ebc8-7343-aec9-bf6fda278e64...
utimes
update_extent foobar: offset=8192, len=8192
utimes foobar
BTRFS_IOC_SET_RECEIVED_SUBVOL uuid=564d36a3-ebc8-7343-aec9-bf6fda278e64...
Signed-off-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
2018-05-30 07:50:33 +02:00 |
| .. |
|
9p
|
fs/9p: Compare qid.path in v9fs_test_inode
|
2017-11-30 08:39:05 +00:00 |
|
adfs
|
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
|
2016-10-10 20:16:43 -07:00 |
|
affs
|
affs_lookup(): close a race with affs_remove_link()
|
2018-05-30 07:50:16 +02:00 |
|
afs
|
afs: Fix abort on signal while waiting for call completion
|
2017-12-20 10:07:25 +01:00 |
|
autofs4
|
autofs: mount point create should honour passed in mode
|
2018-04-24 09:34:18 +02:00 |
|
befs
|
befs fixes for 4.9-rc1
|
2016-10-15 12:09:13 -07:00 |
|
bfs
|
Merge remote-tracking branch 'ovl/rename2' into for-linus
|
2016-10-10 23:02:51 -04:00 |
|
btrfs
|
Btrfs: send, fix issuing write op when processing hole in no data mode
|
2018-05-30 07:50:33 +02:00 |
|
cachefiles
|
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
|
2016-10-10 20:16:43 -07:00 |
|
ceph
|
ceph: fix dentry leak when failing to init debugfs
|
2018-05-30 07:50:32 +02:00 |
|
cifs
|
cifs: silence compiler warnings showing up with gcc-8.0.0
|
2018-05-30 07:50:25 +02:00 |
|
coda
|
coda: fix 'kernel memory exposure attempt' in fsync
|
2017-11-24 08:33:42 +01:00 |
|
configfs
|
configfs: Fix race between create_link and configfs_rmdir
|
2017-06-24 07:11:12 +02:00 |
|
cramfs
|
|
|
|
crypto
|
fscrypt: use ENOTDIR when setting encryption policy on nondirectory
|
2017-11-30 08:39:11 +00:00 |
|
debugfs
|
dentry name snapshots
|
2017-08-06 18:59:43 -07:00 |
|
devpts
|
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
|
2016-10-10 20:16:43 -07:00 |
|
dlm
|
dlm: avoid double-free on error path in dlm_device_{register,unregister}
|
2017-09-09 17:39:40 +02:00 |
|
ecryptfs
|
do d_instantiate/unlock_new_inode combinations safely
|
2018-05-30 07:50:16 +02:00 |
|
efivarfs
|
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
|
2016-10-10 20:16:43 -07:00 |
|
efs
|
|
|
|
exofs
|
fs: exofs: print a hex number after a 0x prefix
|
2016-10-27 18:43:43 -07:00 |
|
exportfs
|
exportfs: be careful to only return expected errors.
|
2016-10-06 09:07:44 -04:00 |
|
ext2
|
do d_instantiate/unlock_new_inode combinations safely
|
2018-05-30 07:50:16 +02:00 |
|
ext4
|
do d_instantiate/unlock_new_inode combinations safely
|
2018-05-30 07:50:16 +02:00 |
|
f2fs
|
do d_instantiate/unlock_new_inode combinations safely
|
2018-05-30 07:50:16 +02:00 |
|
fat
|
fat: fix using uninitialized fields of fat_inode/fsinfo_inode
|
2017-03-15 10:02:52 +08:00 |
|
freevxfs
|
|
|
|
fscache
|
FS-Cache: fix dereference of NULL user_key_payload
|
2017-10-27 10:38:11 +02:00 |
|
fuse
|
fuse: fix READDIRPLUS skipping an entry
|
2017-11-02 09:49:13 +01:00 |
|
gfs2
|
GFS2: Take inode off order_write list when setting jdata flag
|
2017-12-20 10:07:30 +01:00 |
|
hfs
|
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
|
2016-10-10 20:16:43 -07:00 |
|
hfsplus
|
hfsplus: stop workqueue when fill_super() failed
|
2018-05-25 16:12:59 +02:00 |
|
hostfs
|
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
|
2016-10-10 20:16:43 -07:00 |
|
hpfs
|
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
|
2016-10-10 20:16:43 -07:00 |
|
hugetlbfs
|
hugetlbfs: initialize shared policy as part of inode allocation
|
2017-10-08 10:26:09 +02:00 |
|
isofs
|
isofs: fix timestamps beyond 2027
|
2017-11-30 08:39:04 +00:00 |
|
jbd2
|
ext4: set h_journal if there is a failure starting a reserved handle
|
2018-05-01 15:13:03 -07:00 |
|
jffs2
|
jffs2: Fix use-after-free bug in jffs2_iget()'s error handling path
|
2018-05-30 07:50:22 +02:00 |
|
jfs
|
do d_instantiate/unlock_new_inode combinations safely
|
2018-05-30 07:50:16 +02:00 |
|
kernfs
|
kernfs: fix regression in kernfs_fop_write caused by wrong type
|
2018-02-17 13:21:15 +01:00 |
|
lockd
|
lockd: lost rollback of set_grace_period() in lockd_down_net()
|
2018-05-19 10:27:00 +02:00 |
|
logfs
|
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
|
2016-10-10 20:16:43 -07:00 |
|
minix
|
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
|
2016-10-10 20:16:43 -07:00 |
|
ncpfs
|
staging: ncpfs: memory corruption in ncp_read_kernel()
|
2018-03-28 18:39:23 +02:00 |
|
nfs
|
nfs: Do not convert nfs_idmap_cache_timeout to jiffies
|
2018-05-30 07:50:20 +02:00 |
|
nfs_common
|
lockd: fix "list_add double add" caused by legacy signal interface
|
2018-02-03 17:05:38 +01:00 |
|
nfsd
|
nfsd: remove blocked locks on client teardown
|
2018-03-28 18:39:21 +02:00 |
|
nilfs2
|
do d_instantiate/unlock_new_inode combinations safely
|
2018-05-30 07:50:16 +02:00 |
|
nls
|
|
|
|
notify
|
fanotify: fix logic of events on child
|
2018-04-24 09:34:18 +02:00 |
|
ntfs
|
fs: remove the never implemented aio_fsync file operation
|
2016-10-30 13:09:42 -04:00 |
|
ocfs2
|
ocfs2: return error when we attempt to access a dirty bh in jbd2
|
2018-05-30 07:50:23 +02:00 |
|
omfs
|
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
|
2016-10-10 20:16:43 -07:00 |
|
openpromfs
|
fs: Replace CURRENT_TIME with current_time() for inode timestamps
|
2016-09-27 21:06:21 -04:00 |
|
orangefs
|
do d_instantiate/unlock_new_inode combinations safely
|
2018-05-30 07:50:16 +02:00 |
|
overlayfs
|
ovl: filter trusted xattr for non-admin
|
2018-04-13 19:48:12 +02:00 |
|
proc
|
vfs/proc/kcore, x86/mm/kcore: Fix SMAP fault when dumping vsyscall user page
|
2018-05-30 07:50:26 +02:00 |
|
pstore
|
pstore: Use dynamic spinlock initializer
|
2017-08-06 18:59:43 -07:00 |
|
qnx4
|
|
|
|
qnx6
|
|
|
|
quota
|
quota: Check for register_shrinker() failure.
|
2018-02-03 17:05:39 +01:00 |
|
ramfs
|
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
|
2016-10-10 20:16:43 -07:00 |
|
reiserfs
|
do d_instantiate/unlock_new_inode combinations safely
|
2018-05-30 07:50:16 +02:00 |
|
romfs
|
romfs: use different way to generate fsid for BLOCK or MTD
|
2017-06-17 06:41:56 +02:00 |
|
squashfs
|
vfs: Remove {get,set,remove}xattr inode operations
|
2016-10-07 21:48:36 -04:00 |
|
sysfs
|
sysfs: be careful of error returns from ops->show()
|
2017-04-12 12:41:11 +02:00 |
|
sysv
|
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
|
2016-10-10 20:16:43 -07:00 |
|
tracefs
|
fs: Replace CURRENT_TIME with current_time() for inode timestamps
|
2016-09-27 21:06:21 -04:00 |
|
ubifs
|
ubifs: Check ubifs_wbuf_sync() return code
|
2018-04-24 09:34:08 +02:00 |
|
udf
|
do d_instantiate/unlock_new_inode combinations safely
|
2018-05-30 07:50:16 +02:00 |
|
ufs
|
do d_instantiate/unlock_new_inode combinations safely
|
2018-05-30 07:50:16 +02:00 |
|
xfs
|
xfs: prevent creating negative-sized file via INSERT_RANGE
|
2018-05-09 09:50:21 +02:00 |
|
aio.c
|
aio: fix io_destroy(2) vs. lookup_ioctx() race
|
2018-05-30 07:50:16 +02:00 |
|
anon_inodes.c
|
|
|
|
attr.c
|
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
|
2016-10-10 20:16:43 -07:00 |
|
bad_inode.c
|
bad_inode: add missing i_op initializers
|
2017-01-09 08:32:24 +01:00 |
|
binfmt_aout.c
|
|
|
|
binfmt_elf.c
|
binfmt_elf: use ELF_ET_DYN_BASE only for PIE
|
2017-07-21 07:42:21 +02:00 |
|
binfmt_elf_fdpic.c
|
elf_fdpic_transfer_args_to_stack(): make it generic
|
2016-07-25 16:51:49 +10:00 |
|
binfmt_em86.c
|
fs/binfmt_em86.c: fix incompatible pointer type
|
2016-08-02 19:35:15 -04:00 |
|
binfmt_flat.c
|
binfmt_flat: allow compressed flat binary format to work on MMU systems
|
2016-07-28 13:29:12 +10:00 |
|
binfmt_misc.c
|
fs: Replace current_fs_time() with current_time()
|
2016-09-27 21:06:22 -04:00 |
|
binfmt_script.c
|
|
|
|
block_dev.c
|
fs/mpage.c: fix mpage_writepage() for pages with buffers
|
2017-10-18 09:35:39 +02:00 |
|
buffer.c
|
fs: add i_blocksize()
|
2017-06-14 15:06:00 +02:00 |
|
char_dev.c
|
dax: define a unified inode/address_space for device-dax mappings
|
2016-08-23 22:58:51 -07:00 |
|
compat.c
|
compat: remove compat_printk()
|
2016-09-27 21:20:53 -04:00 |
|
compat_binfmt_elf.c
|
binfmt_elf: compat: avoid unused function warning
|
2018-02-25 11:05:55 +01:00 |
|
compat_ioctl.c
|
fs: compat: Remove warning from COMPATIBLE_IOCTL
|
2018-04-08 12:12:44 +02:00 |
|
coredump.c
|
coredump: Ensure proper size of sparse core files
|
2017-07-05 14:40:26 +02:00 |
|
dax.c
|
fs/dax.c: fix inefficiency in dax_writeback_mapping_range()
|
2018-02-28 10:18:33 +01:00 |
|
dcache.c
|
fs: dcache: Use READ_ONCE when accessing i_dir_seq
|
2018-05-30 07:50:30 +02:00 |
|
dcookies.c
|
|
|
|
direct-io.c
|
direct-io: Prevent NULL pointer access in submit_page_section
|
2017-10-18 09:35:41 +02:00 |
|
drop_caches.c
|
|
|
|
eventfd.c
|
|
|
|
eventpoll.c
|
epoll: fix race between ep_poll_callback(POLLFREE) and ep_free()/ep_remove()
|
2017-09-07 08:35:41 +02:00 |
|
exec.c
|
exec: Limit arg stack to at most 75% of _STK_LIM
|
2017-07-21 07:42:22 +02:00 |
|
fcntl.c
|
fs/fcntl: f_setown, avoid undefined behaviour
|
2018-01-31 12:55:52 +01:00 |
|
fhandle.c
|
|
|
|
file.c
|
fs/file: more unsigned file descriptors
|
2016-09-27 18:47:38 -04:00 |
|
file_table.c
|
|
|
|
filesystems.c
|
|
|
|
fs-writeback.c
|
bdi: Fix oops in wb_workfn()
|
2018-05-16 10:08:42 +02:00 |
|
fs_pin.c
|
|
|
|
fs_struct.c
|
|
|
|
inode.c
|
xfs: evict all inodes involved with log redo item
|
2017-09-20 08:20:01 +02:00 |
|
internal.h
|
xfs: evict all inodes involved with log redo item
|
2017-09-20 08:20:01 +02:00 |
|
ioctl.c
|
vfs: cap dedupe request structure size at PAGE_SIZE
|
2016-09-15 13:29:52 -07:00 |
|
iomap.c
|
iomap: fix integer truncation issues in the zeroing and dirtying helpers
|
2017-09-20 08:19:59 +02:00 |
|
Kconfig
|
mm/hugetlb: introduce ARCH_HAS_GIGANTIC_PAGE
|
2016-10-07 18:46:29 -07:00 |
|
Kconfig.binfmt
|
ARM: 8594/1: enable binfmt_flat on systems with an MMU
|
2016-08-12 16:47:05 +01:00 |
|
libfs.c
|
libfs: Modify mount_pseudo_xattr to be clear it is not a userspace mount
|
2017-12-09 22:01:51 +01:00 |
|
locks.c
|
locking, fs/locks: Add missing file_sem locks
|
2016-10-18 12:21:28 +02:00 |
|
Makefile
|
|
|
|
mbcache.c
|
mbcache: initialize entry->e_referenced in mb_cache_entry_create()
|
2018-02-22 15:43:48 +01:00 |
|
mount.h
|
mnt: In propgate_umount handle visiting mounts in any order
|
2017-07-21 07:42:22 +02:00 |
|
mpage.c
|
fs/mpage.c: fix mpage_writepage() for pages with buffers
|
2017-10-18 09:35:39 +02:00 |
|
namei.c
|
getname_kernel() needs to make sure that ->name != ->iname in long case
|
2018-04-20 08:21:07 +02:00 |
|
namespace.c
|
Don't leak MNT_INTERNAL away from internal mounts
|
2018-04-24 09:34:18 +02:00 |
|
no-block.c
|
|
|
|
nsfs.c
|
nsfs: mark dentry with DCACHE_RCUACCESS
|
2018-02-17 13:21:15 +01:00 |
|
open.c
|
fs: completely ignore unknown open flags
|
2017-07-12 15:01:02 +02:00 |
|
pipe.c
|
pipe: fix off-by-one error when checking buffer limits
|
2018-02-17 13:21:18 +01:00 |
|
pnode.c
|
mnt: Make propagate_umount less slow for overlapping mount propagation trees
|
2017-07-21 07:42:22 +02:00 |
|
pnode.h
|
mnt: Tuck mounts under others instead of creating shadow/side mounts.
|
2017-03-15 10:02:43 +08:00 |
|
posix_acl.c
|
tmpfs: clear S_ISGID when setting posix ACLs
|
2017-01-26 08:24:37 +01:00 |
|
proc_namespace.c
|
|
|
|
read_write.c
|
vfs: deny copy_file_range() for non regular files
|
2017-10-12 11:51:26 +02:00 |
|
readdir.c
|
|
|
|
select.c
|
fs/select: add vmalloc fallback for select(2)
|
2016-10-11 15:06:30 -07:00 |
|
seq_file.c
|
seq/proc: modify seq_put_decimal_[u]ll to take a const char *, not char
|
2016-10-07 18:46:30 -07:00 |
|
signalfd.c
|
|
|
|
splice.c
|
vfs: fix uninitialized flags in splice_to_pipe()
|
2017-02-23 17:44:35 +01:00 |
|
stack.c
|
|
|
|
stat.c
|
ufs: restore maintaining ->i_blocks
|
2017-06-14 15:06:01 +02:00 |
|
statfs.c
|
|
|
|
super.c
|
sget(): handle failures of register_shrinker()
|
2018-03-03 10:23:21 +01:00 |
|
sync.c
|
|
|
|
timerfd.c
|
timerfd: Protect the might cancel mechanism proper
|
2017-05-08 07:47:54 +02:00 |
|
userfaultfd.c
|
userfaultfd: shmem: __do_fault requires VM_FAULT_NOPAGE
|
2017-12-20 10:07:18 +01:00 |
|
utimes.c
|
Merge remote-tracking branch 'jk/vfs' into work.misc
|
2016-10-08 11:06:08 -04:00 |
|
xattr.c
|
lsm: fix smack_inode_removexattr and xattr_getsecurity memleak
|
2017-10-12 11:51:19 +02:00 |