Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 46be7b73 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
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
parents 81770f41 0f23ae74
Loading
Loading
Loading
Loading
+11 −2
Original line number Original line Diff line number Diff line
@@ -234,8 +234,17 @@ static inline int btrfs_inode_in_log(struct inode *inode, u64 generation)
	    BTRFS_I(inode)->last_sub_trans <=
	    BTRFS_I(inode)->last_sub_trans <=
	    BTRFS_I(inode)->last_log_commit &&
	    BTRFS_I(inode)->last_log_commit &&
	    BTRFS_I(inode)->last_sub_trans <=
	    BTRFS_I(inode)->last_sub_trans <=
	    BTRFS_I(inode)->root->last_log_commit)
	    BTRFS_I(inode)->root->last_log_commit) {
		/*
		 * After a ranged fsync we might have left some extent maps
		 * (that fall outside the fsync's range). So return false
		 * here if the list isn't empty, to make sure btrfs_log_inode()
		 * will be called and process those extent maps.
		 */
		smp_mb();
		if (list_empty(&BTRFS_I(inode)->extent_tree.modified_extents))
			return 1;
			return 1;
	}
	return 0;
	return 0;
}
}


+2 −12
Original line number Original line Diff line number Diff line
@@ -4093,18 +4093,8 @@ static int btrfs_log_inode(struct btrfs_trans_handle *trans,
		}
		}
	}
	}


	write_lock(&em_tree->lock);
	/*
	 * If we're doing a ranged fsync and there are still modified extents
	 * in the list, we must run on the next fsync call as it might cover
	 * those extents (a full fsync or an fsync for other range).
	 */
	if (list_empty(&em_tree->modified_extents)) {
	BTRFS_I(inode)->logged_trans = trans->transid;
	BTRFS_I(inode)->logged_trans = trans->transid;
		BTRFS_I(inode)->last_log_commit =
	BTRFS_I(inode)->last_log_commit = BTRFS_I(inode)->last_sub_trans;
			BTRFS_I(inode)->last_sub_trans;
	}
	write_unlock(&em_tree->lock);
out_unlock:
out_unlock:
	if (unlikely(err))
	if (unlikely(err))
		btrfs_put_logged_extents(&logged_list);
		btrfs_put_logged_extents(&logged_list);
+6 −7
Original line number Original line Diff line number Diff line
@@ -529,12 +529,12 @@ static noinline int device_list_add(const char *path,
		 */
		 */


		/*
		/*
		 * As of now don't allow update to btrfs_fs_device through
		 * For now, we do allow update to btrfs_fs_device through the
		 * the btrfs dev scan cli, after FS has been mounted.
		 * btrfs dev scan cli after FS has been mounted.  We're still
		 * tracking a problem where systems fail mount by subvolume id
		 * when we reject replacement on a mounted FS.
		 */
		 */
		if (fs_devices->opened) {
		if (!fs_devices->opened && found_transid < device->generation) {
			return -EBUSY;
		} else {
			/*
			/*
			 * That is if the FS is _not_ mounted and if you
			 * That is if the FS is _not_ mounted and if you
			 * are here, that means there is more than one
			 * are here, that means there is more than one
@@ -542,7 +542,6 @@ static noinline int device_list_add(const char *path,
			 * with larger generation number or the last-in if
			 * with larger generation number or the last-in if
			 * generation are equal.
			 * generation are equal.
			 */
			 */
			if (found_transid < device->generation)
			return -EEXIST;
			return -EEXIST;
		}
		}