diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-11-02 13:06:20 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-11-02 13:06:20 -0400 |
| commit | f1f8935a5c38a2c61e86a42bc971a2539eef2211 (patch) | |
| tree | 694950045f2f5d89507d7206cf6595e09cdfbd2c /include/linux | |
| parent | 34116645d912f65d7eb4508a1db3c9d0e45facb1 (diff) | |
| parent | f2a44523b20f323e4aef7c16261d34d6f0a4bf06 (diff) | |
Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4
* 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4: (97 commits)
jbd2: Unify log messages in jbd2 code
jbd/jbd2: validate sb->s_first in journal_get_superblock()
ext4: let ext4_ext_rm_leaf work with EXT_DEBUG defined
ext4: fix a syntax error in ext4_ext_insert_extent when debugging enabled
ext4: fix a typo in struct ext4_allocation_context
ext4: Don't normalize an falloc request if it can fit in 1 extent.
ext4: remove comments about extent mount option in ext4_new_inode()
ext4: let ext4_discard_partial_buffers handle unaligned range correctly
ext4: return ENOMEM if find_or_create_pages fails
ext4: move vars to local scope in ext4_discard_partial_page_buffers_no_lock()
ext4: Create helper function for EXT4_IO_END_UNWRITTEN and i_aiodio_unwritten
ext4: optimize locking for end_io extent conversion
ext4: remove unnecessary call to waitqueue_active()
ext4: Use correct locking for ext4_end_io_nolock()
ext4: fix race in xattr block allocation path
ext4: trace punch_hole correctly in ext4_ext_map_blocks
ext4: clean up AGGRESSIVE_TEST code
ext4: move variables to their scope
ext4: fix quota accounting during migration
ext4: migrate cleanup
...
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/ext2_fs.h | 4 | ||||
| -rw-r--r-- | include/linux/ext3_fs.h | 4 | ||||
| -rw-r--r-- | include/linux/fs.h | 10 | ||||
| -rw-r--r-- | include/linux/jbd.h | 64 | ||||
| -rw-r--r-- | include/linux/jbd2.h | 69 | ||||
| -rw-r--r-- | include/linux/jbd_common.h | 68 |
6 files changed, 81 insertions, 138 deletions
diff --git a/include/linux/ext2_fs.h b/include/linux/ext2_fs.h index 53792bf36c71..ce1b719e8bd4 100644 --- a/include/linux/ext2_fs.h +++ b/include/linux/ext2_fs.h | |||
| @@ -197,8 +197,8 @@ struct ext2_group_desc | |||
| 197 | 197 | ||
| 198 | /* Flags that should be inherited by new inodes from their parent. */ | 198 | /* Flags that should be inherited by new inodes from their parent. */ |
| 199 | #define EXT2_FL_INHERITED (EXT2_SECRM_FL | EXT2_UNRM_FL | EXT2_COMPR_FL |\ | 199 | #define EXT2_FL_INHERITED (EXT2_SECRM_FL | EXT2_UNRM_FL | EXT2_COMPR_FL |\ |
| 200 | EXT2_SYNC_FL | EXT2_IMMUTABLE_FL | EXT2_APPEND_FL |\ | 200 | EXT2_SYNC_FL | EXT2_NODUMP_FL |\ |
| 201 | EXT2_NODUMP_FL | EXT2_NOATIME_FL | EXT2_COMPRBLK_FL|\ | 201 | EXT2_NOATIME_FL | EXT2_COMPRBLK_FL |\ |
| 202 | EXT2_NOCOMP_FL | EXT2_JOURNAL_DATA_FL |\ | 202 | EXT2_NOCOMP_FL | EXT2_JOURNAL_DATA_FL |\ |
| 203 | EXT2_NOTAIL_FL | EXT2_DIRSYNC_FL) | 203 | EXT2_NOTAIL_FL | EXT2_DIRSYNC_FL) |
| 204 | 204 | ||
diff --git a/include/linux/ext3_fs.h b/include/linux/ext3_fs.h index f5fceffd4cfe..dec99116a0e4 100644 --- a/include/linux/ext3_fs.h +++ b/include/linux/ext3_fs.h | |||
| @@ -180,8 +180,8 @@ struct ext3_group_desc | |||
| 180 | 180 | ||
| 181 | /* Flags that should be inherited by new inodes from their parent. */ | 181 | /* Flags that should be inherited by new inodes from their parent. */ |
| 182 | #define EXT3_FL_INHERITED (EXT3_SECRM_FL | EXT3_UNRM_FL | EXT3_COMPR_FL |\ | 182 | #define EXT3_FL_INHERITED (EXT3_SECRM_FL | EXT3_UNRM_FL | EXT3_COMPR_FL |\ |
| 183 | EXT3_SYNC_FL | EXT3_IMMUTABLE_FL | EXT3_APPEND_FL |\ | 183 | EXT3_SYNC_FL | EXT3_NODUMP_FL |\ |
| 184 | EXT3_NODUMP_FL | EXT3_NOATIME_FL | EXT3_COMPRBLK_FL|\ | 184 | EXT3_NOATIME_FL | EXT3_COMPRBLK_FL |\ |
| 185 | EXT3_NOCOMPR_FL | EXT3_JOURNAL_DATA_FL |\ | 185 | EXT3_NOCOMPR_FL | EXT3_JOURNAL_DATA_FL |\ |
| 186 | EXT3_NOTAIL_FL | EXT3_DIRSYNC_FL) | 186 | EXT3_NOTAIL_FL | EXT3_DIRSYNC_FL) |
| 187 | 187 | ||
diff --git a/include/linux/fs.h b/include/linux/fs.h index 7a049fd2aa4c..78af9385f415 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
| @@ -770,12 +770,13 @@ struct inode { | |||
| 770 | unsigned long i_ino; | 770 | unsigned long i_ino; |
| 771 | unsigned int i_nlink; | 771 | unsigned int i_nlink; |
| 772 | dev_t i_rdev; | 772 | dev_t i_rdev; |
| 773 | loff_t i_size; | ||
| 774 | struct timespec i_atime; | 773 | struct timespec i_atime; |
| 775 | struct timespec i_mtime; | 774 | struct timespec i_mtime; |
| 776 | struct timespec i_ctime; | 775 | struct timespec i_ctime; |
| 777 | unsigned int i_blkbits; | 776 | spinlock_t i_lock; /* i_blocks, i_bytes, maybe i_size */ |
| 777 | unsigned short i_bytes; | ||
| 778 | blkcnt_t i_blocks; | 778 | blkcnt_t i_blocks; |
| 779 | loff_t i_size; | ||
| 779 | 780 | ||
| 780 | #ifdef __NEED_I_SIZE_ORDERED | 781 | #ifdef __NEED_I_SIZE_ORDERED |
| 781 | seqcount_t i_size_seqcount; | 782 | seqcount_t i_size_seqcount; |
| @@ -783,7 +784,6 @@ struct inode { | |||
| 783 | 784 | ||
| 784 | /* Misc */ | 785 | /* Misc */ |
| 785 | unsigned long i_state; | 786 | unsigned long i_state; |
| 786 | spinlock_t i_lock; /* i_blocks, i_bytes, maybe i_size */ | ||
| 787 | struct mutex i_mutex; | 787 | struct mutex i_mutex; |
| 788 | 788 | ||
| 789 | unsigned long dirtied_when; /* jiffies of first dirtying */ | 789 | unsigned long dirtied_when; /* jiffies of first dirtying */ |
| @@ -797,9 +797,10 @@ struct inode { | |||
| 797 | struct rcu_head i_rcu; | 797 | struct rcu_head i_rcu; |
| 798 | }; | 798 | }; |
| 799 | atomic_t i_count; | 799 | atomic_t i_count; |
| 800 | unsigned int i_blkbits; | ||
| 800 | u64 i_version; | 801 | u64 i_version; |
| 801 | unsigned short i_bytes; | ||
| 802 | atomic_t i_dio_count; | 802 | atomic_t i_dio_count; |
| 803 | atomic_t i_writecount; | ||
| 803 | const struct file_operations *i_fop; /* former ->i_op->default_file_ops */ | 804 | const struct file_operations *i_fop; /* former ->i_op->default_file_ops */ |
| 804 | struct file_lock *i_flock; | 805 | struct file_lock *i_flock; |
| 805 | struct address_space i_data; | 806 | struct address_space i_data; |
| @@ -823,7 +824,6 @@ struct inode { | |||
| 823 | #ifdef CONFIG_IMA | 824 | #ifdef CONFIG_IMA |
| 824 | atomic_t i_readcount; /* struct files open RO */ | 825 | atomic_t i_readcount; /* struct files open RO */ |
| 825 | #endif | 826 | #endif |
| 826 | atomic_t i_writecount; | ||
| 827 | void *i_private; /* fs or device private pointer */ | 827 | void *i_private; /* fs or device private pointer */ |
| 828 | }; | 828 | }; |
| 829 | 829 | ||
diff --git a/include/linux/jbd.h b/include/linux/jbd.h index e6a5e34bed4f..c7acdde3243d 100644 --- a/include/linux/jbd.h +++ b/include/linux/jbd.h | |||
| @@ -244,6 +244,7 @@ typedef struct journal_superblock_s | |||
| 244 | 244 | ||
| 245 | #include <linux/fs.h> | 245 | #include <linux/fs.h> |
| 246 | #include <linux/sched.h> | 246 | #include <linux/sched.h> |
| 247 | #include <linux/jbd_common.h> | ||
| 247 | 248 | ||
| 248 | #define J_ASSERT(assert) BUG_ON(!(assert)) | 249 | #define J_ASSERT(assert) BUG_ON(!(assert)) |
| 249 | 250 | ||
| @@ -270,69 +271,6 @@ typedef struct journal_superblock_s | |||
| 270 | #define J_EXPECT_JH(jh, expr, why...) __journal_expect(expr, ## why) | 271 | #define J_EXPECT_JH(jh, expr, why...) __journal_expect(expr, ## why) |
| 271 | #endif | 272 | #endif |
| 272 | 273 | ||
| 273 | enum jbd_state_bits { | ||
| 274 | BH_JBD /* Has an attached ext3 journal_head */ | ||
| 275 | = BH_PrivateStart, | ||
| 276 | BH_JWrite, /* Being written to log (@@@ DEBUGGING) */ | ||
| 277 | BH_Freed, /* Has been freed (truncated) */ | ||
| 278 | BH_Revoked, /* Has been revoked from the log */ | ||
| 279 | BH_RevokeValid, /* Revoked flag is valid */ | ||
| 280 | BH_JBDDirty, /* Is dirty but journaled */ | ||
| 281 | BH_State, /* Pins most journal_head state */ | ||
| 282 | BH_JournalHead, /* Pins bh->b_private and jh->b_bh */ | ||
| 283 | BH_Unshadow, /* Dummy bit, for BJ_Shadow wakeup filtering */ | ||
| 284 | }; | ||
| 285 | |||
| 286 | BUFFER_FNS(JBD, jbd) | ||
| 287 | BUFFER_FNS(JWrite, jwrite) | ||
| 288 | BUFFER_FNS(JBDDirty, jbddirty) | ||
| 289 | TAS_BUFFER_FNS(JBDDirty, jbddirty) | ||
| 290 | BUFFER_FNS(Revoked, revoked) | ||
| 291 | TAS_BUFFER_FNS(Revoked, revoked) | ||
| 292 | BUFFER_FNS(RevokeValid, revokevalid) | ||
| 293 | TAS_BUFFER_FNS(RevokeValid, revokevalid) | ||
| 294 | BUFFER_FNS(Freed, freed) | ||
| 295 | |||
| 296 | static inline struct buffer_head *jh2bh(struct journal_head *jh) | ||
| 297 | { | ||
| 298 | return jh->b_bh; | ||
| 299 | } | ||
| 300 | |||
| 301 | static inline struct journal_head *bh2jh(struct buffer_head *bh) | ||
| 302 | { | ||
| 303 | return bh->b_private; | ||
| 304 | } | ||
| 305 | |||
| 306 | static inline void jbd_lock_bh_state(struct buffer_head *bh) | ||
| 307 | { | ||
| 308 | bit_spin_lock(BH_State, &bh->b_state); | ||
| 309 | } | ||
| 310 | |||
| 311 | static inline int jbd_trylock_bh_state(struct buffer_head *bh) | ||
| 312 | { | ||
| 313 | return bit_spin_trylock(BH_State, &bh->b_state); | ||
| 314 | } | ||
| 315 | |||
| 316 | static inline int jbd_is_locked_bh_state(struct buffer_head *bh) | ||
| 317 | { | ||
| 318 | return bit_spin_is_locked(BH_State, &bh->b_state); | ||
| 319 | } | ||
| 320 | |||
| 321 | static inline void jbd_unlock_bh_state(struct buffer_head *bh) | ||
| 322 | { | ||
| 323 | bit_spin_unlock(BH_State, &bh->b_state); | ||
| 324 | } | ||
| 325 | |||
| 326 | static inline void jbd_lock_bh_journal_head(struct buffer_head *bh) | ||
| 327 | { | ||
| 328 | bit_spin_lock(BH_JournalHead, &bh->b_state); | ||
| 329 | } | ||
| 330 | |||
| 331 | static inline void jbd_unlock_bh_journal_head(struct buffer_head *bh) | ||
| 332 | { | ||
| 333 | bit_spin_unlock(BH_JournalHead, &bh->b_state); | ||
| 334 | } | ||
| 335 | |||
| 336 | struct jbd_revoke_table_s; | 274 | struct jbd_revoke_table_s; |
| 337 | 275 | ||
| 338 | /** | 276 | /** |
diff --git a/include/linux/jbd2.h b/include/linux/jbd2.h index 38f307b8c334..2092ea21e469 100644 --- a/include/linux/jbd2.h +++ b/include/linux/jbd2.h | |||
| @@ -275,6 +275,7 @@ typedef struct journal_superblock_s | |||
| 275 | 275 | ||
| 276 | #include <linux/fs.h> | 276 | #include <linux/fs.h> |
| 277 | #include <linux/sched.h> | 277 | #include <linux/sched.h> |
| 278 | #include <linux/jbd_common.h> | ||
| 278 | 279 | ||
| 279 | #define J_ASSERT(assert) BUG_ON(!(assert)) | 280 | #define J_ASSERT(assert) BUG_ON(!(assert)) |
| 280 | 281 | ||
| @@ -302,70 +303,6 @@ typedef struct journal_superblock_s | |||
| 302 | #define J_EXPECT_JH(jh, expr, why...) __journal_expect(expr, ## why) | 303 | #define J_EXPECT_JH(jh, expr, why...) __journal_expect(expr, ## why) |
| 303 | #endif | 304 | #endif |
| 304 | 305 | ||
| 305 | enum jbd_state_bits { | ||
| 306 | BH_JBD /* Has an attached ext3 journal_head */ | ||
| 307 | = BH_PrivateStart, | ||
| 308 | BH_JWrite, /* Being written to log (@@@ DEBUGGING) */ | ||
| 309 | BH_Freed, /* Has been freed (truncated) */ | ||
| 310 | BH_Revoked, /* Has been revoked from the log */ | ||
| 311 | BH_RevokeValid, /* Revoked flag is valid */ | ||
| 312 | BH_JBDDirty, /* Is dirty but journaled */ | ||
| 313 | BH_State, /* Pins most journal_head state */ | ||
| 314 | BH_JournalHead, /* Pins bh->b_private and jh->b_bh */ | ||
| 315 | BH_Unshadow, /* Dummy bit, for BJ_Shadow wakeup filtering */ | ||
| 316 | BH_JBDPrivateStart, /* First bit available for private use by FS */ | ||
| 317 | }; | ||
| 318 | |||
| 319 | BUFFER_FNS(JBD, jbd) | ||
| 320 | BUFFER_FNS(JWrite, jwrite) | ||
| 321 | BUFFER_FNS(JBDDirty, jbddirty) | ||
| 322 | TAS_BUFFER_FNS(JBDDirty, jbddirty) | ||
| 323 | BUFFER_FNS(Revoked, revoked) | ||
| 324 | TAS_BUFFER_FNS(Revoked, revoked) | ||
| 325 | BUFFER_FNS(RevokeValid, revokevalid) | ||
| 326 | TAS_BUFFER_FNS(RevokeValid, revokevalid) | ||
| 327 | BUFFER_FNS(Freed, freed) | ||
| 328 | |||
| 329 | static inline struct buffer_head *jh2bh(struct journal_head *jh) | ||
| 330 | { | ||
| 331 | return jh->b_bh; | ||
| 332 | } | ||
| 333 | |||
| 334 | static inline struct journal_head *bh2jh(struct buffer_head *bh) | ||
| 335 | { | ||
| 336 | return bh->b_private; | ||
| 337 | } | ||
| 338 | |||
| 339 | static inline void jbd_lock_bh_state(struct buffer_head *bh) | ||
| 340 | { | ||
| 341 | bit_spin_lock(BH_State, &bh->b_state); | ||
| 342 | } | ||
| 343 | |||
| 344 | static inline int jbd_trylock_bh_state(struct buffer_head *bh) | ||
| 345 | { | ||
| 346 | return bit_spin_trylock(BH_State, &bh->b_state); | ||
| 347 | } | ||
| 348 | |||
| 349 | static inline int jbd_is_locked_bh_state(struct buffer_head *bh) | ||
| 350 | { | ||
| 351 | return bit_spin_is_locked(BH_State, &bh->b_state); | ||
| 352 | } | ||
| 353 | |||
| 354 | static inline void jbd_unlock_bh_state(struct buffer_head *bh) | ||
| 355 | { | ||
| 356 | bit_spin_unlock(BH_State, &bh->b_state); | ||
| 357 | } | ||
| 358 | |||
| 359 | static inline void jbd_lock_bh_journal_head(struct buffer_head *bh) | ||
| 360 | { | ||
| 361 | bit_spin_lock(BH_JournalHead, &bh->b_state); | ||
| 362 | } | ||
| 363 | |||
| 364 | static inline void jbd_unlock_bh_journal_head(struct buffer_head *bh) | ||
| 365 | { | ||
| 366 | bit_spin_unlock(BH_JournalHead, &bh->b_state); | ||
| 367 | } | ||
| 368 | |||
| 369 | /* Flags in jbd_inode->i_flags */ | 306 | /* Flags in jbd_inode->i_flags */ |
| 370 | #define __JI_COMMIT_RUNNING 0 | 307 | #define __JI_COMMIT_RUNNING 0 |
| 371 | /* Commit of the inode data in progress. We use this flag to protect us from | 308 | /* Commit of the inode data in progress. We use this flag to protect us from |
| @@ -1106,9 +1043,9 @@ static inline handle_t *journal_current_handle(void) | |||
| 1106 | */ | 1043 | */ |
| 1107 | 1044 | ||
| 1108 | extern handle_t *jbd2_journal_start(journal_t *, int nblocks); | 1045 | extern handle_t *jbd2_journal_start(journal_t *, int nblocks); |
| 1109 | extern handle_t *jbd2__journal_start(journal_t *, int nblocks, int gfp_mask); | 1046 | extern handle_t *jbd2__journal_start(journal_t *, int nblocks, gfp_t gfp_mask); |
| 1110 | extern int jbd2_journal_restart(handle_t *, int nblocks); | 1047 | extern int jbd2_journal_restart(handle_t *, int nblocks); |
| 1111 | extern int jbd2__journal_restart(handle_t *, int nblocks, int gfp_mask); | 1048 | extern int jbd2__journal_restart(handle_t *, int nblocks, gfp_t gfp_mask); |
| 1112 | extern int jbd2_journal_extend (handle_t *, int nblocks); | 1049 | extern int jbd2_journal_extend (handle_t *, int nblocks); |
| 1113 | extern int jbd2_journal_get_write_access(handle_t *, struct buffer_head *); | 1050 | extern int jbd2_journal_get_write_access(handle_t *, struct buffer_head *); |
| 1114 | extern int jbd2_journal_get_create_access (handle_t *, struct buffer_head *); | 1051 | extern int jbd2_journal_get_create_access (handle_t *, struct buffer_head *); |
diff --git a/include/linux/jbd_common.h b/include/linux/jbd_common.h new file mode 100644 index 000000000000..6230f8556a4e --- /dev/null +++ b/include/linux/jbd_common.h | |||
| @@ -0,0 +1,68 @@ | |||
| 1 | #ifndef _LINUX_JBD_STATE_H | ||
| 2 | #define _LINUX_JBD_STATE_H | ||
| 3 | |||
| 4 | enum jbd_state_bits { | ||
| 5 | BH_JBD /* Has an attached ext3 journal_head */ | ||
| 6 | = BH_PrivateStart, | ||
| 7 | BH_JWrite, /* Being written to log (@@@ DEBUGGING) */ | ||
| 8 | BH_Freed, /* Has been freed (truncated) */ | ||
| 9 | BH_Revoked, /* Has been revoked from the log */ | ||
| 10 | BH_RevokeValid, /* Revoked flag is valid */ | ||
| 11 | BH_JBDDirty, /* Is dirty but journaled */ | ||
| 12 | BH_State, /* Pins most journal_head state */ | ||
| 13 | BH_JournalHead, /* Pins bh->b_private and jh->b_bh */ | ||
| 14 | BH_Unshadow, /* Dummy bit, for BJ_Shadow wakeup filtering */ | ||
| 15 | BH_JBDPrivateStart, /* First bit available for private use by FS */ | ||
| 16 | }; | ||
| 17 | |||
| 18 | BUFFER_FNS(JBD, jbd) | ||
| 19 | BUFFER_FNS(JWrite, jwrite) | ||
| 20 | BUFFER_FNS(JBDDirty, jbddirty) | ||
| 21 | TAS_BUFFER_FNS(JBDDirty, jbddirty) | ||
| 22 | BUFFER_FNS(Revoked, revoked) | ||
| 23 | TAS_BUFFER_FNS(Revoked, revoked) | ||
| 24 | BUFFER_FNS(RevokeValid, revokevalid) | ||
| 25 | TAS_BUFFER_FNS(RevokeValid, revokevalid) | ||
| 26 | BUFFER_FNS(Freed, freed) | ||
| 27 | |||
| 28 | static inline struct buffer_head *jh2bh(struct journal_head *jh) | ||
| 29 | { | ||
| 30 | return jh->b_bh; | ||
| 31 | } | ||
| 32 | |||
| 33 | static inline struct journal_head *bh2jh(struct buffer_head *bh) | ||
| 34 | { | ||
| 35 | return bh->b_private; | ||
| 36 | } | ||
| 37 | |||
| 38 | static inline void jbd_lock_bh_state(struct buffer_head *bh) | ||
| 39 | { | ||
| 40 | bit_spin_lock(BH_State, &bh->b_state); | ||
| 41 | } | ||
| 42 | |||
| 43 | static inline int jbd_trylock_bh_state(struct buffer_head *bh) | ||
| 44 | { | ||
| 45 | return bit_spin_trylock(BH_State, &bh->b_state); | ||
| 46 | } | ||
| 47 | |||
| 48 | static inline int jbd_is_locked_bh_state(struct buffer_head *bh) | ||
| 49 | { | ||
| 50 | return bit_spin_is_locked(BH_State, &bh->b_state); | ||
| 51 | } | ||
| 52 | |||
| 53 | static inline void jbd_unlock_bh_state(struct buffer_head *bh) | ||
| 54 | { | ||
| 55 | bit_spin_unlock(BH_State, &bh->b_state); | ||
| 56 | } | ||
| 57 | |||
| 58 | static inline void jbd_lock_bh_journal_head(struct buffer_head *bh) | ||
| 59 | { | ||
| 60 | bit_spin_lock(BH_JournalHead, &bh->b_state); | ||
| 61 | } | ||
| 62 | |||
| 63 | static inline void jbd_unlock_bh_journal_head(struct buffer_head *bh) | ||
| 64 | { | ||
| 65 | bit_spin_unlock(BH_JournalHead, &bh->b_state); | ||
| 66 | } | ||
| 67 | |||
| 68 | #endif | ||
