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 git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable

* git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable:
Btrfs: fix FS_IOC_SETFLAGS ioctl
Btrfs: fix FS_IOC_GETFLAGS ioctl
fs: remove FS_COW_FL
Btrfs: fix easily get into ENOSPC in mixed case
Prevent oopsing in posix_acl_valid()

+44 -23
+3 -2
fs/btrfs/acl.c
··· 178 178 179 179 if (value) { 180 180 acl = posix_acl_from_xattr(value, size); 181 + if (IS_ERR(acl)) 182 + return PTR_ERR(acl); 183 + 181 184 if (acl) { 182 185 ret = posix_acl_valid(acl); 183 186 if (ret) 184 187 goto out; 185 - } else if (IS_ERR(acl)) { 186 - return PTR_ERR(acl); 187 188 } 188 189 } 189 190
+26 -11
fs/btrfs/extent-tree.c
··· 8856 8856 int btrfs_init_space_info(struct btrfs_fs_info *fs_info) 8857 8857 { 8858 8858 struct btrfs_space_info *space_info; 8859 + struct btrfs_super_block *disk_super; 8860 + u64 features; 8861 + u64 flags; 8862 + int mixed = 0; 8859 8863 int ret; 8860 8864 8861 - ret = update_space_info(fs_info, BTRFS_BLOCK_GROUP_SYSTEM, 0, 0, 8862 - &space_info); 8863 - if (ret) 8864 - return ret; 8865 + disk_super = &fs_info->super_copy; 8866 + if (!btrfs_super_root(disk_super)) 8867 + return 1; 8865 8868 8866 - ret = update_space_info(fs_info, BTRFS_BLOCK_GROUP_METADATA, 0, 0, 8867 - &space_info); 8868 - if (ret) 8869 - return ret; 8869 + features = btrfs_super_incompat_flags(disk_super); 8870 + if (features & BTRFS_FEATURE_INCOMPAT_MIXED_GROUPS) 8871 + mixed = 1; 8870 8872 8871 - ret = update_space_info(fs_info, BTRFS_BLOCK_GROUP_DATA, 0, 0, 8872 - &space_info); 8873 + flags = BTRFS_BLOCK_GROUP_SYSTEM; 8874 + ret = update_space_info(fs_info, flags, 0, 0, &space_info); 8873 8875 if (ret) 8874 - return ret; 8876 + goto out; 8875 8877 8878 + if (mixed) { 8879 + flags = BTRFS_BLOCK_GROUP_METADATA | BTRFS_BLOCK_GROUP_DATA; 8880 + ret = update_space_info(fs_info, flags, 0, 0, &space_info); 8881 + } else { 8882 + flags = BTRFS_BLOCK_GROUP_METADATA; 8883 + ret = update_space_info(fs_info, flags, 0, 0, &space_info); 8884 + if (ret) 8885 + goto out; 8886 + 8887 + flags = BTRFS_BLOCK_GROUP_DATA; 8888 + ret = update_space_info(fs_info, flags, 0, 0, &space_info); 8889 + } 8890 + out: 8876 8891 return ret; 8877 8892 } 8878 8893
+15 -9
fs/btrfs/ioctl.c
··· 81 81 iflags |= FS_NOATIME_FL; 82 82 if (flags & BTRFS_INODE_DIRSYNC) 83 83 iflags |= FS_DIRSYNC_FL; 84 + if (flags & BTRFS_INODE_NODATACOW) 85 + iflags |= FS_NOCOW_FL; 86 + 87 + if ((flags & BTRFS_INODE_COMPRESS) && !(flags & BTRFS_INODE_NOCOMPRESS)) 88 + iflags |= FS_COMPR_FL; 89 + else if (flags & BTRFS_INODE_NOCOMPRESS) 90 + iflags |= FS_NOCOMP_FL; 84 91 85 92 return iflags; 86 93 } ··· 151 144 if (flags & ~(FS_IMMUTABLE_FL | FS_APPEND_FL | \ 152 145 FS_NOATIME_FL | FS_NODUMP_FL | \ 153 146 FS_SYNC_FL | FS_DIRSYNC_FL | \ 154 - FS_NOCOMP_FL | FS_COMPR_FL | \ 155 - FS_NOCOW_FL | FS_COW_FL)) 147 + FS_NOCOMP_FL | FS_COMPR_FL | 148 + FS_NOCOW_FL)) 156 149 return -EOPNOTSUPP; 157 150 158 151 if ((flags & FS_NOCOMP_FL) && (flags & FS_COMPR_FL)) 159 - return -EINVAL; 160 - 161 - if ((flags & FS_NOCOW_FL) && (flags & FS_COW_FL)) 162 152 return -EINVAL; 163 153 164 154 return 0; ··· 222 218 ip->flags |= BTRFS_INODE_DIRSYNC; 223 219 else 224 220 ip->flags &= ~BTRFS_INODE_DIRSYNC; 221 + if (flags & FS_NOCOW_FL) 222 + ip->flags |= BTRFS_INODE_NODATACOW; 223 + else 224 + ip->flags &= ~BTRFS_INODE_NODATACOW; 225 225 226 226 /* 227 227 * The COMPRESS flag can only be changed by users, while the NOCOMPRESS ··· 238 230 } else if (flags & FS_COMPR_FL) { 239 231 ip->flags |= BTRFS_INODE_COMPRESS; 240 232 ip->flags &= ~BTRFS_INODE_NOCOMPRESS; 233 + } else { 234 + ip->flags &= ~(BTRFS_INODE_COMPRESS | BTRFS_INODE_NOCOMPRESS); 241 235 } 242 - if (flags & FS_NOCOW_FL) 243 - ip->flags |= BTRFS_INODE_NODATACOW; 244 - else if (flags & FS_COW_FL) 245 - ip->flags &= ~BTRFS_INODE_NODATACOW; 246 236 247 237 trans = btrfs_join_transaction(root, 1); 248 238 BUG_ON(IS_ERR(trans));
-1
include/linux/fs.h
··· 358 358 #define FS_EXTENT_FL 0x00080000 /* Extents */ 359 359 #define FS_DIRECTIO_FL 0x00100000 /* Use direct i/o */ 360 360 #define FS_NOCOW_FL 0x00800000 /* Do not cow file */ 361 - #define FS_COW_FL 0x02000000 /* Cow file */ 362 361 #define FS_RESERVED_FL 0x80000000 /* reserved for ext2 lib */ 363 362 364 363 #define FS_FL_USER_VISIBLE 0x0003DFFF /* User visible flags */