diff options
Diffstat (limited to 'fs/btrfs/ctree.h')
| -rw-r--r-- | fs/btrfs/ctree.h | 150 | 
1 files changed, 118 insertions, 32 deletions
| diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h index 547b7b05727f..0d82922179db 100644 --- a/fs/btrfs/ctree.h +++ b/fs/btrfs/ctree.h | |||
| @@ -31,10 +31,10 @@ | |||
| 31 | #include <trace/events/btrfs.h> | 31 | #include <trace/events/btrfs.h> | 
| 32 | #include <asm/kmap_types.h> | 32 | #include <asm/kmap_types.h> | 
| 33 | #include <linux/pagemap.h> | 33 | #include <linux/pagemap.h> | 
| 34 | #include <linux/btrfs.h> | ||
| 34 | #include "extent_io.h" | 35 | #include "extent_io.h" | 
| 35 | #include "extent_map.h" | 36 | #include "extent_map.h" | 
| 36 | #include "async-thread.h" | 37 | #include "async-thread.h" | 
| 37 | #include "ioctl.h" | ||
| 38 | 38 | ||
| 39 | struct btrfs_trans_handle; | 39 | struct btrfs_trans_handle; | 
| 40 | struct btrfs_transaction; | 40 | struct btrfs_transaction; | 
| @@ -46,7 +46,7 @@ extern struct kmem_cache *btrfs_path_cachep; | |||
| 46 | extern struct kmem_cache *btrfs_free_space_cachep; | 46 | extern struct kmem_cache *btrfs_free_space_cachep; | 
| 47 | struct btrfs_ordered_sum; | 47 | struct btrfs_ordered_sum; | 
| 48 | 48 | ||
| 49 | #define BTRFS_MAGIC "_BHRfS_M" | 49 | #define BTRFS_MAGIC 0x4D5F53665248425FULL /* ascii _BHRfS_M, no null */ | 
| 50 | 50 | ||
| 51 | #define BTRFS_MAX_MIRRORS 3 | 51 | #define BTRFS_MAX_MIRRORS 3 | 
| 52 | 52 | ||
| @@ -191,6 +191,8 @@ static int btrfs_csum_sizes[] = { 4, 0 }; | |||
| 191 | /* ioprio of readahead is set to idle */ | 191 | /* ioprio of readahead is set to idle */ | 
| 192 | #define BTRFS_IOPRIO_READA (IOPRIO_PRIO_VALUE(IOPRIO_CLASS_IDLE, 0)) | 192 | #define BTRFS_IOPRIO_READA (IOPRIO_PRIO_VALUE(IOPRIO_CLASS_IDLE, 0)) | 
| 193 | 193 | ||
| 194 | #define BTRFS_DIRTY_METADATA_THRESH (32 * 1024 * 1024) | ||
| 195 | |||
| 194 | /* | 196 | /* | 
| 195 | * The key defines the order in the tree, and so it also defines (optimal) | 197 | * The key defines the order in the tree, and so it also defines (optimal) | 
| 196 | * block layout. | 198 | * block layout. | 
| @@ -336,7 +338,10 @@ static inline unsigned long btrfs_chunk_item_size(int num_stripes) | |||
| 336 | /* | 338 | /* | 
| 337 | * File system states | 339 | * File system states | 
| 338 | */ | 340 | */ | 
| 341 | #define BTRFS_FS_STATE_ERROR 0 | ||
| 342 | #define BTRFS_FS_STATE_REMOUNTING 1 | ||
| 339 | 343 | ||
| 344 | /* Super block flags */ | ||
| 340 | /* Errors detected */ | 345 | /* Errors detected */ | 
| 341 | #define BTRFS_SUPER_FLAG_ERROR (1ULL << 2) | 346 | #define BTRFS_SUPER_FLAG_ERROR (1ULL << 2) | 
| 342 | 347 | ||
| @@ -502,6 +507,7 @@ struct btrfs_super_block { | |||
| 502 | #define BTRFS_FEATURE_INCOMPAT_BIG_METADATA (1ULL << 5) | 507 | #define BTRFS_FEATURE_INCOMPAT_BIG_METADATA (1ULL << 5) | 
| 503 | 508 | ||
| 504 | #define BTRFS_FEATURE_INCOMPAT_EXTENDED_IREF (1ULL << 6) | 509 | #define BTRFS_FEATURE_INCOMPAT_EXTENDED_IREF (1ULL << 6) | 
| 510 | #define BTRFS_FEATURE_INCOMPAT_RAID56 (1ULL << 7) | ||
| 505 | 511 | ||
| 506 | #define BTRFS_FEATURE_COMPAT_SUPP 0ULL | 512 | #define BTRFS_FEATURE_COMPAT_SUPP 0ULL | 
| 507 | #define BTRFS_FEATURE_COMPAT_RO_SUPP 0ULL | 513 | #define BTRFS_FEATURE_COMPAT_RO_SUPP 0ULL | 
| @@ -511,6 +517,7 @@ struct btrfs_super_block { | |||
| 511 | BTRFS_FEATURE_INCOMPAT_MIXED_GROUPS | \ | 517 | BTRFS_FEATURE_INCOMPAT_MIXED_GROUPS | \ | 
| 512 | BTRFS_FEATURE_INCOMPAT_BIG_METADATA | \ | 518 | BTRFS_FEATURE_INCOMPAT_BIG_METADATA | \ | 
| 513 | BTRFS_FEATURE_INCOMPAT_COMPRESS_LZO | \ | 519 | BTRFS_FEATURE_INCOMPAT_COMPRESS_LZO | \ | 
| 520 | BTRFS_FEATURE_INCOMPAT_RAID56 | \ | ||
| 514 | BTRFS_FEATURE_INCOMPAT_EXTENDED_IREF) | 521 | BTRFS_FEATURE_INCOMPAT_EXTENDED_IREF) | 
| 515 | 522 | ||
| 516 | /* | 523 | /* | 
| @@ -952,8 +959,20 @@ struct btrfs_dev_replace_item { | |||
| 952 | #define BTRFS_BLOCK_GROUP_RAID1 (1ULL << 4) | 959 | #define BTRFS_BLOCK_GROUP_RAID1 (1ULL << 4) | 
| 953 | #define BTRFS_BLOCK_GROUP_DUP (1ULL << 5) | 960 | #define BTRFS_BLOCK_GROUP_DUP (1ULL << 5) | 
| 954 | #define BTRFS_BLOCK_GROUP_RAID10 (1ULL << 6) | 961 | #define BTRFS_BLOCK_GROUP_RAID10 (1ULL << 6) | 
| 962 | #define BTRFS_BLOCK_GROUP_RAID5 (1 << 7) | ||
| 963 | #define BTRFS_BLOCK_GROUP_RAID6 (1 << 8) | ||
| 955 | #define BTRFS_BLOCK_GROUP_RESERVED BTRFS_AVAIL_ALLOC_BIT_SINGLE | 964 | #define BTRFS_BLOCK_GROUP_RESERVED BTRFS_AVAIL_ALLOC_BIT_SINGLE | 
| 956 | #define BTRFS_NR_RAID_TYPES 5 | 965 | |
| 966 | enum btrfs_raid_types { | ||
| 967 | BTRFS_RAID_RAID10, | ||
| 968 | BTRFS_RAID_RAID1, | ||
| 969 | BTRFS_RAID_DUP, | ||
| 970 | BTRFS_RAID_RAID0, | ||
| 971 | BTRFS_RAID_SINGLE, | ||
| 972 | BTRFS_RAID_RAID5, | ||
| 973 | BTRFS_RAID_RAID6, | ||
| 974 | BTRFS_NR_RAID_TYPES | ||
| 975 | }; | ||
| 957 | 976 | ||
| 958 | #define BTRFS_BLOCK_GROUP_TYPE_MASK (BTRFS_BLOCK_GROUP_DATA | \ | 977 | #define BTRFS_BLOCK_GROUP_TYPE_MASK (BTRFS_BLOCK_GROUP_DATA | \ | 
| 959 | BTRFS_BLOCK_GROUP_SYSTEM | \ | 978 | BTRFS_BLOCK_GROUP_SYSTEM | \ | 
| @@ -961,6 +980,8 @@ struct btrfs_dev_replace_item { | |||
| 961 | 980 | ||
| 962 | #define BTRFS_BLOCK_GROUP_PROFILE_MASK (BTRFS_BLOCK_GROUP_RAID0 | \ | 981 | #define BTRFS_BLOCK_GROUP_PROFILE_MASK (BTRFS_BLOCK_GROUP_RAID0 | \ | 
| 963 | BTRFS_BLOCK_GROUP_RAID1 | \ | 982 | BTRFS_BLOCK_GROUP_RAID1 | \ | 
| 983 | BTRFS_BLOCK_GROUP_RAID5 | \ | ||
| 984 | BTRFS_BLOCK_GROUP_RAID6 | \ | ||
| 964 | BTRFS_BLOCK_GROUP_DUP | \ | 985 | BTRFS_BLOCK_GROUP_DUP | \ | 
| 965 | BTRFS_BLOCK_GROUP_RAID10) | 986 | BTRFS_BLOCK_GROUP_RAID10) | 
| 966 | /* | 987 | /* | 
| @@ -1185,6 +1206,10 @@ struct btrfs_block_group_cache { | |||
| 1185 | u64 flags; | 1206 | u64 flags; | 
| 1186 | u64 sectorsize; | 1207 | u64 sectorsize; | 
| 1187 | u64 cache_generation; | 1208 | u64 cache_generation; | 
| 1209 | |||
| 1210 | /* for raid56, this is a full stripe, without parity */ | ||
| 1211 | unsigned long full_stripe_len; | ||
| 1212 | |||
| 1188 | unsigned int ro:1; | 1213 | unsigned int ro:1; | 
| 1189 | unsigned int dirty:1; | 1214 | unsigned int dirty:1; | 
| 1190 | unsigned int iref:1; | 1215 | unsigned int iref:1; | 
| @@ -1225,6 +1250,28 @@ struct seq_list { | |||
| 1225 | u64 seq; | 1250 | u64 seq; | 
| 1226 | }; | 1251 | }; | 
| 1227 | 1252 | ||
| 1253 | enum btrfs_orphan_cleanup_state { | ||
| 1254 | ORPHAN_CLEANUP_STARTED = 1, | ||
| 1255 | ORPHAN_CLEANUP_DONE = 2, | ||
| 1256 | }; | ||
| 1257 | |||
| 1258 | /* used by the raid56 code to lock stripes for read/modify/write */ | ||
| 1259 | struct btrfs_stripe_hash { | ||
| 1260 | struct list_head hash_list; | ||
| 1261 | wait_queue_head_t wait; | ||
| 1262 | spinlock_t lock; | ||
| 1263 | }; | ||
| 1264 | |||
| 1265 | /* used by the raid56 code to lock stripes for read/modify/write */ | ||
| 1266 | struct btrfs_stripe_hash_table { | ||
| 1267 | struct list_head stripe_cache; | ||
| 1268 | spinlock_t cache_lock; | ||
| 1269 | int cache_size; | ||
| 1270 | struct btrfs_stripe_hash table[]; | ||
| 1271 | }; | ||
| 1272 | |||
| 1273 | #define BTRFS_STRIPE_HASH_TABLE_BITS 11 | ||
| 1274 | |||
| 1228 | /* fs_info */ | 1275 | /* fs_info */ | 
| 1229 | struct reloc_control; | 1276 | struct reloc_control; | 
| 1230 | struct btrfs_device; | 1277 | struct btrfs_device; | 
| @@ -1250,6 +1297,7 @@ struct btrfs_fs_info { | |||
| 1250 | 1297 | ||
| 1251 | /* block group cache stuff */ | 1298 | /* block group cache stuff */ | 
| 1252 | spinlock_t block_group_cache_lock; | 1299 | spinlock_t block_group_cache_lock; | 
| 1300 | u64 first_logical_byte; | ||
| 1253 | struct rb_root block_group_cache_tree; | 1301 | struct rb_root block_group_cache_tree; | 
| 1254 | 1302 | ||
| 1255 | /* keep track of unallocated space */ | 1303 | /* keep track of unallocated space */ | 
| @@ -1288,7 +1336,23 @@ struct btrfs_fs_info { | |||
| 1288 | u64 last_trans_log_full_commit; | 1336 | u64 last_trans_log_full_commit; | 
| 1289 | unsigned long mount_opt; | 1337 | unsigned long mount_opt; | 
| 1290 | unsigned long compress_type:4; | 1338 | unsigned long compress_type:4; | 
| 1339 | /* | ||
| 1340 | * It is a suggestive number, the read side is safe even it gets a | ||
| 1341 | * wrong number because we will write out the data into a regular | ||
| 1342 | * extent. The write side(mount/remount) is under ->s_umount lock, | ||
| 1343 | * so it is also safe. | ||
| 1344 | */ | ||
| 1291 | u64 max_inline; | 1345 | u64 max_inline; | 
| 1346 | /* | ||
| 1347 | * Protected by ->chunk_mutex and sb->s_umount. | ||
| 1348 | * | ||
| 1349 | * The reason that we use two lock to protect it is because only | ||
| 1350 | * remount and mount operations can change it and these two operations | ||
| 1351 | * are under sb->s_umount, but the read side (chunk allocation) can not | ||
| 1352 | * acquire sb->s_umount or the deadlock would happen. So we use two | ||
| 1353 | * locks to protect it. On the write side, we must acquire two locks, | ||
| 1354 | * and on the read side, we just need acquire one of them. | ||
| 1355 | */ | ||
| 1292 | u64 alloc_start; | 1356 | u64 alloc_start; | 
| 1293 | struct btrfs_transaction *running_transaction; | 1357 | struct btrfs_transaction *running_transaction; | 
| 1294 | wait_queue_head_t transaction_throttle; | 1358 | wait_queue_head_t transaction_throttle; | 
| @@ -1307,6 +1371,13 @@ struct btrfs_fs_info { | |||
| 1307 | struct mutex cleaner_mutex; | 1371 | struct mutex cleaner_mutex; | 
| 1308 | struct mutex chunk_mutex; | 1372 | struct mutex chunk_mutex; | 
| 1309 | struct mutex volume_mutex; | 1373 | struct mutex volume_mutex; | 
| 1374 | |||
| 1375 | /* this is used during read/modify/write to make sure | ||
| 1376 | * no two ios are trying to mod the same stripe at the same | ||
| 1377 | * time | ||
| 1378 | */ | ||
| 1379 | struct btrfs_stripe_hash_table *stripe_hash_table; | ||
| 1380 | |||
| 1310 | /* | 1381 | /* | 
| 1311 | * this protects the ordered operations list only while we are | 1382 | * this protects the ordered operations list only while we are | 
| 1312 | * processing all of the entries on it. This way we make | 1383 | * processing all of the entries on it. This way we make | 
| @@ -1365,6 +1436,7 @@ struct btrfs_fs_info { | |||
| 1365 | */ | 1436 | */ | 
| 1366 | struct list_head ordered_extents; | 1437 | struct list_head ordered_extents; | 
| 1367 | 1438 | ||
| 1439 | spinlock_t delalloc_lock; | ||
| 1368 | /* | 1440 | /* | 
| 1369 | * all of the inodes that have delalloc bytes. It is possible for | 1441 | * all of the inodes that have delalloc bytes. It is possible for | 
| 1370 | * this list to be empty even when there is still dirty data=ordered | 1442 | * this list to be empty even when there is still dirty data=ordered | 
| @@ -1373,13 +1445,6 @@ struct btrfs_fs_info { | |||
| 1373 | struct list_head delalloc_inodes; | 1445 | struct list_head delalloc_inodes; | 
| 1374 | 1446 | ||
| 1375 | /* | 1447 | /* | 
| 1376 | * special rename and truncate targets that must be on disk before | ||
| 1377 | * we're allowed to commit. This is basically the ext3 style | ||
| 1378 | * data=ordered list. | ||
| 1379 | */ | ||
| 1380 | struct list_head ordered_operations; | ||
| 1381 | |||
| 1382 | /* | ||
| 1383 | * there is a pool of worker threads for checksumming during writes | 1448 | * there is a pool of worker threads for checksumming during writes | 
| 1384 | * and a pool for checksumming after reads. This is because readers | 1449 | * and a pool for checksumming after reads. This is because readers | 
| 1385 | * can run with FS locks held, and the writers may be waiting for | 1450 | * can run with FS locks held, and the writers may be waiting for | 
| @@ -1395,6 +1460,8 @@ struct btrfs_fs_info { | |||
| 1395 | struct btrfs_workers flush_workers; | 1460 | struct btrfs_workers flush_workers; | 
| 1396 | struct btrfs_workers endio_workers; | 1461 | struct btrfs_workers endio_workers; | 
| 1397 | struct btrfs_workers endio_meta_workers; | 1462 | struct btrfs_workers endio_meta_workers; | 
| 1463 | struct btrfs_workers endio_raid56_workers; | ||
| 1464 | struct btrfs_workers rmw_workers; | ||
| 1398 | struct btrfs_workers endio_meta_write_workers; | 1465 | struct btrfs_workers endio_meta_write_workers; | 
| 1399 | struct btrfs_workers endio_write_workers; | 1466 | struct btrfs_workers endio_write_workers; | 
| 1400 | struct btrfs_workers endio_freespace_worker; | 1467 | struct btrfs_workers endio_freespace_worker; | 
| @@ -1423,10 +1490,12 @@ struct btrfs_fs_info { | |||
| 1423 | 1490 | ||
| 1424 | u64 total_pinned; | 1491 | u64 total_pinned; | 
| 1425 | 1492 | ||
| 1426 | /* protected by the delalloc lock, used to keep from writing | 1493 | /* used to keep from writing metadata until there is a nice batch */ | 
| 1427 | * metadata until there is a nice batch | 1494 | struct percpu_counter dirty_metadata_bytes; | 
| 1428 | */ | 1495 | struct percpu_counter delalloc_bytes; | 
| 1429 | u64 dirty_metadata_bytes; | 1496 | s32 dirty_metadata_batch; | 
| 1497 | s32 delalloc_batch; | ||
| 1498 | |||
| 1430 | struct list_head dirty_cowonly_roots; | 1499 | struct list_head dirty_cowonly_roots; | 
| 1431 | 1500 | ||
| 1432 | struct btrfs_fs_devices *fs_devices; | 1501 | struct btrfs_fs_devices *fs_devices; | 
| @@ -1442,9 +1511,6 @@ struct btrfs_fs_info { | |||
| 1442 | 1511 | ||
| 1443 | struct reloc_control *reloc_ctl; | 1512 | struct reloc_control *reloc_ctl; | 
| 1444 | 1513 | ||
| 1445 | spinlock_t delalloc_lock; | ||
| 1446 | u64 delalloc_bytes; | ||
| 1447 | |||
| 1448 | /* data_alloc_cluster is only used in ssd mode */ | 1514 | /* data_alloc_cluster is only used in ssd mode */ | 
| 1449 | struct btrfs_free_cluster data_alloc_cluster; | 1515 | struct btrfs_free_cluster data_alloc_cluster; | 
| 1450 | 1516 | ||
| @@ -1456,6 +1522,8 @@ struct btrfs_fs_info { | |||
| 1456 | struct rb_root defrag_inodes; | 1522 | struct rb_root defrag_inodes; | 
| 1457 | atomic_t defrag_running; | 1523 | atomic_t defrag_running; | 
| 1458 | 1524 | ||
| 1525 | /* Used to protect avail_{data, metadata, system}_alloc_bits */ | ||
| 1526 | seqlock_t profiles_lock; | ||
| 1459 | /* | 1527 | /* | 
| 1460 | * these three are in extended format (availability of single | 1528 | * these three are in extended format (availability of single | 
| 1461 | * chunks is denoted by BTRFS_AVAIL_ALLOC_BIT_SINGLE bit, other | 1529 | * chunks is denoted by BTRFS_AVAIL_ALLOC_BIT_SINGLE bit, other | 
| @@ -1520,7 +1588,7 @@ struct btrfs_fs_info { | |||
| 1520 | u64 qgroup_seq; | 1588 | u64 qgroup_seq; | 
| 1521 | 1589 | ||
| 1522 | /* filesystem state */ | 1590 | /* filesystem state */ | 
| 1523 | u64 fs_state; | 1591 | unsigned long fs_state; | 
| 1524 | 1592 | ||
| 1525 | struct btrfs_delayed_root *delayed_root; | 1593 | struct btrfs_delayed_root *delayed_root; | 
| 1526 | 1594 | ||
| @@ -1623,6 +1691,9 @@ struct btrfs_root { | |||
| 1623 | 1691 | ||
| 1624 | struct list_head root_list; | 1692 | struct list_head root_list; | 
| 1625 | 1693 | ||
| 1694 | spinlock_t log_extents_lock[2]; | ||
| 1695 | struct list_head logged_list[2]; | ||
| 1696 | |||
| 1626 | spinlock_t orphan_lock; | 1697 | spinlock_t orphan_lock; | 
| 1627 | atomic_t orphan_inodes; | 1698 | atomic_t orphan_inodes; | 
| 1628 | struct btrfs_block_rsv *orphan_block_rsv; | 1699 | struct btrfs_block_rsv *orphan_block_rsv; | 
| @@ -1832,6 +1903,7 @@ struct btrfs_ioctl_defrag_range_args { | |||
| 1832 | 1903 | ||
| 1833 | #define btrfs_clear_opt(o, opt) ((o) &= ~BTRFS_MOUNT_##opt) | 1904 | #define btrfs_clear_opt(o, opt) ((o) &= ~BTRFS_MOUNT_##opt) | 
| 1834 | #define btrfs_set_opt(o, opt) ((o) |= BTRFS_MOUNT_##opt) | 1905 | #define btrfs_set_opt(o, opt) ((o) |= BTRFS_MOUNT_##opt) | 
| 1906 | #define btrfs_raw_test_opt(o, opt) ((o) & BTRFS_MOUNT_##opt) | ||
| 1835 | #define btrfs_test_opt(root, opt) ((root)->fs_info->mount_opt & \ | 1907 | #define btrfs_test_opt(root, opt) ((root)->fs_info->mount_opt & \ | 
| 1836 | BTRFS_MOUNT_##opt) | 1908 | BTRFS_MOUNT_##opt) | 
| 1837 | /* | 1909 | /* | 
| @@ -2936,8 +3008,7 @@ int btrfs_lookup_extent_info(struct btrfs_trans_handle *trans, | |||
| 2936 | u64 num_bytes, u64 *refs, u64 *flags); | 3008 | u64 num_bytes, u64 *refs, u64 *flags); | 
| 2937 | int btrfs_pin_extent(struct btrfs_root *root, | 3009 | int btrfs_pin_extent(struct btrfs_root *root, | 
| 2938 | u64 bytenr, u64 num, int reserved); | 3010 | u64 bytenr, u64 num, int reserved); | 
| 2939 | int btrfs_pin_extent_for_log_replay(struct btrfs_trans_handle *trans, | 3011 | int btrfs_pin_extent_for_log_replay(struct btrfs_root *root, | 
| 2940 | struct btrfs_root *root, | ||
| 2941 | u64 bytenr, u64 num_bytes); | 3012 | u64 bytenr, u64 num_bytes); | 
| 2942 | int btrfs_cross_ref_exist(struct btrfs_trans_handle *trans, | 3013 | int btrfs_cross_ref_exist(struct btrfs_trans_handle *trans, | 
| 2943 | struct btrfs_root *root, | 3014 | struct btrfs_root *root, | 
| @@ -3035,8 +3106,13 @@ void btrfs_trans_release_metadata(struct btrfs_trans_handle *trans, | |||
| 3035 | int btrfs_orphan_reserve_metadata(struct btrfs_trans_handle *trans, | 3106 | int btrfs_orphan_reserve_metadata(struct btrfs_trans_handle *trans, | 
| 3036 | struct inode *inode); | 3107 | struct inode *inode); | 
| 3037 | void btrfs_orphan_release_metadata(struct inode *inode); | 3108 | void btrfs_orphan_release_metadata(struct inode *inode); | 
| 3038 | int btrfs_snap_reserve_metadata(struct btrfs_trans_handle *trans, | 3109 | int btrfs_subvolume_reserve_metadata(struct btrfs_root *root, | 
| 3039 | struct btrfs_pending_snapshot *pending); | 3110 | struct btrfs_block_rsv *rsv, | 
| 3111 | int nitems, | ||
| 3112 | u64 *qgroup_reserved); | ||
| 3113 | void btrfs_subvolume_release_metadata(struct btrfs_root *root, | ||
| 3114 | struct btrfs_block_rsv *rsv, | ||
| 3115 | u64 qgroup_reserved); | ||
| 3040 | int btrfs_delalloc_reserve_metadata(struct inode *inode, u64 num_bytes); | 3116 | int btrfs_delalloc_reserve_metadata(struct inode *inode, u64 num_bytes); | 
| 3041 | void btrfs_delalloc_release_metadata(struct inode *inode, u64 num_bytes); | 3117 | void btrfs_delalloc_release_metadata(struct inode *inode, u64 num_bytes); | 
| 3042 | int btrfs_delalloc_reserve_space(struct inode *inode, u64 num_bytes); | 3118 | int btrfs_delalloc_reserve_space(struct inode *inode, u64 num_bytes); | 
| @@ -3092,10 +3168,10 @@ struct extent_buffer *btrfs_root_node(struct btrfs_root *root); | |||
| 3092 | struct extent_buffer *btrfs_lock_root_node(struct btrfs_root *root); | 3168 | struct extent_buffer *btrfs_lock_root_node(struct btrfs_root *root); | 
| 3093 | int btrfs_find_next_key(struct btrfs_root *root, struct btrfs_path *path, | 3169 | int btrfs_find_next_key(struct btrfs_root *root, struct btrfs_path *path, | 
| 3094 | struct btrfs_key *key, int lowest_level, | 3170 | struct btrfs_key *key, int lowest_level, | 
| 3095 | int cache_only, u64 min_trans); | 3171 | u64 min_trans); | 
| 3096 | int btrfs_search_forward(struct btrfs_root *root, struct btrfs_key *min_key, | 3172 | int btrfs_search_forward(struct btrfs_root *root, struct btrfs_key *min_key, | 
| 3097 | struct btrfs_key *max_key, | 3173 | struct btrfs_key *max_key, | 
| 3098 | struct btrfs_path *path, int cache_only, | 3174 | struct btrfs_path *path, | 
| 3099 | u64 min_trans); | 3175 | u64 min_trans); | 
| 3100 | enum btrfs_compare_tree_result { | 3176 | enum btrfs_compare_tree_result { | 
| 3101 | BTRFS_COMPARE_TREE_NEW, | 3177 | BTRFS_COMPARE_TREE_NEW, | 
| @@ -3148,7 +3224,7 @@ int btrfs_search_slot_for_read(struct btrfs_root *root, | |||
| 3148 | int find_higher, int return_any); | 3224 | int find_higher, int return_any); | 
| 3149 | int btrfs_realloc_node(struct btrfs_trans_handle *trans, | 3225 | int btrfs_realloc_node(struct btrfs_trans_handle *trans, | 
| 3150 | struct btrfs_root *root, struct extent_buffer *parent, | 3226 | struct btrfs_root *root, struct extent_buffer *parent, | 
| 3151 | int start_slot, int cache_only, u64 *last_ret, | 3227 | int start_slot, u64 *last_ret, | 
| 3152 | struct btrfs_key *progress); | 3228 | struct btrfs_key *progress); | 
| 3153 | void btrfs_release_path(struct btrfs_path *p); | 3229 | void btrfs_release_path(struct btrfs_path *p); | 
| 3154 | struct btrfs_path *btrfs_alloc_path(void); | 3230 | struct btrfs_path *btrfs_alloc_path(void); | 
| @@ -3459,9 +3535,9 @@ int btrfs_writepages(struct address_space *mapping, | |||
| 3459 | struct writeback_control *wbc); | 3535 | struct writeback_control *wbc); | 
| 3460 | int btrfs_create_subvol_root(struct btrfs_trans_handle *trans, | 3536 | int btrfs_create_subvol_root(struct btrfs_trans_handle *trans, | 
| 3461 | struct btrfs_root *new_root, u64 new_dirid); | 3537 | struct btrfs_root *new_root, u64 new_dirid); | 
| 3462 | int btrfs_merge_bio_hook(struct page *page, unsigned long offset, | 3538 | int btrfs_merge_bio_hook(int rw, struct page *page, unsigned long offset, | 
| 3463 | size_t size, struct bio *bio, unsigned long bio_flags); | 3539 | size_t size, struct bio *bio, | 
| 3464 | 3540 | unsigned long bio_flags); | |
| 3465 | int btrfs_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf); | 3541 | int btrfs_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf); | 
| 3466 | int btrfs_readpage(struct file *file, struct page *page); | 3542 | int btrfs_readpage(struct file *file, struct page *page); | 
| 3467 | void btrfs_evict_inode(struct inode *inode); | 3543 | void btrfs_evict_inode(struct inode *inode); | 
| @@ -3543,7 +3619,7 @@ int btrfs_dirty_pages(struct btrfs_root *root, struct inode *inode, | |||
| 3543 | 3619 | ||
| 3544 | /* tree-defrag.c */ | 3620 | /* tree-defrag.c */ | 
| 3545 | int btrfs_defrag_leaves(struct btrfs_trans_handle *trans, | 3621 | int btrfs_defrag_leaves(struct btrfs_trans_handle *trans, | 
| 3546 | struct btrfs_root *root, int cache_only); | 3622 | struct btrfs_root *root); | 
| 3547 | 3623 | ||
| 3548 | /* sysfs.c */ | 3624 | /* sysfs.c */ | 
| 3549 | int btrfs_init_sysfs(void); | 3625 | int btrfs_init_sysfs(void); | 
| @@ -3620,11 +3696,14 @@ __printf(5, 6) | |||
| 3620 | void __btrfs_panic(struct btrfs_fs_info *fs_info, const char *function, | 3696 | void __btrfs_panic(struct btrfs_fs_info *fs_info, const char *function, | 
| 3621 | unsigned int line, int errno, const char *fmt, ...); | 3697 | unsigned int line, int errno, const char *fmt, ...); | 
| 3622 | 3698 | ||
| 3699 | /* | ||
| 3700 | * If BTRFS_MOUNT_PANIC_ON_FATAL_ERROR is in mount_opt, __btrfs_panic | ||
| 3701 | * will panic(). Otherwise we BUG() here. | ||
| 3702 | */ | ||
| 3623 | #define btrfs_panic(fs_info, errno, fmt, args...) \ | 3703 | #define btrfs_panic(fs_info, errno, fmt, args...) \ | 
| 3624 | do { \ | 3704 | do { \ | 
| 3625 | struct btrfs_fs_info *_i = (fs_info); \ | 3705 | __btrfs_panic(fs_info, __func__, __LINE__, errno, fmt, ##args); \ | 
| 3626 | __btrfs_panic(_i, __func__, __LINE__, errno, fmt, ##args); \ | 3706 | BUG(); \ | 
| 3627 | BUG_ON(!(_i->mount_opt & BTRFS_MOUNT_PANIC_ON_FATAL_ERROR)); \ | ||
| 3628 | } while (0) | 3707 | } while (0) | 
| 3629 | 3708 | ||
| 3630 | /* acl.c */ | 3709 | /* acl.c */ | 
| @@ -3745,4 +3824,11 @@ static inline int is_fstree(u64 rootid) | |||
| 3745 | return 1; | 3824 | return 1; | 
| 3746 | return 0; | 3825 | return 0; | 
| 3747 | } | 3826 | } | 
| 3827 | |||
| 3828 | static inline int btrfs_defrag_cancelled(struct btrfs_fs_info *fs_info) | ||
| 3829 | { | ||
| 3830 | return signal_pending(current); | ||
| 3831 | } | ||
| 3832 | |||
| 3833 | |||
| 3748 | #endif | 3834 | #endif | 
