Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

fs: kill BDI_CAP_SWAP_BACKED

This bdi flag isn't too useful - we can determine that a vma is backed by
either swap or shmem trivially in the caller.

This also allows removing the backing_dev_info instaces for swap and shmem
in favor of noop_backing_dev_info.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Tejun Heo <tj@kernel.org>
Reviewed-by: Jan Kara <jack@suse.cz>
Signed-off-by: Jens Axboe <axboe@fb.com>

authored by

Christoph Hellwig and committed by
Jens Axboe
97b713ba a7a2c680

+18 -46
-13
include/linux/backing-dev.h
··· 238 238 * BDI_CAP_WRITE_MAP: Can be mapped for writing 239 239 * BDI_CAP_EXEC_MAP: Can be mapped for execution 240 240 * 241 - * BDI_CAP_SWAP_BACKED: Count shmem/tmpfs objects as swap-backed. 242 - * 243 241 * BDI_CAP_STRICTLIMIT: Keep number of dirty pages below bdi threshold. 244 242 */ 245 243 #define BDI_CAP_NO_ACCT_DIRTY 0x00000001 ··· 248 250 #define BDI_CAP_WRITE_MAP 0x00000020 249 251 #define BDI_CAP_EXEC_MAP 0x00000040 250 252 #define BDI_CAP_NO_ACCT_WB 0x00000080 251 - #define BDI_CAP_SWAP_BACKED 0x00000100 252 253 #define BDI_CAP_STABLE_WRITES 0x00000200 253 254 #define BDI_CAP_STRICTLIMIT 0x00000400 254 255 ··· 326 329 BDI_CAP_NO_WRITEBACK)); 327 330 } 328 331 329 - static inline bool bdi_cap_swap_backed(struct backing_dev_info *bdi) 330 - { 331 - return bdi->capabilities & BDI_CAP_SWAP_BACKED; 332 - } 333 - 334 332 static inline bool mapping_cap_writeback_dirty(struct address_space *mapping) 335 333 { 336 334 return bdi_cap_writeback_dirty(mapping->backing_dev_info); ··· 334 342 static inline bool mapping_cap_account_dirty(struct address_space *mapping) 335 343 { 336 344 return bdi_cap_account_dirty(mapping->backing_dev_info); 337 - } 338 - 339 - static inline bool mapping_cap_swap_backed(struct address_space *mapping) 340 - { 341 - return bdi_cap_swap_backed(mapping->backing_dev_info); 342 345 } 343 346 344 347 static inline int bdi_sched_wait(void *word)
+10 -7
mm/madvise.c
··· 222 222 struct file *file = vma->vm_file; 223 223 224 224 #ifdef CONFIG_SWAP 225 - if (!file || mapping_cap_swap_backed(file->f_mapping)) { 225 + if (!file) { 226 226 *prev = vma; 227 - if (!file) 228 - force_swapin_readahead(vma, start, end); 229 - else 230 - force_shm_swapin_readahead(vma, start, end, 231 - file->f_mapping); 227 + force_swapin_readahead(vma, start, end); 232 228 return 0; 233 229 } 234 - #endif 235 230 231 + if (shmem_mapping(file->f_mapping)) { 232 + *prev = vma; 233 + force_shm_swapin_readahead(vma, start, end, 234 + file->f_mapping); 235 + return 0; 236 + } 237 + #else 236 238 if (!file) 237 239 return -EBADF; 240 + #endif 238 241 239 242 if (file->f_mapping->a_ops->get_xip_mem) { 240 243 /* no bad return value, but ignore advice */
+7 -18
mm/shmem.c
··· 191 191 static const struct inode_operations shmem_special_inode_operations; 192 192 static const struct vm_operations_struct shmem_vm_ops; 193 193 194 - static struct backing_dev_info shmem_backing_dev_info __read_mostly = { 195 - .ra_pages = 0, /* No readahead */ 196 - .capabilities = BDI_CAP_NO_ACCT_AND_WRITEBACK | BDI_CAP_SWAP_BACKED, 197 - }; 198 - 199 194 static LIST_HEAD(shmem_swaplist); 200 195 static DEFINE_MUTEX(shmem_swaplist_mutex); 201 196 ··· 760 765 goto redirty; 761 766 762 767 /* 763 - * shmem_backing_dev_info's capabilities prevent regular writeback or 764 - * sync from ever calling shmem_writepage; but a stacking filesystem 765 - * might use ->writepage of its underlying filesystem, in which case 766 - * tmpfs should write out to swap only in response to memory pressure, 767 - * and not for the writeback threads or sync. 768 + * Our capabilities prevent regular writeback or sync from ever calling 769 + * shmem_writepage; but a stacking filesystem might use ->writepage of 770 + * its underlying filesystem, in which case tmpfs should write out to 771 + * swap only in response to memory pressure, and not for the writeback 772 + * threads or sync. 768 773 */ 769 774 if (!wbc->for_reclaim) { 770 775 WARN_ON_ONCE(1); /* Still happens? Tell us about it! */ ··· 1410 1415 inode->i_ino = get_next_ino(); 1411 1416 inode_init_owner(inode, dir, mode); 1412 1417 inode->i_blocks = 0; 1413 - inode->i_mapping->backing_dev_info = &shmem_backing_dev_info; 1418 + inode->i_mapping->backing_dev_info = &noop_backing_dev_info; 1414 1419 inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; 1415 1420 inode->i_generation = get_seconds(); 1416 1421 info = SHMEM_I(inode); ··· 1456 1461 1457 1462 bool shmem_mapping(struct address_space *mapping) 1458 1463 { 1459 - return mapping->backing_dev_info == &shmem_backing_dev_info; 1464 + return mapping->host->i_sb->s_op == &shmem_ops; 1460 1465 } 1461 1466 1462 1467 #ifdef CONFIG_TMPFS ··· 3221 3226 if (shmem_inode_cachep) 3222 3227 return 0; 3223 3228 3224 - error = bdi_init(&shmem_backing_dev_info); 3225 - if (error) 3226 - goto out4; 3227 - 3228 3229 error = shmem_init_inodecache(); 3229 3230 if (error) 3230 3231 goto out3; ··· 3244 3253 out2: 3245 3254 shmem_destroy_inodecache(); 3246 3255 out3: 3247 - bdi_destroy(&shmem_backing_dev_info); 3248 - out4: 3249 3256 shm_mnt = ERR_PTR(error); 3250 3257 return error; 3251 3258 }
-2
mm/swap.c
··· 1138 1138 #ifdef CONFIG_SWAP 1139 1139 int i; 1140 1140 1141 - if (bdi_init(swapper_spaces[0].backing_dev_info)) 1142 - panic("Failed to init swap bdi"); 1143 1141 for (i = 0; i < MAX_SWAPFILES; i++) { 1144 1142 spin_lock_init(&swapper_spaces[i].tree_lock); 1145 1143 INIT_LIST_HEAD(&swapper_spaces[i].i_mmap_nonlinear);
+1 -6
mm/swap_state.c
··· 32 32 #endif 33 33 }; 34 34 35 - static struct backing_dev_info swap_backing_dev_info = { 36 - .name = "swap", 37 - .capabilities = BDI_CAP_NO_ACCT_AND_WRITEBACK | BDI_CAP_SWAP_BACKED, 38 - }; 39 - 40 35 struct address_space swapper_spaces[MAX_SWAPFILES] = { 41 36 [0 ... MAX_SWAPFILES - 1] = { 42 37 .page_tree = RADIX_TREE_INIT(GFP_ATOMIC|__GFP_NOWARN), 43 38 .i_mmap_writable = ATOMIC_INIT(0), 44 39 .a_ops = &swap_aops, 45 - .backing_dev_info = &swap_backing_dev_info, 40 + .backing_dev_info = &noop_backing_dev_info, 46 41 } 47 42 }; 48 43