Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs

Pull btrfs fixes from Chris Mason:
"I've got a revert to fix a regression with btrfs device registration,
and Filipe has part two of his fsync fix from last week"

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs:
Revert "Btrfs: device_list_add() should not update list when mounted"
Btrfs: set inode's logged_trans/last_log_commit after ranged fsync

+19 -21
+11 -2
fs/btrfs/btrfs_inode.h
··· 234 234 BTRFS_I(inode)->last_sub_trans <= 235 235 BTRFS_I(inode)->last_log_commit && 236 236 BTRFS_I(inode)->last_sub_trans <= 237 - BTRFS_I(inode)->root->last_log_commit) 238 - return 1; 237 + BTRFS_I(inode)->root->last_log_commit) { 238 + /* 239 + * After a ranged fsync we might have left some extent maps 240 + * (that fall outside the fsync's range). So return false 241 + * here if the list isn't empty, to make sure btrfs_log_inode() 242 + * will be called and process those extent maps. 243 + */ 244 + smp_mb(); 245 + if (list_empty(&BTRFS_I(inode)->extent_tree.modified_extents)) 246 + return 1; 247 + } 239 248 return 0; 240 249 } 241 250
+2 -12
fs/btrfs/tree-log.c
··· 4093 4093 } 4094 4094 } 4095 4095 4096 - write_lock(&em_tree->lock); 4097 - /* 4098 - * If we're doing a ranged fsync and there are still modified extents 4099 - * in the list, we must run on the next fsync call as it might cover 4100 - * those extents (a full fsync or an fsync for other range). 4101 - */ 4102 - if (list_empty(&em_tree->modified_extents)) { 4103 - BTRFS_I(inode)->logged_trans = trans->transid; 4104 - BTRFS_I(inode)->last_log_commit = 4105 - BTRFS_I(inode)->last_sub_trans; 4106 - } 4107 - write_unlock(&em_tree->lock); 4096 + BTRFS_I(inode)->logged_trans = trans->transid; 4097 + BTRFS_I(inode)->last_log_commit = BTRFS_I(inode)->last_sub_trans; 4108 4098 out_unlock: 4109 4099 if (unlikely(err)) 4110 4100 btrfs_put_logged_extents(&logged_list);
+6 -7
fs/btrfs/volumes.c
··· 529 529 */ 530 530 531 531 /* 532 - * As of now don't allow update to btrfs_fs_device through 533 - * the btrfs dev scan cli, after FS has been mounted. 532 + * For now, we do allow update to btrfs_fs_device through the 533 + * btrfs dev scan cli after FS has been mounted. We're still 534 + * tracking a problem where systems fail mount by subvolume id 535 + * when we reject replacement on a mounted FS. 534 536 */ 535 - if (fs_devices->opened) { 536 - return -EBUSY; 537 - } else { 537 + if (!fs_devices->opened && found_transid < device->generation) { 538 538 /* 539 539 * That is if the FS is _not_ mounted and if you 540 540 * are here, that means there is more than one ··· 542 542 * with larger generation number or the last-in if 543 543 * generation are equal. 544 544 */ 545 - if (found_transid < device->generation) 546 - return -EEXIST; 545 + return -EEXIST; 547 546 } 548 547 549 548 name = rcu_string_strdup(path, GFP_NOFS);