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:
"We have a few fixes in my for-linus branch.

Qu Wenruo's batch fix a regression between some our merge window pull
and the inode_cache feature. The rest are smaller bugs"

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs:
btrfs: Don't call btrfs_start_transaction() on frozen fs to avoid deadlock.
btrfs: Fix the bug that fs_info->pending_changes is never cleared.
btrfs: fix state->private cast on 32 bit machines
Btrfs: fix race deleting block group from space_info->ro_bgs list
Btrfs: fix incorrect freeing in scrub_stripe
btrfs: sync ioctl, handle errors after transaction start

+17 -6
+1
fs/btrfs/ctree.h
··· 1171 1171 struct percpu_counter total_bytes_pinned; 1172 1172 1173 1173 struct list_head list; 1174 + /* Protected by the spinlock 'lock'. */ 1174 1175 struct list_head ro_bgs; 1175 1176 1176 1177 struct rw_semaphore groups_sem;
+1 -1
fs/btrfs/extent-tree.c
··· 9422 9422 * are still on the list after taking the semaphore 9423 9423 */ 9424 9424 list_del_init(&block_group->list); 9425 - list_del_init(&block_group->ro_list); 9426 9425 if (list_empty(&block_group->space_info->block_groups[index])) { 9427 9426 kobj = block_group->space_info->block_group_kobjs[index]; 9428 9427 block_group->space_info->block_group_kobjs[index] = NULL; ··· 9463 9464 btrfs_remove_free_space_cache(block_group); 9464 9465 9465 9466 spin_lock(&block_group->space_info->lock); 9467 + list_del_init(&block_group->ro_list); 9466 9468 block_group->space_info->total_bytes -= block_group->key.offset; 9467 9469 block_group->space_info->bytes_readonly -= block_group->key.offset; 9468 9470 block_group->space_info->disk_total -= block_group->key.offset * factor;
+1 -1
fs/btrfs/extent_io.c
··· 2190 2190 2191 2191 next = next_state(state); 2192 2192 2193 - failrec = (struct io_failure_record *)state->private; 2193 + failrec = (struct io_failure_record *)(unsigned long)state->private; 2194 2194 free_extent_state(state); 2195 2195 kfree(failrec); 2196 2196
+1 -1
fs/btrfs/scrub.c
··· 3053 3053 3054 3054 ppath = btrfs_alloc_path(); 3055 3055 if (!ppath) { 3056 - btrfs_free_path(ppath); 3056 + btrfs_free_path(path); 3057 3057 return -ENOMEM; 3058 3058 } 3059 3059
+12 -2
fs/btrfs/super.c
··· 1000 1000 */ 1001 1001 if (fs_info->pending_changes == 0) 1002 1002 return 0; 1003 + /* 1004 + * A non-blocking test if the fs is frozen. We must not 1005 + * start a new transaction here otherwise a deadlock 1006 + * happens. The pending operations are delayed to the 1007 + * next commit after thawing. 1008 + */ 1009 + if (__sb_start_write(sb, SB_FREEZE_WRITE, false)) 1010 + __sb_end_write(sb, SB_FREEZE_WRITE); 1011 + else 1012 + return 0; 1003 1013 trans = btrfs_start_transaction(root, 0); 1004 - } else { 1005 - return PTR_ERR(trans); 1006 1014 } 1015 + if (IS_ERR(trans)) 1016 + return PTR_ERR(trans); 1007 1017 } 1008 1018 return btrfs_commit_transaction(trans, root); 1009 1019 }
+1 -1
fs/btrfs/transaction.c
··· 2118 2118 unsigned long prev; 2119 2119 unsigned long bit; 2120 2120 2121 - prev = cmpxchg(&fs_info->pending_changes, 0, 0); 2121 + prev = xchg(&fs_info->pending_changes, 0); 2122 2122 if (!prev) 2123 2123 return; 2124 2124