diff options
Diffstat (limited to 'fs/inode.c')
| -rw-r--r-- | fs/inode.c | 81 |
1 files changed, 35 insertions, 46 deletions
diff --git a/fs/inode.c b/fs/inode.c index 6ad14a1cd8c9..0571983755dc 100644 --- a/fs/inode.c +++ b/fs/inode.c | |||
| @@ -99,7 +99,7 @@ static DEFINE_MUTEX(iprune_mutex); | |||
| 99 | */ | 99 | */ |
| 100 | struct inodes_stat_t inodes_stat; | 100 | struct inodes_stat_t inodes_stat; |
| 101 | 101 | ||
| 102 | static struct kmem_cache * inode_cachep __read_mostly; | 102 | static struct kmem_cache *inode_cachep __read_mostly; |
| 103 | 103 | ||
| 104 | static void wake_up_inode(struct inode *inode) | 104 | static void wake_up_inode(struct inode *inode) |
| 105 | { | 105 | { |
| @@ -124,7 +124,7 @@ struct inode *inode_init_always(struct super_block *sb, struct inode *inode) | |||
| 124 | static struct inode_operations empty_iops; | 124 | static struct inode_operations empty_iops; |
| 125 | static const struct file_operations empty_fops; | 125 | static const struct file_operations empty_fops; |
| 126 | 126 | ||
| 127 | struct address_space * const mapping = &inode->i_data; | 127 | struct address_space *const mapping = &inode->i_data; |
| 128 | 128 | ||
| 129 | inode->i_sb = sb; | 129 | inode->i_sb = sb; |
| 130 | inode->i_blkbits = sb->s_blocksize_bits; | 130 | inode->i_blkbits = sb->s_blocksize_bits; |
| @@ -216,7 +216,7 @@ static struct inode *alloc_inode(struct super_block *sb) | |||
| 216 | return NULL; | 216 | return NULL; |
| 217 | } | 217 | } |
| 218 | 218 | ||
| 219 | void destroy_inode(struct inode *inode) | 219 | void destroy_inode(struct inode *inode) |
| 220 | { | 220 | { |
| 221 | BUG_ON(inode_has_buffers(inode)); | 221 | BUG_ON(inode_has_buffers(inode)); |
| 222 | security_inode_free(inode); | 222 | security_inode_free(inode); |
| @@ -252,12 +252,11 @@ void inode_init_once(struct inode *inode) | |||
| 252 | mutex_init(&inode->inotify_mutex); | 252 | mutex_init(&inode->inotify_mutex); |
| 253 | #endif | 253 | #endif |
| 254 | } | 254 | } |
| 255 | |||
| 256 | EXPORT_SYMBOL(inode_init_once); | 255 | EXPORT_SYMBOL(inode_init_once); |
| 257 | 256 | ||
| 258 | static void init_once(void *foo) | 257 | static void init_once(void *foo) |
| 259 | { | 258 | { |
| 260 | struct inode * inode = (struct inode *) foo; | 259 | struct inode *inode = (struct inode *) foo; |
| 261 | 260 | ||
| 262 | inode_init_once(inode); | 261 | inode_init_once(inode); |
| 263 | } | 262 | } |
| @@ -265,7 +264,7 @@ static void init_once(void *foo) | |||
| 265 | /* | 264 | /* |
| 266 | * inode_lock must be held | 265 | * inode_lock must be held |
| 267 | */ | 266 | */ |
| 268 | void __iget(struct inode * inode) | 267 | void __iget(struct inode *inode) |
| 269 | { | 268 | { |
| 270 | if (atomic_read(&inode->i_count)) { | 269 | if (atomic_read(&inode->i_count)) { |
| 271 | atomic_inc(&inode->i_count); | 270 | atomic_inc(&inode->i_count); |
| @@ -289,7 +288,7 @@ void clear_inode(struct inode *inode) | |||
| 289 | { | 288 | { |
| 290 | might_sleep(); | 289 | might_sleep(); |
| 291 | invalidate_inode_buffers(inode); | 290 | invalidate_inode_buffers(inode); |
| 292 | 291 | ||
| 293 | BUG_ON(inode->i_data.nrpages); | 292 | BUG_ON(inode->i_data.nrpages); |
| 294 | BUG_ON(!(inode->i_state & I_FREEING)); | 293 | BUG_ON(!(inode->i_state & I_FREEING)); |
| 295 | BUG_ON(inode->i_state & I_CLEAR); | 294 | BUG_ON(inode->i_state & I_CLEAR); |
| @@ -303,7 +302,6 @@ void clear_inode(struct inode *inode) | |||
| 303 | cd_forget(inode); | 302 | cd_forget(inode); |
| 304 | inode->i_state = I_CLEAR; | 303 | inode->i_state = I_CLEAR; |
| 305 | } | 304 | } |
| 306 | |||
| 307 | EXPORT_SYMBOL(clear_inode); | 305 | EXPORT_SYMBOL(clear_inode); |
| 308 | 306 | ||
| 309 | /* | 307 | /* |
| @@ -351,8 +349,8 @@ static int invalidate_list(struct list_head *head, struct list_head *dispose) | |||
| 351 | 349 | ||
| 352 | next = head->next; | 350 | next = head->next; |
| 353 | for (;;) { | 351 | for (;;) { |
| 354 | struct list_head * tmp = next; | 352 | struct list_head *tmp = next; |
| 355 | struct inode * inode; | 353 | struct inode *inode; |
| 356 | 354 | ||
| 357 | /* | 355 | /* |
| 358 | * We can reschedule here without worrying about the list's | 356 | * We can reschedule here without worrying about the list's |
| @@ -391,7 +389,7 @@ static int invalidate_list(struct list_head *head, struct list_head *dispose) | |||
| 391 | * fails because there are busy inodes then a non zero value is returned. | 389 | * fails because there are busy inodes then a non zero value is returned. |
| 392 | * If the discard is successful all the inodes have been discarded. | 390 | * If the discard is successful all the inodes have been discarded. |
| 393 | */ | 391 | */ |
| 394 | int invalidate_inodes(struct super_block * sb) | 392 | int invalidate_inodes(struct super_block *sb) |
| 395 | { | 393 | { |
| 396 | int busy; | 394 | int busy; |
| 397 | LIST_HEAD(throw_away); | 395 | LIST_HEAD(throw_away); |
| @@ -407,7 +405,6 @@ int invalidate_inodes(struct super_block * sb) | |||
| 407 | 405 | ||
| 408 | return busy; | 406 | return busy; |
| 409 | } | 407 | } |
| 410 | |||
| 411 | EXPORT_SYMBOL(invalidate_inodes); | 408 | EXPORT_SYMBOL(invalidate_inodes); |
| 412 | 409 | ||
| 413 | static int can_unuse(struct inode *inode) | 410 | static int can_unuse(struct inode *inode) |
| @@ -504,7 +501,7 @@ static int shrink_icache_memory(int nr, gfp_t gfp_mask) | |||
| 504 | * Nasty deadlock avoidance. We may hold various FS locks, | 501 | * Nasty deadlock avoidance. We may hold various FS locks, |
| 505 | * and we don't want to recurse into the FS that called us | 502 | * and we don't want to recurse into the FS that called us |
| 506 | * in clear_inode() and friends.. | 503 | * in clear_inode() and friends.. |
| 507 | */ | 504 | */ |
| 508 | if (!(gfp_mask & __GFP_FS)) | 505 | if (!(gfp_mask & __GFP_FS)) |
| 509 | return -1; | 506 | return -1; |
| 510 | prune_icache(nr); | 507 | prune_icache(nr); |
| @@ -524,10 +521,13 @@ static void __wait_on_freeing_inode(struct inode *inode); | |||
| 524 | * by hand after calling find_inode now! This simplifies iunique and won't | 521 | * by hand after calling find_inode now! This simplifies iunique and won't |
| 525 | * add any additional branch in the common code. | 522 | * add any additional branch in the common code. |
| 526 | */ | 523 | */ |
| 527 | static struct inode * find_inode(struct super_block * sb, struct hlist_head *head, int (*test)(struct inode *, void *), void *data) | 524 | static struct inode *find_inode(struct super_block *sb, |
| 525 | struct hlist_head *head, | ||
| 526 | int (*test)(struct inode *, void *), | ||
| 527 | void *data) | ||
| 528 | { | 528 | { |
| 529 | struct hlist_node *node; | 529 | struct hlist_node *node; |
| 530 | struct inode * inode = NULL; | 530 | struct inode *inode = NULL; |
| 531 | 531 | ||
| 532 | repeat: | 532 | repeat: |
| 533 | hlist_for_each_entry(inode, node, head, i_hash) { | 533 | hlist_for_each_entry(inode, node, head, i_hash) { |
| @@ -548,10 +548,11 @@ repeat: | |||
| 548 | * find_inode_fast is the fast path version of find_inode, see the comment at | 548 | * find_inode_fast is the fast path version of find_inode, see the comment at |
| 549 | * iget_locked for details. | 549 | * iget_locked for details. |
| 550 | */ | 550 | */ |
| 551 | static struct inode * find_inode_fast(struct super_block * sb, struct hlist_head *head, unsigned long ino) | 551 | static struct inode *find_inode_fast(struct super_block *sb, |
| 552 | struct hlist_head *head, unsigned long ino) | ||
| 552 | { | 553 | { |
| 553 | struct hlist_node *node; | 554 | struct hlist_node *node; |
| 554 | struct inode * inode = NULL; | 555 | struct inode *inode = NULL; |
| 555 | 556 | ||
| 556 | repeat: | 557 | repeat: |
| 557 | hlist_for_each_entry(inode, node, head, i_hash) { | 558 | hlist_for_each_entry(inode, node, head, i_hash) { |
| @@ -631,10 +632,10 @@ struct inode *new_inode(struct super_block *sb) | |||
| 631 | * here to attempt to avoid that. | 632 | * here to attempt to avoid that. |
| 632 | */ | 633 | */ |
| 633 | static unsigned int last_ino; | 634 | static unsigned int last_ino; |
| 634 | struct inode * inode; | 635 | struct inode *inode; |
| 635 | 636 | ||
| 636 | spin_lock_prefetch(&inode_lock); | 637 | spin_lock_prefetch(&inode_lock); |
| 637 | 638 | ||
| 638 | inode = alloc_inode(sb); | 639 | inode = alloc_inode(sb); |
| 639 | if (inode) { | 640 | if (inode) { |
| 640 | spin_lock(&inode_lock); | 641 | spin_lock(&inode_lock); |
| @@ -645,7 +646,6 @@ struct inode *new_inode(struct super_block *sb) | |||
| 645 | } | 646 | } |
| 646 | return inode; | 647 | return inode; |
| 647 | } | 648 | } |
| 648 | |||
| 649 | EXPORT_SYMBOL(new_inode); | 649 | EXPORT_SYMBOL(new_inode); |
| 650 | 650 | ||
| 651 | void unlock_new_inode(struct inode *inode) | 651 | void unlock_new_inode(struct inode *inode) |
| @@ -674,7 +674,6 @@ void unlock_new_inode(struct inode *inode) | |||
| 674 | inode->i_state &= ~(I_LOCK|I_NEW); | 674 | inode->i_state &= ~(I_LOCK|I_NEW); |
| 675 | wake_up_inode(inode); | 675 | wake_up_inode(inode); |
| 676 | } | 676 | } |
| 677 | |||
| 678 | EXPORT_SYMBOL(unlock_new_inode); | 677 | EXPORT_SYMBOL(unlock_new_inode); |
| 679 | 678 | ||
| 680 | /* | 679 | /* |
| @@ -683,13 +682,17 @@ EXPORT_SYMBOL(unlock_new_inode); | |||
| 683 | * We no longer cache the sb_flags in i_flags - see fs.h | 682 | * We no longer cache the sb_flags in i_flags - see fs.h |
| 684 | * -- rmk@arm.uk.linux.org | 683 | * -- rmk@arm.uk.linux.org |
| 685 | */ | 684 | */ |
| 686 | static struct inode * get_new_inode(struct super_block *sb, struct hlist_head *head, int (*test)(struct inode *, void *), int (*set)(struct inode *, void *), void *data) | 685 | static struct inode *get_new_inode(struct super_block *sb, |
| 686 | struct hlist_head *head, | ||
| 687 | int (*test)(struct inode *, void *), | ||
| 688 | int (*set)(struct inode *, void *), | ||
| 689 | void *data) | ||
| 687 | { | 690 | { |
| 688 | struct inode * inode; | 691 | struct inode *inode; |
| 689 | 692 | ||
| 690 | inode = alloc_inode(sb); | 693 | inode = alloc_inode(sb); |
| 691 | if (inode) { | 694 | if (inode) { |
| 692 | struct inode * old; | 695 | struct inode *old; |
| 693 | 696 | ||
| 694 | spin_lock(&inode_lock); | 697 | spin_lock(&inode_lock); |
| 695 | /* We released the lock, so.. */ | 698 | /* We released the lock, so.. */ |
| @@ -731,13 +734,14 @@ set_failed: | |||
| 731 | * get_new_inode_fast is the fast path version of get_new_inode, see the | 734 | * get_new_inode_fast is the fast path version of get_new_inode, see the |
| 732 | * comment at iget_locked for details. | 735 | * comment at iget_locked for details. |
| 733 | */ | 736 | */ |
| 734 | static struct inode * get_new_inode_fast(struct super_block *sb, struct hlist_head *head, unsigned long ino) | 737 | static struct inode *get_new_inode_fast(struct super_block *sb, |
| 738 | struct hlist_head *head, unsigned long ino) | ||
| 735 | { | 739 | { |
| 736 | struct inode * inode; | 740 | struct inode *inode; |
| 737 | 741 | ||
| 738 | inode = alloc_inode(sb); | 742 | inode = alloc_inode(sb); |
| 739 | if (inode) { | 743 | if (inode) { |
| 740 | struct inode * old; | 744 | struct inode *old; |
| 741 | 745 | ||
| 742 | spin_lock(&inode_lock); | 746 | spin_lock(&inode_lock); |
| 743 | /* We released the lock, so.. */ | 747 | /* We released the lock, so.. */ |
| @@ -823,7 +827,6 @@ struct inode *igrab(struct inode *inode) | |||
| 823 | spin_unlock(&inode_lock); | 827 | spin_unlock(&inode_lock); |
| 824 | return inode; | 828 | return inode; |
| 825 | } | 829 | } |
| 826 | |||
| 827 | EXPORT_SYMBOL(igrab); | 830 | EXPORT_SYMBOL(igrab); |
| 828 | 831 | ||
| 829 | /** | 832 | /** |
| @@ -924,7 +927,6 @@ struct inode *ilookup5_nowait(struct super_block *sb, unsigned long hashval, | |||
| 924 | 927 | ||
| 925 | return ifind(sb, head, test, data, 0); | 928 | return ifind(sb, head, test, data, 0); |
| 926 | } | 929 | } |
| 927 | |||
| 928 | EXPORT_SYMBOL(ilookup5_nowait); | 930 | EXPORT_SYMBOL(ilookup5_nowait); |
| 929 | 931 | ||
| 930 | /** | 932 | /** |
| @@ -953,7 +955,6 @@ struct inode *ilookup5(struct super_block *sb, unsigned long hashval, | |||
| 953 | 955 | ||
| 954 | return ifind(sb, head, test, data, 1); | 956 | return ifind(sb, head, test, data, 1); |
| 955 | } | 957 | } |
| 956 | |||
| 957 | EXPORT_SYMBOL(ilookup5); | 958 | EXPORT_SYMBOL(ilookup5); |
| 958 | 959 | ||
| 959 | /** | 960 | /** |
| @@ -976,7 +977,6 @@ struct inode *ilookup(struct super_block *sb, unsigned long ino) | |||
| 976 | 977 | ||
| 977 | return ifind_fast(sb, head, ino); | 978 | return ifind_fast(sb, head, ino); |
| 978 | } | 979 | } |
| 979 | |||
| 980 | EXPORT_SYMBOL(ilookup); | 980 | EXPORT_SYMBOL(ilookup); |
| 981 | 981 | ||
| 982 | /** | 982 | /** |
| @@ -1015,7 +1015,6 @@ struct inode *iget5_locked(struct super_block *sb, unsigned long hashval, | |||
| 1015 | */ | 1015 | */ |
| 1016 | return get_new_inode(sb, head, test, set, data); | 1016 | return get_new_inode(sb, head, test, set, data); |
| 1017 | } | 1017 | } |
| 1018 | |||
| 1019 | EXPORT_SYMBOL(iget5_locked); | 1018 | EXPORT_SYMBOL(iget5_locked); |
| 1020 | 1019 | ||
| 1021 | /** | 1020 | /** |
| @@ -1047,7 +1046,6 @@ struct inode *iget_locked(struct super_block *sb, unsigned long ino) | |||
| 1047 | */ | 1046 | */ |
| 1048 | return get_new_inode_fast(sb, head, ino); | 1047 | return get_new_inode_fast(sb, head, ino); |
| 1049 | } | 1048 | } |
| 1050 | |||
| 1051 | EXPORT_SYMBOL(iget_locked); | 1049 | EXPORT_SYMBOL(iget_locked); |
| 1052 | 1050 | ||
| 1053 | int insert_inode_locked(struct inode *inode) | 1051 | int insert_inode_locked(struct inode *inode) |
| @@ -1076,7 +1074,6 @@ int insert_inode_locked(struct inode *inode) | |||
| 1076 | iput(old); | 1074 | iput(old); |
| 1077 | } | 1075 | } |
| 1078 | } | 1076 | } |
| 1079 | |||
| 1080 | EXPORT_SYMBOL(insert_inode_locked); | 1077 | EXPORT_SYMBOL(insert_inode_locked); |
| 1081 | 1078 | ||
| 1082 | int insert_inode_locked4(struct inode *inode, unsigned long hashval, | 1079 | int insert_inode_locked4(struct inode *inode, unsigned long hashval, |
| @@ -1106,7 +1103,6 @@ int insert_inode_locked4(struct inode *inode, unsigned long hashval, | |||
| 1106 | iput(old); | 1103 | iput(old); |
| 1107 | } | 1104 | } |
| 1108 | } | 1105 | } |
| 1109 | |||
| 1110 | EXPORT_SYMBOL(insert_inode_locked4); | 1106 | EXPORT_SYMBOL(insert_inode_locked4); |
| 1111 | 1107 | ||
| 1112 | /** | 1108 | /** |
| @@ -1124,7 +1120,6 @@ void __insert_inode_hash(struct inode *inode, unsigned long hashval) | |||
| 1124 | hlist_add_head(&inode->i_hash, head); | 1120 | hlist_add_head(&inode->i_hash, head); |
| 1125 | spin_unlock(&inode_lock); | 1121 | spin_unlock(&inode_lock); |
| 1126 | } | 1122 | } |
| 1127 | |||
| 1128 | EXPORT_SYMBOL(__insert_inode_hash); | 1123 | EXPORT_SYMBOL(__insert_inode_hash); |
| 1129 | 1124 | ||
| 1130 | /** | 1125 | /** |
| @@ -1139,7 +1134,6 @@ void remove_inode_hash(struct inode *inode) | |||
| 1139 | hlist_del_init(&inode->i_hash); | 1134 | hlist_del_init(&inode->i_hash); |
| 1140 | spin_unlock(&inode_lock); | 1135 | spin_unlock(&inode_lock); |
| 1141 | } | 1136 | } |
| 1142 | |||
| 1143 | EXPORT_SYMBOL(remove_inode_hash); | 1137 | EXPORT_SYMBOL(remove_inode_hash); |
| 1144 | 1138 | ||
| 1145 | /* | 1139 | /* |
| @@ -1187,7 +1181,6 @@ void generic_delete_inode(struct inode *inode) | |||
| 1187 | BUG_ON(inode->i_state != I_CLEAR); | 1181 | BUG_ON(inode->i_state != I_CLEAR); |
| 1188 | destroy_inode(inode); | 1182 | destroy_inode(inode); |
| 1189 | } | 1183 | } |
| 1190 | |||
| 1191 | EXPORT_SYMBOL(generic_delete_inode); | 1184 | EXPORT_SYMBOL(generic_delete_inode); |
| 1192 | 1185 | ||
| 1193 | static void generic_forget_inode(struct inode *inode) | 1186 | static void generic_forget_inode(struct inode *inode) |
| @@ -1237,12 +1230,11 @@ void generic_drop_inode(struct inode *inode) | |||
| 1237 | else | 1230 | else |
| 1238 | generic_forget_inode(inode); | 1231 | generic_forget_inode(inode); |
| 1239 | } | 1232 | } |
| 1240 | |||
| 1241 | EXPORT_SYMBOL_GPL(generic_drop_inode); | 1233 | EXPORT_SYMBOL_GPL(generic_drop_inode); |
| 1242 | 1234 | ||
| 1243 | /* | 1235 | /* |
| 1244 | * Called when we're dropping the last reference | 1236 | * Called when we're dropping the last reference |
| 1245 | * to an inode. | 1237 | * to an inode. |
| 1246 | * | 1238 | * |
| 1247 | * Call the FS "drop()" function, defaulting to | 1239 | * Call the FS "drop()" function, defaulting to |
| 1248 | * the legacy UNIX filesystem behaviour.. | 1240 | * the legacy UNIX filesystem behaviour.. |
| @@ -1262,7 +1254,7 @@ static inline void iput_final(struct inode *inode) | |||
| 1262 | } | 1254 | } |
| 1263 | 1255 | ||
| 1264 | /** | 1256 | /** |
| 1265 | * iput - put an inode | 1257 | * iput - put an inode |
| 1266 | * @inode: inode to put | 1258 | * @inode: inode to put |
| 1267 | * | 1259 | * |
| 1268 | * Puts an inode, dropping its usage count. If the inode use count hits | 1260 | * Puts an inode, dropping its usage count. If the inode use count hits |
| @@ -1279,7 +1271,6 @@ void iput(struct inode *inode) | |||
| 1279 | iput_final(inode); | 1271 | iput_final(inode); |
| 1280 | } | 1272 | } |
| 1281 | } | 1273 | } |
| 1282 | |||
| 1283 | EXPORT_SYMBOL(iput); | 1274 | EXPORT_SYMBOL(iput); |
| 1284 | 1275 | ||
| 1285 | /** | 1276 | /** |
| @@ -1290,10 +1281,10 @@ EXPORT_SYMBOL(iput); | |||
| 1290 | * Returns the block number on the device holding the inode that | 1281 | * Returns the block number on the device holding the inode that |
| 1291 | * is the disk block number for the block of the file requested. | 1282 | * is the disk block number for the block of the file requested. |
| 1292 | * That is, asked for block 4 of inode 1 the function will return the | 1283 | * That is, asked for block 4 of inode 1 the function will return the |
| 1293 | * disk block relative to the disk start that holds that block of the | 1284 | * disk block relative to the disk start that holds that block of the |
| 1294 | * file. | 1285 | * file. |
| 1295 | */ | 1286 | */ |
| 1296 | sector_t bmap(struct inode * inode, sector_t block) | 1287 | sector_t bmap(struct inode *inode, sector_t block) |
| 1297 | { | 1288 | { |
| 1298 | sector_t res = 0; | 1289 | sector_t res = 0; |
| 1299 | if (inode->i_mapping->a_ops->bmap) | 1290 | if (inode->i_mapping->a_ops->bmap) |
| @@ -1425,7 +1416,6 @@ void file_update_time(struct file *file) | |||
| 1425 | mark_inode_dirty_sync(inode); | 1416 | mark_inode_dirty_sync(inode); |
| 1426 | mnt_drop_write(file->f_path.mnt); | 1417 | mnt_drop_write(file->f_path.mnt); |
| 1427 | } | 1418 | } |
| 1428 | |||
| 1429 | EXPORT_SYMBOL(file_update_time); | 1419 | EXPORT_SYMBOL(file_update_time); |
| 1430 | 1420 | ||
| 1431 | int inode_needs_sync(struct inode *inode) | 1421 | int inode_needs_sync(struct inode *inode) |
| @@ -1436,7 +1426,6 @@ int inode_needs_sync(struct inode *inode) | |||
| 1436 | return 1; | 1426 | return 1; |
| 1437 | return 0; | 1427 | return 0; |
| 1438 | } | 1428 | } |
| 1439 | |||
| 1440 | EXPORT_SYMBOL(inode_needs_sync); | 1429 | EXPORT_SYMBOL(inode_needs_sync); |
| 1441 | 1430 | ||
| 1442 | int inode_wait(void *word) | 1431 | int inode_wait(void *word) |
