diff options
| author | Nathan Scott <nathans@sgi.com> | 2006-03-13 21:18:19 -0500 |
|---|---|---|
| committer | Nathan Scott <nathans@sgi.com> | 2006-03-13 21:18:19 -0500 |
| commit | 8758280fcc6129be89503efe93bb59eaf2f85d28 (patch) | |
| tree | 395246120b571385c1f3efad773b83a932d008da | |
| parent | 8d280b98cfe3c0b69c37d355218975c1c0279bb0 (diff) | |
[XFS] Cleanup the use of zones/slabs, more consistent and allows flags to
be passed.
SGI-PV: 949073
SGI-Modid: xfs-linux-melb:xfs-kern:25122a
Signed-off-by: Nathan Scott <nathans@sgi.com>
| -rw-r--r-- | fs/xfs/linux-2.6/kmem.h | 91 | ||||
| -rw-r--r-- | fs/xfs/linux-2.6/xfs_buf.c | 7 | ||||
| -rw-r--r-- | fs/xfs/linux-2.6/xfs_super.c | 38 | ||||
| -rw-r--r-- | fs/xfs/xfs_trans.h | 2 | ||||
| -rw-r--r-- | fs/xfs/xfs_vfsops.c | 34 |
5 files changed, 100 insertions, 72 deletions
diff --git a/fs/xfs/linux-2.6/kmem.h b/fs/xfs/linux-2.6/kmem.h index c64a29cdfff3..f0268a84e6fd 100644 --- a/fs/xfs/linux-2.6/kmem.h +++ b/fs/xfs/linux-2.6/kmem.h | |||
| @@ -23,17 +23,8 @@ | |||
| 23 | #include <linux/mm.h> | 23 | #include <linux/mm.h> |
| 24 | 24 | ||
| 25 | /* | 25 | /* |
| 26 | * memory management routines | 26 | * Process flags handling |
| 27 | */ | 27 | */ |
| 28 | #define KM_SLEEP 0x0001u | ||
| 29 | #define KM_NOSLEEP 0x0002u | ||
| 30 | #define KM_NOFS 0x0004u | ||
| 31 | #define KM_MAYFAIL 0x0008u | ||
| 32 | |||
| 33 | #define kmem_zone kmem_cache | ||
| 34 | #define kmem_zone_t struct kmem_cache | ||
| 35 | |||
| 36 | typedef unsigned long xfs_pflags_t; | ||
| 37 | 28 | ||
| 38 | #define PFLAGS_TEST_NOIO() (current->flags & PF_NOIO) | 29 | #define PFLAGS_TEST_NOIO() (current->flags & PF_NOIO) |
| 39 | #define PFLAGS_TEST_FSTRANS() (current->flags & PF_FSTRANS) | 30 | #define PFLAGS_TEST_FSTRANS() (current->flags & PF_FSTRANS) |
| @@ -67,74 +58,102 @@ typedef unsigned long xfs_pflags_t; | |||
| 67 | *(NSTATEP) = *(OSTATEP); \ | 58 | *(NSTATEP) = *(OSTATEP); \ |
| 68 | } while (0) | 59 | } while (0) |
| 69 | 60 | ||
| 70 | static __inline gfp_t kmem_flags_convert(unsigned int __nocast flags) | 61 | /* |
| 62 | * General memory allocation interfaces | ||
| 63 | */ | ||
| 64 | |||
| 65 | #define KM_SLEEP 0x0001u | ||
| 66 | #define KM_NOSLEEP 0x0002u | ||
| 67 | #define KM_NOFS 0x0004u | ||
| 68 | #define KM_MAYFAIL 0x0008u | ||
| 69 | |||
| 70 | /* | ||
| 71 | * We use a special process flag to avoid recursive callbacks into | ||
| 72 | * the filesystem during transactions. We will also issue our own | ||
| 73 | * warnings, so we explicitly skip any generic ones (silly of us). | ||
| 74 | */ | ||
| 75 | static inline gfp_t | ||
| 76 | kmem_flags_convert(unsigned int __nocast flags) | ||
| 71 | { | 77 | { |
| 72 | gfp_t lflags = __GFP_NOWARN; /* we'll report problems, if need be */ | 78 | gfp_t lflags; |
| 73 | 79 | ||
| 74 | #ifdef DEBUG | 80 | BUG_ON(flags & ~(KM_SLEEP|KM_NOSLEEP|KM_NOFS|KM_MAYFAIL)); |
| 75 | if (unlikely(flags & ~(KM_SLEEP|KM_NOSLEEP|KM_NOFS|KM_MAYFAIL))) { | ||
| 76 | printk(KERN_WARNING | ||
| 77 | "XFS: memory allocation with wrong flags (%x)\n", flags); | ||
| 78 | BUG(); | ||
| 79 | } | ||
| 80 | #endif | ||
| 81 | 81 | ||
| 82 | if (flags & KM_NOSLEEP) { | 82 | if (flags & KM_NOSLEEP) { |
| 83 | lflags |= GFP_ATOMIC; | 83 | lflags = GFP_ATOMIC | __GFP_NOWARN; |
| 84 | } else { | 84 | } else { |
| 85 | lflags |= GFP_KERNEL; | 85 | lflags = GFP_KERNEL | __GFP_NOWARN; |
| 86 | |||
| 87 | /* avoid recusive callbacks to filesystem during transactions */ | ||
| 88 | if (PFLAGS_TEST_FSTRANS() || (flags & KM_NOFS)) | 86 | if (PFLAGS_TEST_FSTRANS() || (flags & KM_NOFS)) |
| 89 | lflags &= ~__GFP_FS; | 87 | lflags &= ~__GFP_FS; |
| 90 | } | 88 | } |
| 91 | 89 | return lflags; | |
| 92 | return lflags; | ||
| 93 | } | 90 | } |
| 94 | 91 | ||
| 95 | static __inline kmem_zone_t * | 92 | extern void *kmem_alloc(size_t, unsigned int __nocast); |
| 93 | extern void *kmem_realloc(void *, size_t, size_t, unsigned int __nocast); | ||
| 94 | extern void *kmem_zalloc(size_t, unsigned int __nocast); | ||
| 95 | extern void kmem_free(void *, size_t); | ||
| 96 | |||
| 97 | /* | ||
| 98 | * Zone interfaces | ||
| 99 | */ | ||
| 100 | |||
| 101 | #define KM_ZONE_HWALIGN SLAB_HWCACHE_ALIGN | ||
| 102 | #define KM_ZONE_RECLAIM SLAB_RECLAIM_ACCOUNT | ||
| 103 | #define KM_ZONE_SPREAD 0 | ||
| 104 | |||
| 105 | #define kmem_zone kmem_cache | ||
| 106 | #define kmem_zone_t struct kmem_cache | ||
| 107 | |||
| 108 | static inline kmem_zone_t * | ||
| 96 | kmem_zone_init(int size, char *zone_name) | 109 | kmem_zone_init(int size, char *zone_name) |
| 97 | { | 110 | { |
| 98 | return kmem_cache_create(zone_name, size, 0, 0, NULL, NULL); | 111 | return kmem_cache_create(zone_name, size, 0, 0, NULL, NULL); |
| 99 | } | 112 | } |
| 100 | 113 | ||
| 101 | static __inline void | 114 | static inline kmem_zone_t * |
| 115 | kmem_zone_init_flags(int size, char *zone_name, unsigned long flags, | ||
| 116 | void (*construct)(void *, kmem_zone_t *, unsigned long)) | ||
| 117 | { | ||
| 118 | return kmem_cache_create(zone_name, size, 0, flags, construct, NULL); | ||
| 119 | } | ||
| 120 | |||
| 121 | static inline void | ||
| 102 | kmem_zone_free(kmem_zone_t *zone, void *ptr) | 122 | kmem_zone_free(kmem_zone_t *zone, void *ptr) |
| 103 | { | 123 | { |
| 104 | kmem_cache_free(zone, ptr); | 124 | kmem_cache_free(zone, ptr); |
| 105 | } | 125 | } |
| 106 | 126 | ||
| 107 | static __inline void | 127 | static inline void |
| 108 | kmem_zone_destroy(kmem_zone_t *zone) | 128 | kmem_zone_destroy(kmem_zone_t *zone) |
| 109 | { | 129 | { |
| 110 | if (zone && kmem_cache_destroy(zone)) | 130 | if (zone && kmem_cache_destroy(zone)) |
| 111 | BUG(); | 131 | BUG(); |
| 112 | } | 132 | } |
| 113 | 133 | ||
| 114 | extern void *kmem_zone_zalloc(kmem_zone_t *, unsigned int __nocast); | ||
| 115 | extern void *kmem_zone_alloc(kmem_zone_t *, unsigned int __nocast); | 134 | extern void *kmem_zone_alloc(kmem_zone_t *, unsigned int __nocast); |
| 135 | extern void *kmem_zone_zalloc(kmem_zone_t *, unsigned int __nocast); | ||
| 116 | 136 | ||
| 117 | extern void *kmem_alloc(size_t, unsigned int __nocast); | 137 | /* |
| 118 | extern void *kmem_realloc(void *, size_t, size_t, unsigned int __nocast); | 138 | * Low memory cache shrinkers |
| 119 | extern void *kmem_zalloc(size_t, unsigned int __nocast); | 139 | */ |
| 120 | extern void kmem_free(void *, size_t); | ||
| 121 | 140 | ||
| 122 | typedef struct shrinker *kmem_shaker_t; | 141 | typedef struct shrinker *kmem_shaker_t; |
| 123 | typedef int (*kmem_shake_func_t)(int, gfp_t); | 142 | typedef int (*kmem_shake_func_t)(int, gfp_t); |
| 124 | 143 | ||
| 125 | static __inline kmem_shaker_t | 144 | static inline kmem_shaker_t |
| 126 | kmem_shake_register(kmem_shake_func_t sfunc) | 145 | kmem_shake_register(kmem_shake_func_t sfunc) |
| 127 | { | 146 | { |
| 128 | return set_shrinker(DEFAULT_SEEKS, sfunc); | 147 | return set_shrinker(DEFAULT_SEEKS, sfunc); |
| 129 | } | 148 | } |
| 130 | 149 | ||
| 131 | static __inline void | 150 | static inline void |
| 132 | kmem_shake_deregister(kmem_shaker_t shrinker) | 151 | kmem_shake_deregister(kmem_shaker_t shrinker) |
| 133 | { | 152 | { |
| 134 | remove_shrinker(shrinker); | 153 | remove_shrinker(shrinker); |
| 135 | } | 154 | } |
| 136 | 155 | ||
| 137 | static __inline int | 156 | static inline int |
| 138 | kmem_shake_allow(gfp_t gfp_mask) | 157 | kmem_shake_allow(gfp_t gfp_mask) |
| 139 | { | 158 | { |
| 140 | return (gfp_mask & __GFP_WAIT); | 159 | return (gfp_mask & __GFP_WAIT); |
diff --git a/fs/xfs/linux-2.6/xfs_buf.c b/fs/xfs/linux-2.6/xfs_buf.c index bfb4f2917bb6..cdb905ab4dba 100644 --- a/fs/xfs/linux-2.6/xfs_buf.c +++ b/fs/xfs/linux-2.6/xfs_buf.c | |||
| @@ -1805,13 +1805,12 @@ xfs_flush_buftarg( | |||
| 1805 | int __init | 1805 | int __init |
| 1806 | xfs_buf_init(void) | 1806 | xfs_buf_init(void) |
| 1807 | { | 1807 | { |
| 1808 | int error = -ENOMEM; | ||
| 1809 | |||
| 1810 | #ifdef XFS_BUF_TRACE | 1808 | #ifdef XFS_BUF_TRACE |
| 1811 | xfs_buf_trace_buf = ktrace_alloc(XFS_BUF_TRACE_SIZE, KM_SLEEP); | 1809 | xfs_buf_trace_buf = ktrace_alloc(XFS_BUF_TRACE_SIZE, KM_SLEEP); |
| 1812 | #endif | 1810 | #endif |
| 1813 | 1811 | ||
| 1814 | xfs_buf_zone = kmem_zone_init(sizeof(xfs_buf_t), "xfs_buf"); | 1812 | xfs_buf_zone = kmem_zone_init_flags(sizeof(xfs_buf_t), "xfs_buf", |
| 1813 | KM_ZONE_HWALIGN, NULL); | ||
| 1815 | if (!xfs_buf_zone) | 1814 | if (!xfs_buf_zone) |
| 1816 | goto out_free_trace_buf; | 1815 | goto out_free_trace_buf; |
| 1817 | 1816 | ||
| @@ -1839,7 +1838,7 @@ xfs_buf_init(void) | |||
| 1839 | #ifdef XFS_BUF_TRACE | 1838 | #ifdef XFS_BUF_TRACE |
| 1840 | ktrace_free(xfs_buf_trace_buf); | 1839 | ktrace_free(xfs_buf_trace_buf); |
| 1841 | #endif | 1840 | #endif |
| 1842 | return error; | 1841 | return -ENOMEM; |
| 1843 | } | 1842 | } |
| 1844 | 1843 | ||
| 1845 | void | 1844 | void |
diff --git a/fs/xfs/linux-2.6/xfs_super.c b/fs/xfs/linux-2.6/xfs_super.c index 59989f6f83ef..0c7ed4b29c54 100644 --- a/fs/xfs/linux-2.6/xfs_super.c +++ b/fs/xfs/linux-2.6/xfs_super.c | |||
| @@ -337,8 +337,8 @@ linvfs_alloc_inode( | |||
| 337 | { | 337 | { |
| 338 | vnode_t *vp; | 338 | vnode_t *vp; |
| 339 | 339 | ||
| 340 | vp = kmem_cache_alloc(xfs_vnode_zone, kmem_flags_convert(KM_SLEEP)); | 340 | vp = kmem_zone_alloc(xfs_vnode_zone, KM_SLEEP); |
| 341 | if (!vp) | 341 | if (unlikely(!vp)) |
| 342 | return NULL; | 342 | return NULL; |
| 343 | return LINVFS_GET_IP(vp); | 343 | return LINVFS_GET_IP(vp); |
| 344 | } | 344 | } |
| @@ -352,23 +352,21 @@ linvfs_destroy_inode( | |||
| 352 | 352 | ||
| 353 | STATIC void | 353 | STATIC void |
| 354 | linvfs_inode_init_once( | 354 | linvfs_inode_init_once( |
| 355 | void *data, | 355 | void *vnode, |
| 356 | kmem_cache_t *cachep, | 356 | kmem_zone_t *zonep, |
| 357 | unsigned long flags) | 357 | unsigned long flags) |
| 358 | { | 358 | { |
| 359 | vnode_t *vp = (vnode_t *)data; | ||
| 360 | |||
| 361 | if ((flags & (SLAB_CTOR_VERIFY|SLAB_CTOR_CONSTRUCTOR)) == | 359 | if ((flags & (SLAB_CTOR_VERIFY|SLAB_CTOR_CONSTRUCTOR)) == |
| 362 | SLAB_CTOR_CONSTRUCTOR) | 360 | SLAB_CTOR_CONSTRUCTOR) |
| 363 | inode_init_once(LINVFS_GET_IP(vp)); | 361 | inode_init_once(LINVFS_GET_IP((vnode_t *)vnode)); |
| 364 | } | 362 | } |
| 365 | 363 | ||
| 366 | STATIC int | 364 | STATIC int |
| 367 | linvfs_init_zones(void) | 365 | xfs_init_zones(void) |
| 368 | { | 366 | { |
| 369 | xfs_vnode_zone = kmem_cache_create("xfs_vnode", | 367 | xfs_vnode_zone = kmem_zone_init_flags(sizeof(vnode_t), "xfs_vnode_t", |
| 370 | sizeof(vnode_t), 0, SLAB_RECLAIM_ACCOUNT, | 368 | KM_ZONE_HWALIGN | KM_ZONE_RECLAIM, |
| 371 | linvfs_inode_init_once, NULL); | 369 | linvfs_inode_init_once); |
| 372 | if (!xfs_vnode_zone) | 370 | if (!xfs_vnode_zone) |
| 373 | goto out; | 371 | goto out; |
| 374 | 372 | ||
| @@ -377,14 +375,12 @@ linvfs_init_zones(void) | |||
| 377 | goto out_destroy_vnode_zone; | 375 | goto out_destroy_vnode_zone; |
| 378 | 376 | ||
| 379 | xfs_ioend_pool = mempool_create(4 * MAX_BUF_PER_PAGE, | 377 | xfs_ioend_pool = mempool_create(4 * MAX_BUF_PER_PAGE, |
| 380 | mempool_alloc_slab, mempool_free_slab, | 378 | mempool_alloc_slab, mempool_free_slab, |
| 381 | xfs_ioend_zone); | 379 | xfs_ioend_zone); |
| 382 | if (!xfs_ioend_pool) | 380 | if (!xfs_ioend_pool) |
| 383 | goto out_free_ioend_zone; | 381 | goto out_free_ioend_zone; |
| 384 | |||
| 385 | return 0; | 382 | return 0; |
| 386 | 383 | ||
| 387 | |||
| 388 | out_free_ioend_zone: | 384 | out_free_ioend_zone: |
| 389 | kmem_zone_destroy(xfs_ioend_zone); | 385 | kmem_zone_destroy(xfs_ioend_zone); |
| 390 | out_destroy_vnode_zone: | 386 | out_destroy_vnode_zone: |
| @@ -394,7 +390,7 @@ linvfs_init_zones(void) | |||
| 394 | } | 390 | } |
| 395 | 391 | ||
| 396 | STATIC void | 392 | STATIC void |
| 397 | linvfs_destroy_zones(void) | 393 | xfs_destroy_zones(void) |
| 398 | { | 394 | { |
| 399 | mempool_destroy(xfs_ioend_pool); | 395 | mempool_destroy(xfs_ioend_pool); |
| 400 | kmem_zone_destroy(xfs_vnode_zone); | 396 | kmem_zone_destroy(xfs_vnode_zone); |
| @@ -405,7 +401,7 @@ linvfs_destroy_zones(void) | |||
| 405 | * Attempt to flush the inode, this will actually fail | 401 | * Attempt to flush the inode, this will actually fail |
| 406 | * if the inode is pinned, but we dirty the inode again | 402 | * if the inode is pinned, but we dirty the inode again |
| 407 | * at the point when it is unpinned after a log write, | 403 | * at the point when it is unpinned after a log write, |
| 408 | * since this is when the inode itself becomes flushable. | 404 | * since this is when the inode itself becomes flushable. |
| 409 | */ | 405 | */ |
| 410 | STATIC int | 406 | STATIC int |
| 411 | linvfs_write_inode( | 407 | linvfs_write_inode( |
| @@ -963,7 +959,7 @@ init_xfs_fs( void ) | |||
| 963 | 959 | ||
| 964 | ktrace_init(64); | 960 | ktrace_init(64); |
| 965 | 961 | ||
| 966 | error = linvfs_init_zones(); | 962 | error = xfs_init_zones(); |
| 967 | if (error < 0) | 963 | if (error < 0) |
| 968 | goto undo_zones; | 964 | goto undo_zones; |
| 969 | 965 | ||
| @@ -986,7 +982,7 @@ undo_register: | |||
| 986 | xfs_buf_terminate(); | 982 | xfs_buf_terminate(); |
| 987 | 983 | ||
| 988 | undo_buffers: | 984 | undo_buffers: |
| 989 | linvfs_destroy_zones(); | 985 | xfs_destroy_zones(); |
| 990 | 986 | ||
| 991 | undo_zones: | 987 | undo_zones: |
| 992 | return error; | 988 | return error; |
| @@ -1000,7 +996,7 @@ exit_xfs_fs( void ) | |||
| 1000 | unregister_filesystem(&xfs_fs_type); | 996 | unregister_filesystem(&xfs_fs_type); |
| 1001 | xfs_cleanup(); | 997 | xfs_cleanup(); |
| 1002 | xfs_buf_terminate(); | 998 | xfs_buf_terminate(); |
| 1003 | linvfs_destroy_zones(); | 999 | xfs_destroy_zones(); |
| 1004 | ktrace_uninit(); | 1000 | ktrace_uninit(); |
| 1005 | } | 1001 | } |
| 1006 | 1002 | ||
diff --git a/fs/xfs/xfs_trans.h b/fs/xfs/xfs_trans.h index d77901c07f63..e48befa4e337 100644 --- a/fs/xfs/xfs_trans.h +++ b/fs/xfs/xfs_trans.h | |||
| @@ -380,7 +380,7 @@ typedef struct xfs_trans { | |||
| 380 | xfs_trans_header_t t_header; /* header for in-log trans */ | 380 | xfs_trans_header_t t_header; /* header for in-log trans */ |
| 381 | unsigned int t_busy_free; /* busy descs free */ | 381 | unsigned int t_busy_free; /* busy descs free */ |
| 382 | xfs_log_busy_chunk_t t_busy; /* busy/async free blocks */ | 382 | xfs_log_busy_chunk_t t_busy; /* busy/async free blocks */ |
| 383 | xfs_pflags_t t_pflags; /* saved pflags state */ | 383 | unsigned long t_pflags; /* saved process flags state */ |
| 384 | } xfs_trans_t; | 384 | } xfs_trans_t; |
| 385 | 385 | ||
| 386 | #endif /* __KERNEL__ */ | 386 | #endif /* __KERNEL__ */ |
diff --git a/fs/xfs/xfs_vfsops.c b/fs/xfs/xfs_vfsops.c index 2e1045837881..5dd84fe609cc 100644 --- a/fs/xfs/xfs_vfsops.c +++ b/fs/xfs/xfs_vfsops.c | |||
| @@ -77,11 +77,12 @@ xfs_init(void) | |||
| 77 | "xfs_bmap_free_item"); | 77 | "xfs_bmap_free_item"); |
| 78 | xfs_btree_cur_zone = kmem_zone_init(sizeof(xfs_btree_cur_t), | 78 | xfs_btree_cur_zone = kmem_zone_init(sizeof(xfs_btree_cur_t), |
| 79 | "xfs_btree_cur"); | 79 | "xfs_btree_cur"); |
| 80 | xfs_inode_zone = kmem_zone_init(sizeof(xfs_inode_t), "xfs_inode"); | ||
| 81 | xfs_trans_zone = kmem_zone_init(sizeof(xfs_trans_t), "xfs_trans"); | 80 | xfs_trans_zone = kmem_zone_init(sizeof(xfs_trans_t), "xfs_trans"); |
| 82 | xfs_da_state_zone = | 81 | xfs_da_state_zone = |
| 83 | kmem_zone_init(sizeof(xfs_da_state_t), "xfs_da_state"); | 82 | kmem_zone_init(sizeof(xfs_da_state_t), "xfs_da_state"); |
| 84 | xfs_dabuf_zone = kmem_zone_init(sizeof(xfs_dabuf_t), "xfs_dabuf"); | 83 | xfs_dabuf_zone = kmem_zone_init(sizeof(xfs_dabuf_t), "xfs_dabuf"); |
| 84 | xfs_ifork_zone = kmem_zone_init(sizeof(xfs_ifork_t), "xfs_ifork"); | ||
| 85 | xfs_acl_zone_init(xfs_acl_zone, "xfs_acl"); | ||
| 85 | 86 | ||
| 86 | /* | 87 | /* |
| 87 | * The size of the zone allocated buf log item is the maximum | 88 | * The size of the zone allocated buf log item is the maximum |
| @@ -93,17 +94,30 @@ xfs_init(void) | |||
| 93 | (((XFS_MAX_BLOCKSIZE / XFS_BLI_CHUNK) / | 94 | (((XFS_MAX_BLOCKSIZE / XFS_BLI_CHUNK) / |
| 94 | NBWORD) * sizeof(int))), | 95 | NBWORD) * sizeof(int))), |
| 95 | "xfs_buf_item"); | 96 | "xfs_buf_item"); |
| 96 | xfs_efd_zone = kmem_zone_init((sizeof(xfs_efd_log_item_t) + | 97 | xfs_efd_zone = |
| 97 | ((XFS_EFD_MAX_FAST_EXTENTS - 1) * sizeof(xfs_extent_t))), | 98 | kmem_zone_init((sizeof(xfs_efd_log_item_t) + |
| 99 | ((XFS_EFD_MAX_FAST_EXTENTS - 1) * | ||
| 100 | sizeof(xfs_extent_t))), | ||
| 98 | "xfs_efd_item"); | 101 | "xfs_efd_item"); |
| 99 | xfs_efi_zone = kmem_zone_init((sizeof(xfs_efi_log_item_t) + | 102 | xfs_efi_zone = |
| 100 | ((XFS_EFI_MAX_FAST_EXTENTS - 1) * sizeof(xfs_extent_t))), | 103 | kmem_zone_init((sizeof(xfs_efi_log_item_t) + |
| 104 | ((XFS_EFI_MAX_FAST_EXTENTS - 1) * | ||
| 105 | sizeof(xfs_extent_t))), | ||
| 101 | "xfs_efi_item"); | 106 | "xfs_efi_item"); |
| 102 | xfs_ifork_zone = kmem_zone_init(sizeof(xfs_ifork_t), "xfs_ifork"); | 107 | |
| 103 | xfs_ili_zone = kmem_zone_init(sizeof(xfs_inode_log_item_t), "xfs_ili"); | 108 | /* |
| 104 | xfs_chashlist_zone = kmem_zone_init(sizeof(xfs_chashlist_t), | 109 | * These zones warrant special memory allocator hints |
| 105 | "xfs_chashlist"); | 110 | */ |
| 106 | xfs_acl_zone_init(xfs_acl_zone, "xfs_acl"); | 111 | xfs_inode_zone = |
| 112 | kmem_zone_init_flags(sizeof(xfs_inode_t), "xfs_inode", | ||
| 113 | KM_ZONE_HWALIGN | KM_ZONE_RECLAIM | | ||
| 114 | KM_ZONE_SPREAD, NULL); | ||
| 115 | xfs_ili_zone = | ||
| 116 | kmem_zone_init_flags(sizeof(xfs_inode_log_item_t), "xfs_ili", | ||
| 117 | KM_ZONE_SPREAD, NULL); | ||
| 118 | xfs_chashlist_zone = | ||
| 119 | kmem_zone_init_flags(sizeof(xfs_chashlist_t), "xfs_chashlist", | ||
| 120 | KM_ZONE_SPREAD, NULL); | ||
| 107 | 121 | ||
| 108 | /* | 122 | /* |
| 109 | * Allocate global trace buffers. | 123 | * Allocate global trace buffers. |
