• Dave Chinner's avatar
    xfs: can't use kmem_zalloc() for attribute buffers · 45ff8b47
    Dave Chinner authored
    Because heap allocation of 64kB buffers will fail:
    
    ....
     XFS: fs_mark(8414) possible memory allocation deadlock size 65768 in kmem_alloc (mode:0x2d40)
     XFS: fs_mark(8417) possible memory allocation deadlock size 65768 in kmem_alloc (mode:0x2d40)
     XFS: fs_mark(8409) possible memory allocation deadlock size 65768 in kmem_alloc (mode:0x2d40)
     XFS: fs_mark(8428) possible memory allocation deadlock size 65768 in kmem_alloc (mode:0x2d40)
     XFS: fs_mark(8430) possible memory allocation deadlock size 65768 in kmem_alloc (mode:0x2d40)
     XFS: fs_mark(8437) possible memory allocation deadlock size 65768 in kmem_alloc (mode:0x2d40)
     XFS: fs_mark(8433) possible memory allocation deadlock size 65768 in kmem_alloc (mode:0x2d40)
     XFS: fs_mark(8406) possible memory allocation deadlock size 65768 in kmem_alloc (mode:0x2d40)
     XFS: fs_mark(8412) possible memory allocation deadlock size 65768 in kmem_alloc (mode:0x2d40)
     XFS: fs_mark(8432) possible memory allocation deadlock size 65768 in kmem_alloc (mode:0x2d40)
     XFS: fs_mark(8424) possible memory allocation deadlock size 65768 in kmem_alloc (mode:0x2d40)
    ....
    
    I'd use kvmalloc() instead, but....
    
    - 48.19% xfs_attr_create_intent
      - 46.89% xfs_attri_init
         - kvmalloc_node
    	- 46.04% __kmalloc_node
    	   - kmalloc_large_node
    	      - 45.99% __alloc_pages
    		 - 39.39% __alloc_pages_slowpath.constprop.0
    		    - 38.89% __alloc_pages_direct_compact
    		       - 38.71% try_to_compact_pages
    			  - compact_zone_order
    			  - compact_zone
    			     - 21.09% isolate_migratepages_block
    				  10.31% PageHuge
    				  5.82% set_pfnblock_flags_mask
    				  0.86% get_pfnblock_flags_mask
    			     - 4.48% __reset_isolation_suitable
    				  4.44% __reset_isolation_pfn
    			     - 3.56% __pageblock_pfn_to_page
    				  1.33% pfn_to_online_page
    			       2.83% get_pfnblock_flags_mask
    			     - 0.87% migrate_pages
    				  0.86% compaction_alloc
    			       0.84% find_suitable_fallback
    		 - 6.60% get_page_from_freelist
    		      4.99% clear_page_erms
    		    - 1.19% _raw_spin_lock_irqsave
    		       - do_raw_spin_lock
    			    __pv_queued_spin_lock_slowpath
    	- 0.86% __vmalloc_node_range
    	     0.65% __alloc_pages_bulk
    
    .... this is just yet another reminder of how much kvmalloc() sucks.
    So lift xlog_cil_kvmalloc(), rename it to xlog_kvmalloc() and use
    that instead....
    
    We also clean up the attribute name and value lengths as they no
    longer need to be rounded out to sizes compatible with log vectors.
    Signed-off-by: default avatarDave Chinner <dchinner@redhat.com>
    Reviewed-by: default avatarAllison Henderson <allison.henderson@oracle.com>
    Reviewed-by: default avatarDarrick J. Wong <djwong@kernel.org>
    Signed-off-by: default avatarDave Chinner <david@fromorbit.com>
    45ff8b47
xfs_log_priv.h 25.3 KB