diff options
| author | Trond Myklebust <Trond.Myklebust@netapp.com> | 2007-05-17 11:36:59 -0400 |
|---|---|---|
| committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2007-05-17 11:36:59 -0400 |
| commit | dd504ea16f34a29da4aa933ae7ab917fcfd25fd7 (patch) | |
| tree | 0502645dc159be29c33c992e9e56dc3156074279 /fs | |
| parent | 5cf4cf65a8ccca44ec9b357ebdb2b517269d7e8a (diff) | |
| parent | 0479ea0eab197b3e5d4c731f526c02e5e3fbfbd0 (diff) | |
Merge branch 'master' of /home/trondmy/repositories/git/linux-2.6/
Diffstat (limited to 'fs')
49 files changed, 167 insertions, 269 deletions
diff --git a/fs/adfs/super.c b/fs/adfs/super.c index 30c296508497..de2ed5ca3351 100644 --- a/fs/adfs/super.c +++ b/fs/adfs/super.c | |||
| @@ -232,8 +232,7 @@ static void init_once(void * foo, struct kmem_cache * cachep, unsigned long flag | |||
| 232 | { | 232 | { |
| 233 | struct adfs_inode_info *ei = (struct adfs_inode_info *) foo; | 233 | struct adfs_inode_info *ei = (struct adfs_inode_info *) foo; |
| 234 | 234 | ||
| 235 | if (flags & SLAB_CTOR_CONSTRUCTOR) | 235 | inode_init_once(&ei->vfs_inode); |
| 236 | inode_init_once(&ei->vfs_inode); | ||
| 237 | } | 236 | } |
| 238 | 237 | ||
| 239 | static int init_inodecache(void) | 238 | static int init_inodecache(void) |
diff --git a/fs/affs/super.c b/fs/affs/super.c index beff7d21e6e2..b800d451cd60 100644 --- a/fs/affs/super.c +++ b/fs/affs/super.c | |||
| @@ -87,11 +87,9 @@ static void init_once(void * foo, struct kmem_cache * cachep, unsigned long flag | |||
| 87 | { | 87 | { |
| 88 | struct affs_inode_info *ei = (struct affs_inode_info *) foo; | 88 | struct affs_inode_info *ei = (struct affs_inode_info *) foo; |
| 89 | 89 | ||
| 90 | if (flags & SLAB_CTOR_CONSTRUCTOR) { | 90 | init_MUTEX(&ei->i_link_lock); |
| 91 | init_MUTEX(&ei->i_link_lock); | 91 | init_MUTEX(&ei->i_ext_lock); |
| 92 | init_MUTEX(&ei->i_ext_lock); | 92 | inode_init_once(&ei->vfs_inode); |
| 93 | inode_init_once(&ei->vfs_inode); | ||
| 94 | } | ||
| 95 | } | 93 | } |
| 96 | 94 | ||
| 97 | static int init_inodecache(void) | 95 | static int init_inodecache(void) |
diff --git a/fs/afs/super.c b/fs/afs/super.c index 370cecc910db..8d47ad88a093 100644 --- a/fs/afs/super.c +++ b/fs/afs/super.c | |||
| @@ -451,17 +451,15 @@ static void afs_i_init_once(void *_vnode, struct kmem_cache *cachep, | |||
| 451 | { | 451 | { |
| 452 | struct afs_vnode *vnode = _vnode; | 452 | struct afs_vnode *vnode = _vnode; |
| 453 | 453 | ||
| 454 | if (flags & SLAB_CTOR_CONSTRUCTOR) { | 454 | memset(vnode, 0, sizeof(*vnode)); |
| 455 | memset(vnode, 0, sizeof(*vnode)); | 455 | inode_init_once(&vnode->vfs_inode); |
| 456 | inode_init_once(&vnode->vfs_inode); | 456 | init_waitqueue_head(&vnode->update_waitq); |
| 457 | init_waitqueue_head(&vnode->update_waitq); | 457 | mutex_init(&vnode->permits_lock); |
| 458 | mutex_init(&vnode->permits_lock); | 458 | mutex_init(&vnode->validate_lock); |
| 459 | mutex_init(&vnode->validate_lock); | 459 | spin_lock_init(&vnode->writeback_lock); |
| 460 | spin_lock_init(&vnode->writeback_lock); | 460 | spin_lock_init(&vnode->lock); |
| 461 | spin_lock_init(&vnode->lock); | 461 | INIT_LIST_HEAD(&vnode->writebacks); |
| 462 | INIT_LIST_HEAD(&vnode->writebacks); | 462 | INIT_WORK(&vnode->cb_broken_work, afs_broken_callback_work); |
| 463 | INIT_WORK(&vnode->cb_broken_work, afs_broken_callback_work); | ||
| 464 | } | ||
| 465 | } | 463 | } |
| 466 | 464 | ||
| 467 | /* | 465 | /* |
diff --git a/fs/befs/linuxvfs.c b/fs/befs/linuxvfs.c index fe96108a788d..a5c5171c2828 100644 --- a/fs/befs/linuxvfs.c +++ b/fs/befs/linuxvfs.c | |||
| @@ -292,10 +292,8 @@ befs_destroy_inode(struct inode *inode) | |||
| 292 | static void init_once(void * foo, struct kmem_cache * cachep, unsigned long flags) | 292 | static void init_once(void * foo, struct kmem_cache * cachep, unsigned long flags) |
| 293 | { | 293 | { |
| 294 | struct befs_inode_info *bi = (struct befs_inode_info *) foo; | 294 | struct befs_inode_info *bi = (struct befs_inode_info *) foo; |
| 295 | 295 | ||
| 296 | if (flags & SLAB_CTOR_CONSTRUCTOR) { | 296 | inode_init_once(&bi->vfs_inode); |
| 297 | inode_init_once(&bi->vfs_inode); | ||
| 298 | } | ||
| 299 | } | 297 | } |
| 300 | 298 | ||
| 301 | static void | 299 | static void |
diff --git a/fs/bfs/inode.c b/fs/bfs/inode.c index edc08d89aabc..58c7bd9f5301 100644 --- a/fs/bfs/inode.c +++ b/fs/bfs/inode.c | |||
| @@ -248,8 +248,7 @@ static void init_once(void * foo, struct kmem_cache * cachep, unsigned long flag | |||
| 248 | { | 248 | { |
| 249 | struct bfs_inode_info *bi = foo; | 249 | struct bfs_inode_info *bi = foo; |
| 250 | 250 | ||
| 251 | if (flags & SLAB_CTOR_CONSTRUCTOR) | 251 | inode_init_once(&bi->vfs_inode); |
| 252 | inode_init_once(&bi->vfs_inode); | ||
| 253 | } | 252 | } |
| 254 | 253 | ||
| 255 | static int init_inodecache(void) | 254 | static int init_inodecache(void) |
diff --git a/fs/block_dev.c b/fs/block_dev.c index 742899240872..ea1480a16f51 100644 --- a/fs/block_dev.c +++ b/fs/block_dev.c | |||
| @@ -458,17 +458,15 @@ static void init_once(void * foo, struct kmem_cache * cachep, unsigned long flag | |||
| 458 | struct bdev_inode *ei = (struct bdev_inode *) foo; | 458 | struct bdev_inode *ei = (struct bdev_inode *) foo; |
| 459 | struct block_device *bdev = &ei->bdev; | 459 | struct block_device *bdev = &ei->bdev; |
| 460 | 460 | ||
| 461 | if (flags & SLAB_CTOR_CONSTRUCTOR) { | 461 | memset(bdev, 0, sizeof(*bdev)); |
| 462 | memset(bdev, 0, sizeof(*bdev)); | 462 | mutex_init(&bdev->bd_mutex); |
| 463 | mutex_init(&bdev->bd_mutex); | 463 | sema_init(&bdev->bd_mount_sem, 1); |
| 464 | sema_init(&bdev->bd_mount_sem, 1); | 464 | INIT_LIST_HEAD(&bdev->bd_inodes); |
| 465 | INIT_LIST_HEAD(&bdev->bd_inodes); | 465 | INIT_LIST_HEAD(&bdev->bd_list); |
| 466 | INIT_LIST_HEAD(&bdev->bd_list); | ||
| 467 | #ifdef CONFIG_SYSFS | 466 | #ifdef CONFIG_SYSFS |
| 468 | INIT_LIST_HEAD(&bdev->bd_holder_list); | 467 | INIT_LIST_HEAD(&bdev->bd_holder_list); |
| 469 | #endif | 468 | #endif |
| 470 | inode_init_once(&ei->vfs_inode); | 469 | inode_init_once(&ei->vfs_inode); |
| 471 | } | ||
| 472 | } | 470 | } |
| 473 | 471 | ||
| 474 | static inline void __bd_forget(struct inode *inode) | 472 | static inline void __bd_forget(struct inode *inode) |
diff --git a/fs/buffer.c b/fs/buffer.c index aecd057cd0e0..49590d590d7d 100644 --- a/fs/buffer.c +++ b/fs/buffer.c | |||
| @@ -981,7 +981,8 @@ grow_dev_page(struct block_device *bdev, sector_t block, | |||
| 981 | struct page *page; | 981 | struct page *page; |
| 982 | struct buffer_head *bh; | 982 | struct buffer_head *bh; |
| 983 | 983 | ||
| 984 | page = find_or_create_page(inode->i_mapping, index, GFP_NOFS); | 984 | page = find_or_create_page(inode->i_mapping, index, |
| 985 | mapping_gfp_mask(inode->i_mapping) & ~__GFP_FS); | ||
| 985 | if (!page) | 986 | if (!page) |
| 986 | return NULL; | 987 | return NULL; |
| 987 | 988 | ||
| @@ -2898,8 +2899,9 @@ static void recalc_bh_state(void) | |||
| 2898 | 2899 | ||
| 2899 | struct buffer_head *alloc_buffer_head(gfp_t gfp_flags) | 2900 | struct buffer_head *alloc_buffer_head(gfp_t gfp_flags) |
| 2900 | { | 2901 | { |
| 2901 | struct buffer_head *ret = kmem_cache_alloc(bh_cachep, gfp_flags); | 2902 | struct buffer_head *ret = kmem_cache_zalloc(bh_cachep, gfp_flags); |
| 2902 | if (ret) { | 2903 | if (ret) { |
| 2904 | INIT_LIST_HEAD(&ret->b_assoc_buffers); | ||
| 2903 | get_cpu_var(bh_accounting).nr++; | 2905 | get_cpu_var(bh_accounting).nr++; |
| 2904 | recalc_bh_state(); | 2906 | recalc_bh_state(); |
| 2905 | put_cpu_var(bh_accounting); | 2907 | put_cpu_var(bh_accounting); |
| @@ -2918,17 +2920,6 @@ void free_buffer_head(struct buffer_head *bh) | |||
| 2918 | } | 2920 | } |
| 2919 | EXPORT_SYMBOL(free_buffer_head); | 2921 | EXPORT_SYMBOL(free_buffer_head); |
| 2920 | 2922 | ||
| 2921 | static void | ||
| 2922 | init_buffer_head(void *data, struct kmem_cache *cachep, unsigned long flags) | ||
| 2923 | { | ||
| 2924 | if (flags & SLAB_CTOR_CONSTRUCTOR) { | ||
| 2925 | struct buffer_head * bh = (struct buffer_head *)data; | ||
| 2926 | |||
| 2927 | memset(bh, 0, sizeof(*bh)); | ||
| 2928 | INIT_LIST_HEAD(&bh->b_assoc_buffers); | ||
| 2929 | } | ||
| 2930 | } | ||
| 2931 | |||
| 2932 | static void buffer_exit_cpu(int cpu) | 2923 | static void buffer_exit_cpu(int cpu) |
| 2933 | { | 2924 | { |
| 2934 | int i; | 2925 | int i; |
| @@ -2955,12 +2946,8 @@ void __init buffer_init(void) | |||
| 2955 | { | 2946 | { |
| 2956 | int nrpages; | 2947 | int nrpages; |
| 2957 | 2948 | ||
| 2958 | bh_cachep = kmem_cache_create("buffer_head", | 2949 | bh_cachep = KMEM_CACHE(buffer_head, |
| 2959 | sizeof(struct buffer_head), 0, | 2950 | SLAB_RECLAIM_ACCOUNT|SLAB_PANIC|SLAB_MEM_SPREAD); |
| 2960 | (SLAB_RECLAIM_ACCOUNT|SLAB_PANIC| | ||
| 2961 | SLAB_MEM_SPREAD), | ||
| 2962 | init_buffer_head, | ||
| 2963 | NULL); | ||
| 2964 | 2951 | ||
| 2965 | /* | 2952 | /* |
| 2966 | * Limit the bh occupancy to 10% of ZONE_NORMAL | 2953 | * Limit the bh occupancy to 10% of ZONE_NORMAL |
diff --git a/fs/cifs/cifsfs.c b/fs/cifs/cifsfs.c index 8568e100953c..d38c69b591cf 100644 --- a/fs/cifs/cifsfs.c +++ b/fs/cifs/cifsfs.c | |||
| @@ -701,10 +701,8 @@ cifs_init_once(void *inode, struct kmem_cache * cachep, unsigned long flags) | |||
| 701 | { | 701 | { |
| 702 | struct cifsInodeInfo *cifsi = inode; | 702 | struct cifsInodeInfo *cifsi = inode; |
| 703 | 703 | ||
| 704 | if (flags & SLAB_CTOR_CONSTRUCTOR) { | 704 | inode_init_once(&cifsi->vfs_inode); |
| 705 | inode_init_once(&cifsi->vfs_inode); | 705 | INIT_LIST_HEAD(&cifsi->lockList); |
| 706 | INIT_LIST_HEAD(&cifsi->lockList); | ||
| 707 | } | ||
| 708 | } | 706 | } |
| 709 | 707 | ||
| 710 | static int | 708 | static int |
diff --git a/fs/coda/inode.c b/fs/coda/inode.c index 0aaff3651d14..dbff1bd4fb96 100644 --- a/fs/coda/inode.c +++ b/fs/coda/inode.c | |||
| @@ -62,8 +62,7 @@ static void init_once(void * foo, struct kmem_cache * cachep, unsigned long flag | |||
| 62 | { | 62 | { |
| 63 | struct coda_inode_info *ei = (struct coda_inode_info *) foo; | 63 | struct coda_inode_info *ei = (struct coda_inode_info *) foo; |
| 64 | 64 | ||
| 65 | if (flags & SLAB_CTOR_CONSTRUCTOR) | 65 | inode_init_once(&ei->vfs_inode); |
| 66 | inode_init_once(&ei->vfs_inode); | ||
| 67 | } | 66 | } |
| 68 | 67 | ||
| 69 | int coda_init_inodecache(void) | 68 | int coda_init_inodecache(void) |
diff --git a/fs/compat.c b/fs/compat.c index 7b21b0a82596..1de2331db844 100644 --- a/fs/compat.c +++ b/fs/compat.c | |||
| @@ -2230,21 +2230,16 @@ asmlinkage long compat_sys_signalfd(int ufd, | |||
| 2230 | asmlinkage long compat_sys_timerfd(int ufd, int clockid, int flags, | 2230 | asmlinkage long compat_sys_timerfd(int ufd, int clockid, int flags, |
| 2231 | const struct compat_itimerspec __user *utmr) | 2231 | const struct compat_itimerspec __user *utmr) |
| 2232 | { | 2232 | { |
| 2233 | long res; | ||
| 2234 | struct itimerspec t; | 2233 | struct itimerspec t; |
| 2235 | struct itimerspec __user *ut; | 2234 | struct itimerspec __user *ut; |
| 2236 | 2235 | ||
| 2237 | res = -EFAULT; | ||
| 2238 | if (get_compat_itimerspec(&t, utmr)) | 2236 | if (get_compat_itimerspec(&t, utmr)) |
| 2239 | goto err_exit; | 2237 | return -EFAULT; |
| 2240 | ut = compat_alloc_user_space(sizeof(*ut)); | 2238 | ut = compat_alloc_user_space(sizeof(*ut)); |
| 2241 | if (copy_to_user(ut, &t, sizeof(t)) ) | 2239 | if (copy_to_user(ut, &t, sizeof(t))) |
| 2242 | goto err_exit; | 2240 | return -EFAULT; |
| 2243 | 2241 | ||
| 2244 | res = sys_timerfd(ufd, clockid, flags, ut); | 2242 | return sys_timerfd(ufd, clockid, flags, ut); |
| 2245 | err_exit: | ||
| 2246 | return res; | ||
| 2247 | } | 2243 | } |
| 2248 | 2244 | ||
| 2249 | #endif /* CONFIG_TIMERFD */ | 2245 | #endif /* CONFIG_TIMERFD */ |
| 2250 | |||
diff --git a/fs/dquot.c b/fs/dquot.c index 3a995841de90..8819d281500c 100644 --- a/fs/dquot.c +++ b/fs/dquot.c | |||
| @@ -1421,7 +1421,7 @@ int vfs_quota_off(struct super_block *sb, int type) | |||
| 1421 | /* If quota was reenabled in the meantime, we have | 1421 | /* If quota was reenabled in the meantime, we have |
| 1422 | * nothing to do */ | 1422 | * nothing to do */ |
| 1423 | if (!sb_has_quota_enabled(sb, cnt)) { | 1423 | if (!sb_has_quota_enabled(sb, cnt)) { |
| 1424 | mutex_lock(&toputinode[cnt]->i_mutex); | 1424 | mutex_lock_nested(&toputinode[cnt]->i_mutex, I_MUTEX_QUOTA); |
| 1425 | toputinode[cnt]->i_flags &= ~(S_IMMUTABLE | | 1425 | toputinode[cnt]->i_flags &= ~(S_IMMUTABLE | |
| 1426 | S_NOATIME | S_NOQUOTA); | 1426 | S_NOATIME | S_NOQUOTA); |
| 1427 | truncate_inode_pages(&toputinode[cnt]->i_data, 0); | 1427 | truncate_inode_pages(&toputinode[cnt]->i_data, 0); |
diff --git a/fs/ecryptfs/main.c b/fs/ecryptfs/main.c index 8cbf3f69ebe5..606128f5c927 100644 --- a/fs/ecryptfs/main.c +++ b/fs/ecryptfs/main.c | |||
| @@ -583,8 +583,7 @@ inode_info_init_once(void *vptr, struct kmem_cache *cachep, unsigned long flags) | |||
| 583 | { | 583 | { |
| 584 | struct ecryptfs_inode_info *ei = (struct ecryptfs_inode_info *)vptr; | 584 | struct ecryptfs_inode_info *ei = (struct ecryptfs_inode_info *)vptr; |
| 585 | 585 | ||
| 586 | if (flags & SLAB_CTOR_CONSTRUCTOR) | 586 | inode_init_once(&ei->vfs_inode); |
| 587 | inode_init_once(&ei->vfs_inode); | ||
| 588 | } | 587 | } |
| 589 | 588 | ||
| 590 | static struct ecryptfs_cache_info { | 589 | static struct ecryptfs_cache_info { |
diff --git a/fs/ecryptfs/mmap.c b/fs/ecryptfs/mmap.c index 0770c4b66f53..88ea6697908f 100644 --- a/fs/ecryptfs/mmap.c +++ b/fs/ecryptfs/mmap.c | |||
| @@ -364,18 +364,14 @@ static int fill_zeros_to_end_of_page(struct page *page, unsigned int to) | |||
| 364 | { | 364 | { |
| 365 | struct inode *inode = page->mapping->host; | 365 | struct inode *inode = page->mapping->host; |
| 366 | int end_byte_in_page; | 366 | int end_byte_in_page; |
| 367 | char *page_virt; | ||
| 368 | 367 | ||
| 369 | if ((i_size_read(inode) / PAGE_CACHE_SIZE) != page->index) | 368 | if ((i_size_read(inode) / PAGE_CACHE_SIZE) != page->index) |
| 370 | goto out; | 369 | goto out; |
| 371 | end_byte_in_page = i_size_read(inode) % PAGE_CACHE_SIZE; | 370 | end_byte_in_page = i_size_read(inode) % PAGE_CACHE_SIZE; |
| 372 | if (to > end_byte_in_page) | 371 | if (to > end_byte_in_page) |
| 373 | end_byte_in_page = to; | 372 | end_byte_in_page = to; |
| 374 | page_virt = kmap_atomic(page, KM_USER0); | 373 | zero_user_page(page, end_byte_in_page, |
| 375 | memset((page_virt + end_byte_in_page), 0, | 374 | PAGE_CACHE_SIZE - end_byte_in_page, KM_USER0); |
| 376 | (PAGE_CACHE_SIZE - end_byte_in_page)); | ||
| 377 | kunmap_atomic(page_virt, KM_USER0); | ||
| 378 | flush_dcache_page(page); | ||
| 379 | out: | 375 | out: |
| 380 | return 0; | 376 | return 0; |
| 381 | } | 377 | } |
| @@ -740,7 +736,6 @@ int write_zeros(struct file *file, pgoff_t index, int start, int num_zeros) | |||
| 740 | { | 736 | { |
| 741 | int rc = 0; | 737 | int rc = 0; |
| 742 | struct page *tmp_page; | 738 | struct page *tmp_page; |
| 743 | char *tmp_page_virt; | ||
| 744 | 739 | ||
| 745 | tmp_page = ecryptfs_get1page(file, index); | 740 | tmp_page = ecryptfs_get1page(file, index); |
| 746 | if (IS_ERR(tmp_page)) { | 741 | if (IS_ERR(tmp_page)) { |
| @@ -757,10 +752,7 @@ int write_zeros(struct file *file, pgoff_t index, int start, int num_zeros) | |||
| 757 | page_cache_release(tmp_page); | 752 | page_cache_release(tmp_page); |
| 758 | goto out; | 753 | goto out; |
| 759 | } | 754 | } |
| 760 | tmp_page_virt = kmap_atomic(tmp_page, KM_USER0); | 755 | zero_user_page(tmp_page, start, num_zeros, KM_USER0); |
| 761 | memset(((char *)tmp_page_virt + start), 0, num_zeros); | ||
| 762 | kunmap_atomic(tmp_page_virt, KM_USER0); | ||
| 763 | flush_dcache_page(tmp_page); | ||
| 764 | rc = ecryptfs_commit_write(file, tmp_page, start, start + num_zeros); | 756 | rc = ecryptfs_commit_write(file, tmp_page, start, start + num_zeros); |
| 765 | if (rc < 0) { | 757 | if (rc < 0) { |
| 766 | ecryptfs_printk(KERN_ERR, "Error attempting to write zero's " | 758 | ecryptfs_printk(KERN_ERR, "Error attempting to write zero's " |
diff --git a/fs/efs/super.c b/fs/efs/super.c index ba7a8b9da0c1..e0a6839e68ae 100644 --- a/fs/efs/super.c +++ b/fs/efs/super.c | |||
| @@ -72,8 +72,7 @@ static void init_once(void * foo, struct kmem_cache * cachep, unsigned long flag | |||
| 72 | { | 72 | { |
| 73 | struct efs_inode_info *ei = (struct efs_inode_info *) foo; | 73 | struct efs_inode_info *ei = (struct efs_inode_info *) foo; |
| 74 | 74 | ||
| 75 | if (flags & SLAB_CTOR_CONSTRUCTOR) | 75 | inode_init_once(&ei->vfs_inode); |
| 76 | inode_init_once(&ei->vfs_inode); | ||
| 77 | } | 76 | } |
| 78 | 77 | ||
| 79 | static int init_inodecache(void) | 78 | static int init_inodecache(void) |
| @@ -60,7 +60,7 @@ | |||
| 60 | #endif | 60 | #endif |
| 61 | 61 | ||
| 62 | int core_uses_pid; | 62 | int core_uses_pid; |
| 63 | char core_pattern[128] = "core"; | 63 | char core_pattern[CORENAME_MAX_SIZE] = "core"; |
| 64 | int suid_dumpable = 0; | 64 | int suid_dumpable = 0; |
| 65 | 65 | ||
| 66 | EXPORT_SYMBOL(suid_dumpable); | 66 | EXPORT_SYMBOL(suid_dumpable); |
| @@ -1264,8 +1264,6 @@ int set_binfmt(struct linux_binfmt *new) | |||
| 1264 | 1264 | ||
| 1265 | EXPORT_SYMBOL(set_binfmt); | 1265 | EXPORT_SYMBOL(set_binfmt); |
| 1266 | 1266 | ||
| 1267 | #define CORENAME_MAX_SIZE 64 | ||
| 1268 | |||
| 1269 | /* format_corename will inspect the pattern parameter, and output a | 1267 | /* format_corename will inspect the pattern parameter, and output a |
| 1270 | * name into corename, which must have space for at least | 1268 | * name into corename, which must have space for at least |
| 1271 | * CORENAME_MAX_SIZE bytes plus one byte for the zero terminator. | 1269 | * CORENAME_MAX_SIZE bytes plus one byte for the zero terminator. |
diff --git a/fs/ext2/super.c b/fs/ext2/super.c index 685a1c287177..16337bff0272 100644 --- a/fs/ext2/super.c +++ b/fs/ext2/super.c | |||
| @@ -160,13 +160,11 @@ static void init_once(void * foo, struct kmem_cache * cachep, unsigned long flag | |||
| 160 | { | 160 | { |
| 161 | struct ext2_inode_info *ei = (struct ext2_inode_info *) foo; | 161 | struct ext2_inode_info *ei = (struct ext2_inode_info *) foo; |
| 162 | 162 | ||
| 163 | if (flags & SLAB_CTOR_CONSTRUCTOR) { | 163 | rwlock_init(&ei->i_meta_lock); |
| 164 | rwlock_init(&ei->i_meta_lock); | ||
| 165 | #ifdef CONFIG_EXT2_FS_XATTR | 164 | #ifdef CONFIG_EXT2_FS_XATTR |
| 166 | init_rwsem(&ei->xattr_sem); | 165 | init_rwsem(&ei->xattr_sem); |
| 167 | #endif | 166 | #endif |
| 168 | inode_init_once(&ei->vfs_inode); | 167 | inode_init_once(&ei->vfs_inode); |
| 169 | } | ||
| 170 | } | 168 | } |
| 171 | 169 | ||
| 172 | static int init_inodecache(void) | 170 | static int init_inodecache(void) |
diff --git a/fs/ext3/super.c b/fs/ext3/super.c index 54d3c9041259..6e3062913a92 100644 --- a/fs/ext3/super.c +++ b/fs/ext3/super.c | |||
| @@ -466,14 +466,12 @@ static void init_once(void * foo, struct kmem_cache * cachep, unsigned long flag | |||
| 466 | { | 466 | { |
| 467 | struct ext3_inode_info *ei = (struct ext3_inode_info *) foo; | 467 | struct ext3_inode_info *ei = (struct ext3_inode_info *) foo; |
| 468 | 468 | ||
| 469 | if (flags & SLAB_CTOR_CONSTRUCTOR) { | 469 | INIT_LIST_HEAD(&ei->i_orphan); |
| 470 | INIT_LIST_HEAD(&ei->i_orphan); | ||
| 471 | #ifdef CONFIG_EXT3_FS_XATTR | 470 | #ifdef CONFIG_EXT3_FS_XATTR |
| 472 | init_rwsem(&ei->xattr_sem); | 471 | init_rwsem(&ei->xattr_sem); |
| 473 | #endif | 472 | #endif |
| 474 | mutex_init(&ei->truncate_mutex); | 473 | mutex_init(&ei->truncate_mutex); |
| 475 | inode_init_once(&ei->vfs_inode); | 474 | inode_init_once(&ei->vfs_inode); |
| 476 | } | ||
| 477 | } | 475 | } |
| 478 | 476 | ||
| 479 | static int init_inodecache(void) | 477 | static int init_inodecache(void) |
diff --git a/fs/ext4/super.c b/fs/ext4/super.c index 719126932354..cb9afdd0e26e 100644 --- a/fs/ext4/super.c +++ b/fs/ext4/super.c | |||
| @@ -517,14 +517,12 @@ static void init_once(void * foo, struct kmem_cache * cachep, unsigned long flag | |||
| 517 | { | 517 | { |
| 518 | struct ext4_inode_info *ei = (struct ext4_inode_info *) foo; | 518 | struct ext4_inode_info *ei = (struct ext4_inode_info *) foo; |
| 519 | 519 | ||
| 520 | if (flags & SLAB_CTOR_CONSTRUCTOR) { | 520 | INIT_LIST_HEAD(&ei->i_orphan); |
| 521 | INIT_LIST_HEAD(&ei->i_orphan); | ||
| 522 | #ifdef CONFIG_EXT4DEV_FS_XATTR | 521 | #ifdef CONFIG_EXT4DEV_FS_XATTR |
| 523 | init_rwsem(&ei->xattr_sem); | 522 | init_rwsem(&ei->xattr_sem); |
| 524 | #endif | 523 | #endif |
| 525 | mutex_init(&ei->truncate_mutex); | 524 | mutex_init(&ei->truncate_mutex); |
| 526 | inode_init_once(&ei->vfs_inode); | 525 | inode_init_once(&ei->vfs_inode); |
| 527 | } | ||
| 528 | } | 526 | } |
| 529 | 527 | ||
| 530 | static int init_inodecache(void) | 528 | static int init_inodecache(void) |
diff --git a/fs/fat/cache.c b/fs/fat/cache.c index 1959143c1d27..3c9c8a15ec73 100644 --- a/fs/fat/cache.c +++ b/fs/fat/cache.c | |||
| @@ -40,8 +40,7 @@ static void init_once(void *foo, struct kmem_cache *cachep, unsigned long flags) | |||
| 40 | { | 40 | { |
| 41 | struct fat_cache *cache = (struct fat_cache *)foo; | 41 | struct fat_cache *cache = (struct fat_cache *)foo; |
| 42 | 42 | ||
| 43 | if (flags & SLAB_CTOR_CONSTRUCTOR) | 43 | INIT_LIST_HEAD(&cache->cache_list); |
| 44 | INIT_LIST_HEAD(&cache->cache_list); | ||
| 45 | } | 44 | } |
| 46 | 45 | ||
| 47 | int __init fat_cache_init(void) | 46 | int __init fat_cache_init(void) |
diff --git a/fs/fat/inode.c b/fs/fat/inode.c index 2c55e8dce793..479722d89667 100644 --- a/fs/fat/inode.c +++ b/fs/fat/inode.c | |||
| @@ -500,14 +500,12 @@ static void init_once(void * foo, struct kmem_cache * cachep, unsigned long flag | |||
| 500 | { | 500 | { |
| 501 | struct msdos_inode_info *ei = (struct msdos_inode_info *)foo; | 501 | struct msdos_inode_info *ei = (struct msdos_inode_info *)foo; |
| 502 | 502 | ||
| 503 | if (flags & SLAB_CTOR_CONSTRUCTOR) { | 503 | spin_lock_init(&ei->cache_lru_lock); |
| 504 | spin_lock_init(&ei->cache_lru_lock); | 504 | ei->nr_caches = 0; |
| 505 | ei->nr_caches = 0; | 505 | ei->cache_valid_id = FAT_CACHE_VALID + 1; |
| 506 | ei->cache_valid_id = FAT_CACHE_VALID + 1; | 506 | INIT_LIST_HEAD(&ei->cache_lru); |
| 507 | INIT_LIST_HEAD(&ei->cache_lru); | 507 | INIT_HLIST_NODE(&ei->i_fat_hash); |
| 508 | INIT_HLIST_NODE(&ei->i_fat_hash); | 508 | inode_init_once(&ei->vfs_inode); |
| 509 | inode_init_once(&ei->vfs_inode); | ||
| 510 | } | ||
| 511 | } | 509 | } |
| 512 | 510 | ||
| 513 | static int __init fat_init_inodecache(void) | 511 | static int __init fat_init_inodecache(void) |
diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c index 1397018ff476..c3a2ad0da43c 100644 --- a/fs/fuse/inode.c +++ b/fs/fuse/inode.c | |||
| @@ -687,8 +687,7 @@ static void fuse_inode_init_once(void *foo, struct kmem_cache *cachep, | |||
| 687 | { | 687 | { |
| 688 | struct inode * inode = foo; | 688 | struct inode * inode = foo; |
| 689 | 689 | ||
| 690 | if (flags & SLAB_CTOR_CONSTRUCTOR) | 690 | inode_init_once(inode); |
| 691 | inode_init_once(inode); | ||
| 692 | } | 691 | } |
| 693 | 692 | ||
| 694 | static int __init fuse_fs_init(void) | 693 | static int __init fuse_fs_init(void) |
diff --git a/fs/gfs2/main.c b/fs/gfs2/main.c index e460487c0557..787a0edef100 100644 --- a/fs/gfs2/main.c +++ b/fs/gfs2/main.c | |||
| @@ -27,29 +27,27 @@ | |||
| 27 | static void gfs2_init_inode_once(void *foo, struct kmem_cache *cachep, unsigned long flags) | 27 | static void gfs2_init_inode_once(void *foo, struct kmem_cache *cachep, unsigned long flags) |
| 28 | { | 28 | { |
| 29 | struct gfs2_inode *ip = foo; | 29 | struct gfs2_inode *ip = foo; |
| 30 | if (flags & SLAB_CTOR_CONSTRUCTOR) { | 30 | |
| 31 | inode_init_once(&ip->i_inode); | 31 | inode_init_once(&ip->i_inode); |
| 32 | spin_lock_init(&ip->i_spin); | 32 | spin_lock_init(&ip->i_spin); |
| 33 | init_rwsem(&ip->i_rw_mutex); | 33 | init_rwsem(&ip->i_rw_mutex); |
| 34 | memset(ip->i_cache, 0, sizeof(ip->i_cache)); | 34 | memset(ip->i_cache, 0, sizeof(ip->i_cache)); |
| 35 | } | ||
| 36 | } | 35 | } |
| 37 | 36 | ||
| 38 | static void gfs2_init_glock_once(void *foo, struct kmem_cache *cachep, unsigned long flags) | 37 | static void gfs2_init_glock_once(void *foo, struct kmem_cache *cachep, unsigned long flags) |
| 39 | { | 38 | { |
| 40 | struct gfs2_glock *gl = foo; | 39 | struct gfs2_glock *gl = foo; |
| 41 | if (flags & SLAB_CTOR_CONSTRUCTOR) { | 40 | |
| 42 | INIT_HLIST_NODE(&gl->gl_list); | 41 | INIT_HLIST_NODE(&gl->gl_list); |
| 43 | spin_lock_init(&gl->gl_spin); | 42 | spin_lock_init(&gl->gl_spin); |
| 44 | INIT_LIST_HEAD(&gl->gl_holders); | 43 | INIT_LIST_HEAD(&gl->gl_holders); |
| 45 | INIT_LIST_HEAD(&gl->gl_waiters1); | 44 | INIT_LIST_HEAD(&gl->gl_waiters1); |
| 46 | INIT_LIST_HEAD(&gl->gl_waiters3); | 45 | INIT_LIST_HEAD(&gl->gl_waiters3); |
| 47 | gl->gl_lvb = NULL; | 46 | gl->gl_lvb = NULL; |
| 48 | atomic_set(&gl->gl_lvb_count, 0); | 47 | atomic_set(&gl->gl_lvb_count, 0); |
| 49 | INIT_LIST_HEAD(&gl->gl_reclaim); | 48 | INIT_LIST_HEAD(&gl->gl_reclaim); |
| 50 | INIT_LIST_HEAD(&gl->gl_ail_list); | 49 | INIT_LIST_HEAD(&gl->gl_ail_list); |
| 51 | atomic_set(&gl->gl_ail_count, 0); | 50 | atomic_set(&gl->gl_ail_count, 0); |
| 52 | } | ||
| 53 | } | 51 | } |
| 54 | 52 | ||
| 55 | /** | 53 | /** |
diff --git a/fs/hfs/super.c b/fs/hfs/super.c index 4f1888f16cf0..92cf8751e428 100644 --- a/fs/hfs/super.c +++ b/fs/hfs/super.c | |||
| @@ -434,8 +434,7 @@ static void hfs_init_once(void *p, struct kmem_cache *cachep, unsigned long flag | |||
| 434 | { | 434 | { |
| 435 | struct hfs_inode_info *i = p; | 435 | struct hfs_inode_info *i = p; |
| 436 | 436 | ||
| 437 | if (flags & SLAB_CTOR_CONSTRUCTOR) | 437 | inode_init_once(&i->vfs_inode); |
| 438 | inode_init_once(&i->vfs_inode); | ||
| 439 | } | 438 | } |
| 440 | 439 | ||
| 441 | static int __init init_hfs_fs(void) | 440 | static int __init init_hfs_fs(void) |
diff --git a/fs/hfsplus/super.c b/fs/hfsplus/super.c index 37afbec8a761..ebd1b380cbbc 100644 --- a/fs/hfsplus/super.c +++ b/fs/hfsplus/super.c | |||
| @@ -470,8 +470,7 @@ static void hfsplus_init_once(void *p, struct kmem_cache *cachep, unsigned long | |||
| 470 | { | 470 | { |
| 471 | struct hfsplus_inode_info *i = p; | 471 | struct hfsplus_inode_info *i = p; |
| 472 | 472 | ||
| 473 | if (flags & SLAB_CTOR_CONSTRUCTOR) | 473 | inode_init_once(&i->vfs_inode); |
| 474 | inode_init_once(&i->vfs_inode); | ||
| 475 | } | 474 | } |
| 476 | 475 | ||
| 477 | static int __init init_hfsplus_fs(void) | 476 | static int __init init_hfsplus_fs(void) |
diff --git a/fs/hpfs/super.c b/fs/hpfs/super.c index 1b95f39fbc37..fca1165d7192 100644 --- a/fs/hpfs/super.c +++ b/fs/hpfs/super.c | |||
| @@ -176,11 +176,9 @@ static void init_once(void * foo, struct kmem_cache * cachep, unsigned long flag | |||
| 176 | { | 176 | { |
| 177 | struct hpfs_inode_info *ei = (struct hpfs_inode_info *) foo; | 177 | struct hpfs_inode_info *ei = (struct hpfs_inode_info *) foo; |
| 178 | 178 | ||
| 179 | if (flags & SLAB_CTOR_CONSTRUCTOR) { | 179 | mutex_init(&ei->i_mutex); |
| 180 | mutex_init(&ei->i_mutex); | 180 | mutex_init(&ei->i_parent_mutex); |
| 181 | mutex_init(&ei->i_parent_mutex); | 181 | inode_init_once(&ei->vfs_inode); |
| 182 | inode_init_once(&ei->vfs_inode); | ||
| 183 | } | ||
| 184 | } | 182 | } |
| 185 | 183 | ||
| 186 | static int init_inodecache(void) | 184 | static int init_inodecache(void) |
diff --git a/fs/hugetlbfs/inode.c b/fs/hugetlbfs/inode.c index 98959b87cdf8..aa083dd34e92 100644 --- a/fs/hugetlbfs/inode.c +++ b/fs/hugetlbfs/inode.c | |||
| @@ -556,8 +556,7 @@ static void init_once(void *foo, struct kmem_cache *cachep, unsigned long flags) | |||
| 556 | { | 556 | { |
| 557 | struct hugetlbfs_inode_info *ei = (struct hugetlbfs_inode_info *)foo; | 557 | struct hugetlbfs_inode_info *ei = (struct hugetlbfs_inode_info *)foo; |
| 558 | 558 | ||
| 559 | if (flags & SLAB_CTOR_CONSTRUCTOR) | 559 | inode_init_once(&ei->vfs_inode); |
| 560 | inode_init_once(&ei->vfs_inode); | ||
| 561 | } | 560 | } |
| 562 | 561 | ||
| 563 | const struct file_operations hugetlbfs_file_operations = { | 562 | const struct file_operations hugetlbfs_file_operations = { |
diff --git a/fs/inode.c b/fs/inode.c index df2ef15d03d2..9a012cc5b6cd 100644 --- a/fs/inode.c +++ b/fs/inode.c | |||
| @@ -213,8 +213,7 @@ static void init_once(void * foo, struct kmem_cache * cachep, unsigned long flag | |||
| 213 | { | 213 | { |
| 214 | struct inode * inode = (struct inode *) foo; | 214 | struct inode * inode = (struct inode *) foo; |
| 215 | 215 | ||
| 216 | if (flags & SLAB_CTOR_CONSTRUCTOR) | 216 | inode_init_once(inode); |
| 217 | inode_init_once(inode); | ||
| 218 | } | 217 | } |
| 219 | 218 | ||
| 220 | /* | 219 | /* |
diff --git a/fs/isofs/inode.c b/fs/isofs/inode.c index e99f7ff4ecb4..5c3eecf7542e 100644 --- a/fs/isofs/inode.c +++ b/fs/isofs/inode.c | |||
| @@ -77,8 +77,7 @@ static void init_once(void *foo, struct kmem_cache * cachep, unsigned long flags | |||
| 77 | { | 77 | { |
| 78 | struct iso_inode_info *ei = foo; | 78 | struct iso_inode_info *ei = foo; |
| 79 | 79 | ||
| 80 | if (flags & SLAB_CTOR_CONSTRUCTOR) | 80 | inode_init_once(&ei->vfs_inode); |
| 81 | inode_init_once(&ei->vfs_inode); | ||
| 82 | } | 81 | } |
| 83 | 82 | ||
| 84 | static int init_inodecache(void) | 83 | static int init_inodecache(void) |
diff --git a/fs/jffs2/super.c b/fs/jffs2/super.c index 45368f8bbe72..6488af43bc9b 100644 --- a/fs/jffs2/super.c +++ b/fs/jffs2/super.c | |||
| @@ -47,10 +47,8 @@ static void jffs2_i_init_once(void * foo, struct kmem_cache * cachep, unsigned l | |||
| 47 | { | 47 | { |
| 48 | struct jffs2_inode_info *ei = (struct jffs2_inode_info *) foo; | 48 | struct jffs2_inode_info *ei = (struct jffs2_inode_info *) foo; |
| 49 | 49 | ||
| 50 | if (flags & SLAB_CTOR_CONSTRUCTOR) { | 50 | init_MUTEX(&ei->sem); |
| 51 | init_MUTEX(&ei->sem); | 51 | inode_init_once(&ei->vfs_inode); |
| 52 | inode_init_once(&ei->vfs_inode); | ||
| 53 | } | ||
| 54 | } | 52 | } |
| 55 | 53 | ||
| 56 | static int jffs2_sync_fs(struct super_block *sb, int wait) | 54 | static int jffs2_sync_fs(struct super_block *sb, int wait) |
diff --git a/fs/jfs/jfs_metapage.c b/fs/jfs/jfs_metapage.c index 6b3acb0b5781..43d4f69afbec 100644 --- a/fs/jfs/jfs_metapage.c +++ b/fs/jfs/jfs_metapage.c | |||
| @@ -184,16 +184,14 @@ static void init_once(void *foo, struct kmem_cache *cachep, unsigned long flags) | |||
| 184 | { | 184 | { |
| 185 | struct metapage *mp = (struct metapage *)foo; | 185 | struct metapage *mp = (struct metapage *)foo; |
| 186 | 186 | ||
| 187 | if (flags & SLAB_CTOR_CONSTRUCTOR) { | 187 | mp->lid = 0; |
| 188 | mp->lid = 0; | 188 | mp->lsn = 0; |
| 189 | mp->lsn = 0; | 189 | mp->flag = 0; |
| 190 | mp->flag = 0; | 190 | mp->data = NULL; |
| 191 | mp->data = NULL; | 191 | mp->clsn = 0; |
| 192 | mp->clsn = 0; | 192 | mp->log = NULL; |
| 193 | mp->log = NULL; | 193 | set_bit(META_free, &mp->flag); |
| 194 | set_bit(META_free, &mp->flag); | 194 | init_waitqueue_head(&mp->wait); |
| 195 | init_waitqueue_head(&mp->wait); | ||
| 196 | } | ||
| 197 | } | 195 | } |
| 198 | 196 | ||
| 199 | static inline struct metapage *alloc_metapage(gfp_t gfp_mask) | 197 | static inline struct metapage *alloc_metapage(gfp_t gfp_mask) |
diff --git a/fs/jfs/super.c b/fs/jfs/super.c index ea9dc3e65dcf..20e4ac1c79a3 100644 --- a/fs/jfs/super.c +++ b/fs/jfs/super.c | |||
| @@ -752,20 +752,18 @@ static void init_once(void *foo, struct kmem_cache * cachep, unsigned long flags | |||
| 752 | { | 752 | { |
| 753 | struct jfs_inode_info *jfs_ip = (struct jfs_inode_info *) foo; | 753 | struct jfs_inode_info *jfs_ip = (struct jfs_inode_info *) foo; |
| 754 | 754 | ||
| 755 | if (flags & SLAB_CTOR_CONSTRUCTOR) { | 755 | memset(jfs_ip, 0, sizeof(struct jfs_inode_info)); |
| 756 | memset(jfs_ip, 0, sizeof(struct jfs_inode_info)); | 756 | INIT_LIST_HEAD(&jfs_ip->anon_inode_list); |
| 757 | INIT_LIST_HEAD(&jfs_ip->anon_inode_list); | 757 | init_rwsem(&jfs_ip->rdwrlock); |
| 758 | init_rwsem(&jfs_ip->rdwrlock); | 758 | mutex_init(&jfs_ip->commit_mutex); |
| 759 | mutex_init(&jfs_ip->commit_mutex); | 759 | init_rwsem(&jfs_ip->xattr_sem); |
| 760 | init_rwsem(&jfs_ip->xattr_sem); | 760 | spin_lock_init(&jfs_ip->ag_lock); |
| 761 | spin_lock_init(&jfs_ip->ag_lock); | 761 | jfs_ip->active_ag = -1; |
| 762 | jfs_ip->active_ag = -1; | ||
| 763 | #ifdef CONFIG_JFS_POSIX_ACL | 762 | #ifdef CONFIG_JFS_POSIX_ACL |
| 764 | jfs_ip->i_acl = JFS_ACL_NOT_CACHED; | 763 | jfs_ip->i_acl = JFS_ACL_NOT_CACHED; |
| 765 | jfs_ip->i_default_acl = JFS_ACL_NOT_CACHED; | 764 | jfs_ip->i_default_acl = JFS_ACL_NOT_CACHED; |
| 766 | #endif | 765 | #endif |
| 767 | inode_init_once(&jfs_ip->vfs_inode); | 766 | inode_init_once(&jfs_ip->vfs_inode); |
| 768 | } | ||
| 769 | } | 767 | } |
| 770 | 768 | ||
| 771 | static int __init init_jfs_fs(void) | 769 | static int __init init_jfs_fs(void) |
diff --git a/fs/locks.c b/fs/locks.c index 8ec16ab5ef74..431a8b871fce 100644 --- a/fs/locks.c +++ b/fs/locks.c | |||
| @@ -203,9 +203,6 @@ static void init_once(void *foo, struct kmem_cache *cache, unsigned long flags) | |||
| 203 | { | 203 | { |
| 204 | struct file_lock *lock = (struct file_lock *) foo; | 204 | struct file_lock *lock = (struct file_lock *) foo; |
| 205 | 205 | ||
| 206 | if (!(flags & SLAB_CTOR_CONSTRUCTOR)) | ||
| 207 | return; | ||
| 208 | |||
| 209 | locks_init_lock(lock); | 206 | locks_init_lock(lock); |
| 210 | } | 207 | } |
| 211 | 208 | ||
diff --git a/fs/minix/inode.c b/fs/minix/inode.c index 2f4d43a2a310..be4044614ac8 100644 --- a/fs/minix/inode.c +++ b/fs/minix/inode.c | |||
| @@ -73,8 +73,7 @@ static void init_once(void * foo, struct kmem_cache * cachep, unsigned long flag | |||
| 73 | { | 73 | { |
| 74 | struct minix_inode_info *ei = (struct minix_inode_info *) foo; | 74 | struct minix_inode_info *ei = (struct minix_inode_info *) foo; |
| 75 | 75 | ||
| 76 | if (flags & SLAB_CTOR_CONSTRUCTOR) | 76 | inode_init_once(&ei->vfs_inode); |
| 77 | inode_init_once(&ei->vfs_inode); | ||
| 78 | } | 77 | } |
| 79 | 78 | ||
| 80 | static int init_inodecache(void) | 79 | static int init_inodecache(void) |
diff --git a/fs/ncpfs/inode.c b/fs/ncpfs/inode.c index c29f00ad495d..cf06eb9f050e 100644 --- a/fs/ncpfs/inode.c +++ b/fs/ncpfs/inode.c | |||
| @@ -60,10 +60,8 @@ static void init_once(void * foo, struct kmem_cache * cachep, unsigned long flag | |||
| 60 | { | 60 | { |
| 61 | struct ncp_inode_info *ei = (struct ncp_inode_info *) foo; | 61 | struct ncp_inode_info *ei = (struct ncp_inode_info *) foo; |
| 62 | 62 | ||
| 63 | if (flags & SLAB_CTOR_CONSTRUCTOR) { | 63 | mutex_init(&ei->open_mutex); |
| 64 | mutex_init(&ei->open_mutex); | 64 | inode_init_once(&ei->vfs_inode); |
| 65 | inode_init_once(&ei->vfs_inode); | ||
| 66 | } | ||
| 67 | } | 65 | } |
| 68 | 66 | ||
| 69 | static int init_inodecache(void) | 67 | static int init_inodecache(void) |
diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c index 2a3fd9573207..2b26ad7c9770 100644 --- a/fs/nfs/inode.c +++ b/fs/nfs/inode.c | |||
| @@ -1164,21 +1164,19 @@ static void init_once(void * foo, struct kmem_cache * cachep, unsigned long flag | |||
| 1164 | { | 1164 | { |
| 1165 | struct nfs_inode *nfsi = (struct nfs_inode *) foo; | 1165 | struct nfs_inode *nfsi = (struct nfs_inode *) foo; |
| 1166 | 1166 | ||
| 1167 | if (flags & SLAB_CTOR_CONSTRUCTOR) { | 1167 | inode_init_once(&nfsi->vfs_inode); |
| 1168 | inode_init_once(&nfsi->vfs_inode); | 1168 | spin_lock_init(&nfsi->req_lock); |
| 1169 | spin_lock_init(&nfsi->req_lock); | 1169 | INIT_LIST_HEAD(&nfsi->dirty); |
| 1170 | INIT_LIST_HEAD(&nfsi->dirty); | 1170 | INIT_LIST_HEAD(&nfsi->commit); |
| 1171 | INIT_LIST_HEAD(&nfsi->commit); | 1171 | INIT_LIST_HEAD(&nfsi->open_files); |
| 1172 | INIT_LIST_HEAD(&nfsi->open_files); | 1172 | INIT_LIST_HEAD(&nfsi->access_cache_entry_lru); |
| 1173 | INIT_LIST_HEAD(&nfsi->access_cache_entry_lru); | 1173 | INIT_LIST_HEAD(&nfsi->access_cache_inode_lru); |
| 1174 | INIT_LIST_HEAD(&nfsi->access_cache_inode_lru); | 1174 | INIT_RADIX_TREE(&nfsi->nfs_page_tree, GFP_ATOMIC); |
| 1175 | INIT_RADIX_TREE(&nfsi->nfs_page_tree, GFP_ATOMIC); | 1175 | atomic_set(&nfsi->data_updates, 0); |
| 1176 | atomic_set(&nfsi->data_updates, 0); | 1176 | nfsi->ndirty = 0; |
| 1177 | nfsi->ndirty = 0; | 1177 | nfsi->ncommit = 0; |
| 1178 | nfsi->ncommit = 0; | 1178 | nfsi->npages = 0; |
| 1179 | nfsi->npages = 0; | 1179 | nfs4_init_once(nfsi); |
| 1180 | nfs4_init_once(nfsi); | ||
| 1181 | } | ||
| 1182 | } | 1180 | } |
| 1183 | 1181 | ||
| 1184 | static int __init nfs_init_inodecache(void) | 1182 | static int __init nfs_init_inodecache(void) |
diff --git a/fs/ntfs/super.c b/fs/ntfs/super.c index 21d834e5ed73..4566b9182551 100644 --- a/fs/ntfs/super.c +++ b/fs/ntfs/super.c | |||
| @@ -3085,8 +3085,7 @@ static void ntfs_big_inode_init_once(void *foo, struct kmem_cache *cachep, | |||
| 3085 | { | 3085 | { |
| 3086 | ntfs_inode *ni = (ntfs_inode *)foo; | 3086 | ntfs_inode *ni = (ntfs_inode *)foo; |
| 3087 | 3087 | ||
| 3088 | if (flags & SLAB_CTOR_CONSTRUCTOR) | 3088 | inode_init_once(VFS_I(ni)); |
| 3089 | inode_init_once(VFS_I(ni)); | ||
| 3090 | } | 3089 | } |
| 3091 | 3090 | ||
| 3092 | /* | 3091 | /* |
diff --git a/fs/ocfs2/dlm/dlmfs.c b/fs/ocfs2/dlm/dlmfs.c index 5671cf9d6383..fd8cb1badc9b 100644 --- a/fs/ocfs2/dlm/dlmfs.c +++ b/fs/ocfs2/dlm/dlmfs.c | |||
| @@ -262,12 +262,10 @@ static void dlmfs_init_once(void *foo, | |||
| 262 | struct dlmfs_inode_private *ip = | 262 | struct dlmfs_inode_private *ip = |
| 263 | (struct dlmfs_inode_private *) foo; | 263 | (struct dlmfs_inode_private *) foo; |
| 264 | 264 | ||
| 265 | if (flags & SLAB_CTOR_CONSTRUCTOR) { | 265 | ip->ip_dlm = NULL; |
| 266 | ip->ip_dlm = NULL; | 266 | ip->ip_parent = NULL; |
| 267 | ip->ip_parent = NULL; | ||
| 268 | 267 | ||
| 269 | inode_init_once(&ip->ip_vfs_inode); | 268 | inode_init_once(&ip->ip_vfs_inode); |
| 270 | } | ||
| 271 | } | 269 | } |
| 272 | 270 | ||
| 273 | static struct inode *dlmfs_alloc_inode(struct super_block *sb) | 271 | static struct inode *dlmfs_alloc_inode(struct super_block *sb) |
diff --git a/fs/ocfs2/super.c b/fs/ocfs2/super.c index 7c5e3f5d6634..86b559c7dce9 100644 --- a/fs/ocfs2/super.c +++ b/fs/ocfs2/super.c | |||
| @@ -937,31 +937,29 @@ static void ocfs2_inode_init_once(void *data, | |||
| 937 | { | 937 | { |
| 938 | struct ocfs2_inode_info *oi = data; | 938 | struct ocfs2_inode_info *oi = data; |
| 939 | 939 | ||
| 940 | if (flags & SLAB_CTOR_CONSTRUCTOR) { | 940 | oi->ip_flags = 0; |
| 941 | oi->ip_flags = 0; | 941 | oi->ip_open_count = 0; |
| 942 | oi->ip_open_count = 0; | 942 | spin_lock_init(&oi->ip_lock); |
| 943 | spin_lock_init(&oi->ip_lock); | 943 | ocfs2_extent_map_init(&oi->vfs_inode); |
| 944 | ocfs2_extent_map_init(&oi->vfs_inode); | 944 | INIT_LIST_HEAD(&oi->ip_io_markers); |
| 945 | INIT_LIST_HEAD(&oi->ip_io_markers); | 945 | oi->ip_created_trans = 0; |
| 946 | oi->ip_created_trans = 0; | 946 | oi->ip_last_trans = 0; |
| 947 | oi->ip_last_trans = 0; | 947 | oi->ip_dir_start_lookup = 0; |
| 948 | oi->ip_dir_start_lookup = 0; | ||
| 949 | 948 | ||
| 950 | init_rwsem(&oi->ip_alloc_sem); | 949 | init_rwsem(&oi->ip_alloc_sem); |
| 951 | mutex_init(&oi->ip_io_mutex); | 950 | mutex_init(&oi->ip_io_mutex); |
| 952 | 951 | ||
| 953 | oi->ip_blkno = 0ULL; | 952 | oi->ip_blkno = 0ULL; |
| 954 | oi->ip_clusters = 0; | 953 | oi->ip_clusters = 0; |
| 955 | 954 | ||
| 956 | ocfs2_lock_res_init_once(&oi->ip_rw_lockres); | 955 | ocfs2_lock_res_init_once(&oi->ip_rw_lockres); |
| 957 | ocfs2_lock_res_init_once(&oi->ip_meta_lockres); | 956 | ocfs2_lock_res_init_once(&oi->ip_meta_lockres); |
| 958 | ocfs2_lock_res_init_once(&oi->ip_data_lockres); | 957 | ocfs2_lock_res_init_once(&oi->ip_data_lockres); |
| 959 | ocfs2_lock_res_init_once(&oi->ip_open_lockres); | 958 | ocfs2_lock_res_init_once(&oi->ip_open_lockres); |
| 960 | 959 | ||
| 961 | ocfs2_metadata_cache_init(&oi->vfs_inode); | 960 | ocfs2_metadata_cache_init(&oi->vfs_inode); |
| 962 | 961 | ||
| 963 | inode_init_once(&oi->vfs_inode); | 962 | inode_init_once(&oi->vfs_inode); |
| 964 | } | ||
| 965 | } | 963 | } |
| 966 | 964 | ||
| 967 | static int ocfs2_initialize_mem_caches(void) | 965 | static int ocfs2_initialize_mem_caches(void) |
diff --git a/fs/openpromfs/inode.c b/fs/openpromfs/inode.c index 731a90e9f0cd..e62397341c36 100644 --- a/fs/openpromfs/inode.c +++ b/fs/openpromfs/inode.c | |||
| @@ -419,8 +419,7 @@ static void op_inode_init_once(void *data, struct kmem_cache * cachep, unsigned | |||
| 419 | { | 419 | { |
| 420 | struct op_inode_info *oi = (struct op_inode_info *) data; | 420 | struct op_inode_info *oi = (struct op_inode_info *) data; |
| 421 | 421 | ||
| 422 | if (flags & SLAB_CTOR_CONSTRUCTOR) | 422 | inode_init_once(&oi->vfs_inode); |
| 423 | inode_init_once(&oi->vfs_inode); | ||
| 424 | } | 423 | } |
| 425 | 424 | ||
| 426 | static int __init init_openprom_fs(void) | 425 | static int __init init_openprom_fs(void) |
diff --git a/fs/proc/inode.c b/fs/proc/inode.c index b8171907c83b..d5ce65c68d7b 100644 --- a/fs/proc/inode.c +++ b/fs/proc/inode.c | |||
| @@ -109,8 +109,7 @@ static void init_once(void * foo, struct kmem_cache * cachep, unsigned long flag | |||
| 109 | { | 109 | { |
| 110 | struct proc_inode *ei = (struct proc_inode *) foo; | 110 | struct proc_inode *ei = (struct proc_inode *) foo; |
| 111 | 111 | ||
| 112 | if (flags & SLAB_CTOR_CONSTRUCTOR) | 112 | inode_init_once(&ei->vfs_inode); |
| 113 | inode_init_once(&ei->vfs_inode); | ||
| 114 | } | 113 | } |
| 115 | 114 | ||
| 116 | int __init proc_init_inodecache(void) | 115 | int __init proc_init_inodecache(void) |
diff --git a/fs/qnx4/inode.c b/fs/qnx4/inode.c index 75fc8498f2e2..8d256eb11813 100644 --- a/fs/qnx4/inode.c +++ b/fs/qnx4/inode.c | |||
| @@ -536,8 +536,7 @@ static void init_once(void *foo, struct kmem_cache * cachep, | |||
| 536 | { | 536 | { |
| 537 | struct qnx4_inode_info *ei = (struct qnx4_inode_info *) foo; | 537 | struct qnx4_inode_info *ei = (struct qnx4_inode_info *) foo; |
| 538 | 538 | ||
| 539 | if (flags & SLAB_CTOR_CONSTRUCTOR) | 539 | inode_init_once(&ei->vfs_inode); |
| 540 | inode_init_once(&ei->vfs_inode); | ||
| 541 | } | 540 | } |
| 542 | 541 | ||
| 543 | static int init_inodecache(void) | 542 | static int init_inodecache(void) |
diff --git a/fs/quota.c b/fs/quota.c index e9d88fd0eca8..9f237d6182c9 100644 --- a/fs/quota.c +++ b/fs/quota.c | |||
| @@ -157,7 +157,6 @@ static int check_quotactl_valid(struct super_block *sb, int type, int cmd, qid_t | |||
| 157 | static void quota_sync_sb(struct super_block *sb, int type) | 157 | static void quota_sync_sb(struct super_block *sb, int type) |
| 158 | { | 158 | { |
| 159 | int cnt; | 159 | int cnt; |
| 160 | struct inode *discard[MAXQUOTAS]; | ||
| 161 | 160 | ||
| 162 | sb->s_qcop->quota_sync(sb, type); | 161 | sb->s_qcop->quota_sync(sb, type); |
| 163 | /* This is not very clever (and fast) but currently I don't know about | 162 | /* This is not very clever (and fast) but currently I don't know about |
| @@ -167,29 +166,21 @@ static void quota_sync_sb(struct super_block *sb, int type) | |||
| 167 | sb->s_op->sync_fs(sb, 1); | 166 | sb->s_op->sync_fs(sb, 1); |
| 168 | sync_blockdev(sb->s_bdev); | 167 | sync_blockdev(sb->s_bdev); |
| 169 | 168 | ||
| 170 | /* Now when everything is written we can discard the pagecache so | 169 | /* |
| 171 | * that userspace sees the changes. We need i_mutex and so we could | 170 | * Now when everything is written we can discard the pagecache so |
| 172 | * not do it inside dqonoff_mutex. Moreover we need to be carefull | 171 | * that userspace sees the changes. |
| 173 | * about races with quotaoff() (that is the reason why we have own | 172 | */ |
| 174 | * reference to inode). */ | ||
| 175 | mutex_lock(&sb_dqopt(sb)->dqonoff_mutex); | 173 | mutex_lock(&sb_dqopt(sb)->dqonoff_mutex); |
| 176 | for (cnt = 0; cnt < MAXQUOTAS; cnt++) { | 174 | for (cnt = 0; cnt < MAXQUOTAS; cnt++) { |
| 177 | discard[cnt] = NULL; | ||
| 178 | if (type != -1 && cnt != type) | 175 | if (type != -1 && cnt != type) |
| 179 | continue; | 176 | continue; |
| 180 | if (!sb_has_quota_enabled(sb, cnt)) | 177 | if (!sb_has_quota_enabled(sb, cnt)) |
| 181 | continue; | 178 | continue; |
| 182 | discard[cnt] = igrab(sb_dqopt(sb)->files[cnt]); | 179 | mutex_lock_nested(&sb_dqopt(sb)->files[cnt]->i_mutex, I_MUTEX_QUOTA); |
| 180 | truncate_inode_pages(&sb_dqopt(sb)->files[cnt]->i_data, 0); | ||
| 181 | mutex_unlock(&sb_dqopt(sb)->files[cnt]->i_mutex); | ||
| 183 | } | 182 | } |
| 184 | mutex_unlock(&sb_dqopt(sb)->dqonoff_mutex); | 183 | mutex_unlock(&sb_dqopt(sb)->dqonoff_mutex); |
| 185 | for (cnt = 0; cnt < MAXQUOTAS; cnt++) { | ||
| 186 | if (discard[cnt]) { | ||
| 187 | mutex_lock(&discard[cnt]->i_mutex); | ||
| 188 | truncate_inode_pages(&discard[cnt]->i_data, 0); | ||
| 189 | mutex_unlock(&discard[cnt]->i_mutex); | ||
| 190 | iput(discard[cnt]); | ||
| 191 | } | ||
| 192 | } | ||
| 193 | } | 184 | } |
| 194 | 185 | ||
| 195 | void sync_dquots(struct super_block *sb, int type) | 186 | void sync_dquots(struct super_block *sb, int type) |
diff --git a/fs/reiserfs/super.c b/fs/reiserfs/super.c index c7762140c425..b4ac9119200e 100644 --- a/fs/reiserfs/super.c +++ b/fs/reiserfs/super.c | |||
| @@ -511,14 +511,12 @@ static void init_once(void *foo, struct kmem_cache * cachep, unsigned long flags | |||
| 511 | { | 511 | { |
| 512 | struct reiserfs_inode_info *ei = (struct reiserfs_inode_info *)foo; | 512 | struct reiserfs_inode_info *ei = (struct reiserfs_inode_info *)foo; |
| 513 | 513 | ||
| 514 | if (flags & SLAB_CTOR_CONSTRUCTOR) { | 514 | INIT_LIST_HEAD(&ei->i_prealloc_list); |
| 515 | INIT_LIST_HEAD(&ei->i_prealloc_list); | 515 | inode_init_once(&ei->vfs_inode); |
| 516 | inode_init_once(&ei->vfs_inode); | ||
| 517 | #ifdef CONFIG_REISERFS_FS_POSIX_ACL | 516 | #ifdef CONFIG_REISERFS_FS_POSIX_ACL |
| 518 | ei->i_acl_access = NULL; | 517 | ei->i_acl_access = NULL; |
| 519 | ei->i_acl_default = NULL; | 518 | ei->i_acl_default = NULL; |
| 520 | #endif | 519 | #endif |
| 521 | } | ||
| 522 | } | 520 | } |
| 523 | 521 | ||
| 524 | static int init_inodecache(void) | 522 | static int init_inodecache(void) |
diff --git a/fs/romfs/inode.c b/fs/romfs/inode.c index 804285190271..2284e03342c6 100644 --- a/fs/romfs/inode.c +++ b/fs/romfs/inode.c | |||
| @@ -566,12 +566,11 @@ static void romfs_destroy_inode(struct inode *inode) | |||
| 566 | kmem_cache_free(romfs_inode_cachep, ROMFS_I(inode)); | 566 | kmem_cache_free(romfs_inode_cachep, ROMFS_I(inode)); |
| 567 | } | 567 | } |
| 568 | 568 | ||
| 569 | static void init_once(void * foo, struct kmem_cache * cachep, unsigned long flags) | 569 | static void init_once(void *foo, struct kmem_cache *cachep, unsigned long flags) |
| 570 | { | 570 | { |
| 571 | struct romfs_inode_info *ei = (struct romfs_inode_info *) foo; | 571 | struct romfs_inode_info *ei = foo; |
| 572 | 572 | ||
| 573 | if (flags & SLAB_CTOR_CONSTRUCTOR) | 573 | inode_init_once(&ei->vfs_inode); |
| 574 | inode_init_once(&ei->vfs_inode); | ||
| 575 | } | 574 | } |
| 576 | 575 | ||
| 577 | static int init_inodecache(void) | 576 | static int init_inodecache(void) |
diff --git a/fs/smbfs/inode.c b/fs/smbfs/inode.c index 424a3ddf86dd..5c9243a23b9b 100644 --- a/fs/smbfs/inode.c +++ b/fs/smbfs/inode.c | |||
| @@ -70,8 +70,7 @@ static void init_once(void * foo, struct kmem_cache * cachep, unsigned long flag | |||
| 70 | { | 70 | { |
| 71 | struct smb_inode_info *ei = (struct smb_inode_info *) foo; | 71 | struct smb_inode_info *ei = (struct smb_inode_info *) foo; |
| 72 | 72 | ||
| 73 | if (flags & SLAB_CTOR_CONSTRUCTOR) | 73 | inode_init_once(&ei->vfs_inode); |
| 74 | inode_init_once(&ei->vfs_inode); | ||
| 75 | } | 74 | } |
| 76 | 75 | ||
| 77 | static int init_inodecache(void) | 76 | static int init_inodecache(void) |
diff --git a/fs/sysv/inode.c b/fs/sysv/inode.c index 3152d7415606..564411693394 100644 --- a/fs/sysv/inode.c +++ b/fs/sysv/inode.c | |||
| @@ -322,8 +322,7 @@ static void init_once(void *p, struct kmem_cache *cachep, unsigned long flags) | |||
| 322 | { | 322 | { |
| 323 | struct sysv_inode_info *si = (struct sysv_inode_info *)p; | 323 | struct sysv_inode_info *si = (struct sysv_inode_info *)p; |
| 324 | 324 | ||
| 325 | if (flags & SLAB_CTOR_CONSTRUCTOR) | 325 | inode_init_once(&si->vfs_inode); |
| 326 | inode_init_once(&si->vfs_inode); | ||
| 327 | } | 326 | } |
| 328 | 327 | ||
| 329 | const struct super_operations sysv_sops = { | 328 | const struct super_operations sysv_sops = { |
diff --git a/fs/udf/super.c b/fs/udf/super.c index 9b8644a06e53..3a743d854c17 100644 --- a/fs/udf/super.c +++ b/fs/udf/super.c | |||
| @@ -134,10 +134,8 @@ static void init_once(void * foo, struct kmem_cache * cachep, unsigned long flag | |||
| 134 | { | 134 | { |
| 135 | struct udf_inode_info *ei = (struct udf_inode_info *) foo; | 135 | struct udf_inode_info *ei = (struct udf_inode_info *) foo; |
| 136 | 136 | ||
| 137 | if (flags & SLAB_CTOR_CONSTRUCTOR) { | 137 | ei->i_ext.i_data = NULL; |
| 138 | ei->i_ext.i_data = NULL; | 138 | inode_init_once(&ei->vfs_inode); |
| 139 | inode_init_once(&ei->vfs_inode); | ||
| 140 | } | ||
| 141 | } | 139 | } |
| 142 | 140 | ||
| 143 | static int init_inodecache(void) | 141 | static int init_inodecache(void) |
diff --git a/fs/ufs/super.c b/fs/ufs/super.c index be7c48c5f203..22ff6ed55ce9 100644 --- a/fs/ufs/super.c +++ b/fs/ufs/super.c | |||
| @@ -1237,8 +1237,7 @@ static void init_once(void * foo, struct kmem_cache * cachep, unsigned long flag | |||
| 1237 | { | 1237 | { |
| 1238 | struct ufs_inode_info *ei = (struct ufs_inode_info *) foo; | 1238 | struct ufs_inode_info *ei = (struct ufs_inode_info *) foo; |
| 1239 | 1239 | ||
| 1240 | if (flags & SLAB_CTOR_CONSTRUCTOR) | 1240 | inode_init_once(&ei->vfs_inode); |
| 1241 | inode_init_once(&ei->vfs_inode); | ||
| 1242 | } | 1241 | } |
| 1243 | 1242 | ||
| 1244 | static int init_inodecache(void) | 1243 | static int init_inodecache(void) |
diff --git a/fs/xfs/linux-2.6/xfs_super.c b/fs/xfs/linux-2.6/xfs_super.c index 14e2cbe5a8d5..bf9a9d5909be 100644 --- a/fs/xfs/linux-2.6/xfs_super.c +++ b/fs/xfs/linux-2.6/xfs_super.c | |||
| @@ -360,8 +360,7 @@ xfs_fs_inode_init_once( | |||
| 360 | kmem_zone_t *zonep, | 360 | kmem_zone_t *zonep, |
| 361 | unsigned long flags) | 361 | unsigned long flags) |
| 362 | { | 362 | { |
| 363 | if (flags & SLAB_CTOR_CONSTRUCTOR) | 363 | inode_init_once(vn_to_inode((bhv_vnode_t *)vnode)); |
| 364 | inode_init_once(vn_to_inode((bhv_vnode_t *)vnode)); | ||
| 365 | } | 364 | } |
| 366 | 365 | ||
| 367 | STATIC int | 366 | STATIC int |
