diff options
author | Felix Blyakher <felixb@sgi.com> | 2009-06-10 18:07:47 -0400 |
---|---|---|
committer | Felix Blyakher <felixb@sgi.com> | 2009-06-10 18:07:47 -0400 |
commit | 4e73e0eb633f8a1b5cbf20e7f42c6dbfec1d1ca7 (patch) | |
tree | 0cea46e43f0625244c3d06a71d6559e5ec5419ca /fs/ocfs2/ocfs2.h | |
parent | 4156e735d3abde8e9243b5d22f7999dd3fffab2e (diff) | |
parent | 07a2039b8eb0af4ff464efd3dfd95de5c02648c6 (diff) |
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
Diffstat (limited to 'fs/ocfs2/ocfs2.h')
-rw-r--r-- | fs/ocfs2/ocfs2.h | 76 |
1 files changed, 71 insertions, 5 deletions
diff --git a/fs/ocfs2/ocfs2.h b/fs/ocfs2/ocfs2.h index 946d3c34b90b..1386281950db 100644 --- a/fs/ocfs2/ocfs2.h +++ b/fs/ocfs2/ocfs2.h | |||
@@ -209,6 +209,7 @@ enum ocfs2_mount_options | |||
209 | struct ocfs2_journal; | 209 | struct ocfs2_journal; |
210 | struct ocfs2_slot_info; | 210 | struct ocfs2_slot_info; |
211 | struct ocfs2_recovery_map; | 211 | struct ocfs2_recovery_map; |
212 | struct ocfs2_replay_map; | ||
212 | struct ocfs2_quota_recovery; | 213 | struct ocfs2_quota_recovery; |
213 | struct ocfs2_dentry_lock; | 214 | struct ocfs2_dentry_lock; |
214 | struct ocfs2_super | 215 | struct ocfs2_super |
@@ -264,6 +265,7 @@ struct ocfs2_super | |||
264 | atomic_t vol_state; | 265 | atomic_t vol_state; |
265 | struct mutex recovery_lock; | 266 | struct mutex recovery_lock; |
266 | struct ocfs2_recovery_map *recovery_map; | 267 | struct ocfs2_recovery_map *recovery_map; |
268 | struct ocfs2_replay_map *replay_map; | ||
267 | struct task_struct *recovery_thread_task; | 269 | struct task_struct *recovery_thread_task; |
268 | int disable_recovery; | 270 | int disable_recovery; |
269 | wait_queue_head_t checkpoint_event; | 271 | wait_queue_head_t checkpoint_event; |
@@ -287,11 +289,6 @@ struct ocfs2_super | |||
287 | 289 | ||
288 | u64 la_last_gd; | 290 | u64 la_last_gd; |
289 | 291 | ||
290 | #ifdef CONFIG_OCFS2_FS_STATS | ||
291 | struct dentry *local_alloc_debug; | ||
292 | char *local_alloc_debug_buf; | ||
293 | #endif | ||
294 | |||
295 | /* Next three fields are for local node slot recovery during | 292 | /* Next three fields are for local node slot recovery during |
296 | * mount. */ | 293 | * mount. */ |
297 | int dirty; | 294 | int dirty; |
@@ -305,9 +302,11 @@ struct ocfs2_super | |||
305 | struct ocfs2_cluster_connection *cconn; | 302 | struct ocfs2_cluster_connection *cconn; |
306 | struct ocfs2_lock_res osb_super_lockres; | 303 | struct ocfs2_lock_res osb_super_lockres; |
307 | struct ocfs2_lock_res osb_rename_lockres; | 304 | struct ocfs2_lock_res osb_rename_lockres; |
305 | struct ocfs2_lock_res osb_nfs_sync_lockres; | ||
308 | struct ocfs2_dlm_debug *osb_dlm_debug; | 306 | struct ocfs2_dlm_debug *osb_dlm_debug; |
309 | 307 | ||
310 | struct dentry *osb_debug_root; | 308 | struct dentry *osb_debug_root; |
309 | struct dentry *osb_ctxt; | ||
311 | 310 | ||
312 | wait_queue_head_t recovery_event; | 311 | wait_queue_head_t recovery_event; |
313 | 312 | ||
@@ -344,6 +343,12 @@ struct ocfs2_super | |||
344 | 343 | ||
345 | /* used to protect metaecc calculation check of xattr. */ | 344 | /* used to protect metaecc calculation check of xattr. */ |
346 | spinlock_t osb_xattr_lock; | 345 | spinlock_t osb_xattr_lock; |
346 | |||
347 | unsigned int osb_dx_mask; | ||
348 | u32 osb_dx_seed[4]; | ||
349 | |||
350 | /* the group we used to allocate inodes. */ | ||
351 | u64 osb_inode_alloc_group; | ||
347 | }; | 352 | }; |
348 | 353 | ||
349 | #define OCFS2_SB(sb) ((struct ocfs2_super *)(sb)->s_fs_info) | 354 | #define OCFS2_SB(sb) ((struct ocfs2_super *)(sb)->s_fs_info) |
@@ -402,6 +407,51 @@ static inline int ocfs2_meta_ecc(struct ocfs2_super *osb) | |||
402 | return 0; | 407 | return 0; |
403 | } | 408 | } |
404 | 409 | ||
410 | static inline int ocfs2_supports_indexed_dirs(struct ocfs2_super *osb) | ||
411 | { | ||
412 | if (osb->s_feature_incompat & OCFS2_FEATURE_INCOMPAT_INDEXED_DIRS) | ||
413 | return 1; | ||
414 | return 0; | ||
415 | } | ||
416 | |||
417 | static inline unsigned int ocfs2_link_max(struct ocfs2_super *osb) | ||
418 | { | ||
419 | if (ocfs2_supports_indexed_dirs(osb)) | ||
420 | return OCFS2_DX_LINK_MAX; | ||
421 | return OCFS2_LINK_MAX; | ||
422 | } | ||
423 | |||
424 | static inline unsigned int ocfs2_read_links_count(struct ocfs2_dinode *di) | ||
425 | { | ||
426 | u32 nlink = le16_to_cpu(di->i_links_count); | ||
427 | u32 hi = le16_to_cpu(di->i_links_count_hi); | ||
428 | |||
429 | if (di->i_dyn_features & cpu_to_le16(OCFS2_INDEXED_DIR_FL)) | ||
430 | nlink |= (hi << OCFS2_LINKS_HI_SHIFT); | ||
431 | |||
432 | return nlink; | ||
433 | } | ||
434 | |||
435 | static inline void ocfs2_set_links_count(struct ocfs2_dinode *di, u32 nlink) | ||
436 | { | ||
437 | u16 lo, hi; | ||
438 | |||
439 | lo = nlink; | ||
440 | hi = nlink >> OCFS2_LINKS_HI_SHIFT; | ||
441 | |||
442 | di->i_links_count = cpu_to_le16(lo); | ||
443 | di->i_links_count_hi = cpu_to_le16(hi); | ||
444 | } | ||
445 | |||
446 | static inline void ocfs2_add_links_count(struct ocfs2_dinode *di, int n) | ||
447 | { | ||
448 | u32 links = ocfs2_read_links_count(di); | ||
449 | |||
450 | links += n; | ||
451 | |||
452 | ocfs2_set_links_count(di, links); | ||
453 | } | ||
454 | |||
405 | /* set / clear functions because cluster events can make these happen | 455 | /* set / clear functions because cluster events can make these happen |
406 | * in parallel so we want the transitions to be atomic. this also | 456 | * in parallel so we want the transitions to be atomic. this also |
407 | * means that any future flags osb_flags must be protected by spinlock | 457 | * means that any future flags osb_flags must be protected by spinlock |
@@ -482,6 +532,12 @@ static inline int ocfs2_uses_extended_slot_map(struct ocfs2_super *osb) | |||
482 | #define OCFS2_IS_VALID_DIR_TRAILER(ptr) \ | 532 | #define OCFS2_IS_VALID_DIR_TRAILER(ptr) \ |
483 | (!strcmp((ptr)->db_signature, OCFS2_DIR_TRAILER_SIGNATURE)) | 533 | (!strcmp((ptr)->db_signature, OCFS2_DIR_TRAILER_SIGNATURE)) |
484 | 534 | ||
535 | #define OCFS2_IS_VALID_DX_ROOT(ptr) \ | ||
536 | (!strcmp((ptr)->dr_signature, OCFS2_DX_ROOT_SIGNATURE)) | ||
537 | |||
538 | #define OCFS2_IS_VALID_DX_LEAF(ptr) \ | ||
539 | (!strcmp((ptr)->dl_signature, OCFS2_DX_LEAF_SIGNATURE)) | ||
540 | |||
485 | static inline unsigned long ino_from_blkno(struct super_block *sb, | 541 | static inline unsigned long ino_from_blkno(struct super_block *sb, |
486 | u64 blkno) | 542 | u64 blkno) |
487 | { | 543 | { |
@@ -532,6 +588,16 @@ static inline u64 ocfs2_clusters_to_bytes(struct super_block *sb, | |||
532 | return (u64)clusters << OCFS2_SB(sb)->s_clustersize_bits; | 588 | return (u64)clusters << OCFS2_SB(sb)->s_clustersize_bits; |
533 | } | 589 | } |
534 | 590 | ||
591 | static inline u64 ocfs2_block_to_cluster_start(struct super_block *sb, | ||
592 | u64 blocks) | ||
593 | { | ||
594 | int bits = OCFS2_SB(sb)->s_clustersize_bits - sb->s_blocksize_bits; | ||
595 | unsigned int clusters; | ||
596 | |||
597 | clusters = ocfs2_blocks_to_clusters(sb, blocks); | ||
598 | return (u64)clusters << bits; | ||
599 | } | ||
600 | |||
535 | static inline u64 ocfs2_align_bytes_to_clusters(struct super_block *sb, | 601 | static inline u64 ocfs2_align_bytes_to_clusters(struct super_block *sb, |
536 | u64 bytes) | 602 | u64 bytes) |
537 | { | 603 | { |