dir.c (b2efb3f0a1db62aff5e824125785ec6731143b6d) | dir.c (a7ffdbe22cecaed59b5d76a5f003d68907d64240) |
---|---|
1/* 2 * fs/f2fs/dir.c 3 * 4 * Copyright (c) 2012 Samsung Electronics Co., Ltd. 5 * http://www.samsung.com/ 6 * 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License version 2 as --- 112 unchanged lines hidden (view full) --- 121 *max_slots = max_len; 122 max_len = 0; 123 } 124 125 /* 126 * For the most part, it should be a bug when name_len is zero. 127 * We stop here for figuring out where the bugs has occurred. 128 */ | 1/* 2 * fs/f2fs/dir.c 3 * 4 * Copyright (c) 2012 Samsung Electronics Co., Ltd. 5 * http://www.samsung.com/ 6 * 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License version 2 as --- 112 unchanged lines hidden (view full) --- 121 *max_slots = max_len; 122 max_len = 0; 123 } 124 125 /* 126 * For the most part, it should be a bug when name_len is zero. 127 * We stop here for figuring out where the bugs has occurred. 128 */ |
129 f2fs_bug_on(!de->name_len); | 129 f2fs_bug_on(F2FS_P_SB(dentry_page), !de->name_len); |
130 131 bit_pos += GET_DENTRY_SLOTS(le16_to_cpu(de->name_len)); 132 } 133 134 de = NULL; 135 kunmap(dentry_page); 136found: 137 if (max_len > *max_slots) --- 8 unchanged lines hidden (view full) --- 146 int s = GET_DENTRY_SLOTS(name->len); 147 unsigned int nbucket, nblock; 148 unsigned int bidx, end_block; 149 struct page *dentry_page; 150 struct f2fs_dir_entry *de = NULL; 151 bool room = false; 152 int max_slots = 0; 153 | 130 131 bit_pos += GET_DENTRY_SLOTS(le16_to_cpu(de->name_len)); 132 } 133 134 de = NULL; 135 kunmap(dentry_page); 136found: 137 if (max_len > *max_slots) --- 8 unchanged lines hidden (view full) --- 146 int s = GET_DENTRY_SLOTS(name->len); 147 unsigned int nbucket, nblock; 148 unsigned int bidx, end_block; 149 struct page *dentry_page; 150 struct f2fs_dir_entry *de = NULL; 151 bool room = false; 152 int max_slots = 0; 153 |
154 f2fs_bug_on(level > MAX_DIR_HASH_DEPTH); | 154 f2fs_bug_on(F2FS_I_SB(dir), level > MAX_DIR_HASH_DEPTH); |
155 156 nbucket = dir_buckets(level, F2FS_I(dir)->i_dir_level); 157 nblock = bucket_blocks(level); 158 159 bidx = dir_block_index(level, F2FS_I(dir)->i_dir_level, 160 le32_to_cpu(namehash) % nbucket); 161 end_block = bidx + nblock; 162 --- 116 unchanged lines hidden (view full) --- 279 ri = F2FS_INODE(ipage); 280 ri->i_namelen = cpu_to_le32(name->len); 281 memcpy(ri->i_name, name->name, name->len); 282 set_page_dirty(ipage); 283} 284 285int update_dent_inode(struct inode *inode, const struct qstr *name) 286{ | 155 156 nbucket = dir_buckets(level, F2FS_I(dir)->i_dir_level); 157 nblock = bucket_blocks(level); 158 159 bidx = dir_block_index(level, F2FS_I(dir)->i_dir_level, 160 le32_to_cpu(namehash) % nbucket); 161 end_block = bidx + nblock; 162 --- 116 unchanged lines hidden (view full) --- 279 ri = F2FS_INODE(ipage); 280 ri->i_namelen = cpu_to_le32(name->len); 281 memcpy(ri->i_name, name->name, name->len); 282 set_page_dirty(ipage); 283} 284 285int update_dent_inode(struct inode *inode, const struct qstr *name) 286{ |
287 struct f2fs_sb_info *sbi = F2FS_SB(inode->i_sb); | |
288 struct page *page; 289 | 287 struct page *page; 288 |
290 page = get_node_page(sbi, inode->i_ino); | 289 page = get_node_page(F2FS_I_SB(inode), inode->i_ino); |
291 if (IS_ERR(page)) 292 return PTR_ERR(page); 293 294 init_dent_inode(name, page); 295 f2fs_put_page(page, 1); 296 297 return 0; 298} --- 33 unchanged lines hidden (view full) --- 332 set_page_dirty(dentry_page); 333 f2fs_put_page(dentry_page, 1); 334 return 0; 335} 336 337static struct page *init_inode_metadata(struct inode *inode, 338 struct inode *dir, const struct qstr *name) 339{ | 290 if (IS_ERR(page)) 291 return PTR_ERR(page); 292 293 init_dent_inode(name, page); 294 f2fs_put_page(page, 1); 295 296 return 0; 297} --- 33 unchanged lines hidden (view full) --- 331 set_page_dirty(dentry_page); 332 f2fs_put_page(dentry_page, 1); 333 return 0; 334} 335 336static struct page *init_inode_metadata(struct inode *inode, 337 struct inode *dir, const struct qstr *name) 338{ |
340 struct f2fs_sb_info *sbi = F2FS_SB(dir->i_sb); | |
341 struct page *page; 342 int err; 343 344 if (is_inode_flag_set(F2FS_I(inode), FI_NEW_INODE)) { 345 page = new_inode_page(inode); 346 if (IS_ERR(page)) 347 return page; 348 --- 6 unchanged lines hidden (view full) --- 355 err = f2fs_init_acl(inode, dir, page); 356 if (err) 357 goto put_error; 358 359 err = f2fs_init_security(inode, dir, name, page); 360 if (err) 361 goto put_error; 362 } else { | 339 struct page *page; 340 int err; 341 342 if (is_inode_flag_set(F2FS_I(inode), FI_NEW_INODE)) { 343 page = new_inode_page(inode); 344 if (IS_ERR(page)) 345 return page; 346 --- 6 unchanged lines hidden (view full) --- 353 err = f2fs_init_acl(inode, dir, page); 354 if (err) 355 goto put_error; 356 357 err = f2fs_init_security(inode, dir, name, page); 358 if (err) 359 goto put_error; 360 } else { |
363 page = get_node_page(F2FS_SB(dir->i_sb), inode->i_ino); | 361 page = get_node_page(F2FS_I_SB(dir), inode->i_ino); |
364 if (IS_ERR(page)) 365 return page; 366 367 set_cold_node(inode, page); 368 } 369 370 if (name) 371 init_dent_inode(name, page); --- 4 unchanged lines hidden (view full) --- 376 */ 377 if (is_inode_flag_set(F2FS_I(inode), FI_INC_LINK)) { 378 file_lost_pino(inode); 379 /* 380 * If link the tmpfile to alias through linkat path, 381 * we should remove this inode from orphan list. 382 */ 383 if (inode->i_nlink == 0) | 362 if (IS_ERR(page)) 363 return page; 364 365 set_cold_node(inode, page); 366 } 367 368 if (name) 369 init_dent_inode(name, page); --- 4 unchanged lines hidden (view full) --- 374 */ 375 if (is_inode_flag_set(F2FS_I(inode), FI_INC_LINK)) { 376 file_lost_pino(inode); 377 /* 378 * If link the tmpfile to alias through linkat path, 379 * we should remove this inode from orphan list. 380 */ 381 if (inode->i_nlink == 0) |
384 remove_orphan_inode(sbi, inode->i_ino); | 382 remove_orphan_inode(F2FS_I_SB(dir), inode->i_ino); |
385 inc_nlink(inode); 386 } 387 return page; 388 389put_error: 390 f2fs_put_page(page, 1); 391error: 392 /* once the failed inode becomes a bad inode, i_mode is S_IFREG */ --- 173 unchanged lines hidden (view full) --- 566 * It only removes the dentry from the dentry page, corresponding name 567 * entry in name page does not need to be touched during deletion. 568 */ 569void f2fs_delete_entry(struct f2fs_dir_entry *dentry, struct page *page, 570 struct inode *inode) 571{ 572 struct f2fs_dentry_block *dentry_blk; 573 unsigned int bit_pos; | 383 inc_nlink(inode); 384 } 385 return page; 386 387put_error: 388 f2fs_put_page(page, 1); 389error: 390 /* once the failed inode becomes a bad inode, i_mode is S_IFREG */ --- 173 unchanged lines hidden (view full) --- 564 * It only removes the dentry from the dentry page, corresponding name 565 * entry in name page does not need to be touched during deletion. 566 */ 567void f2fs_delete_entry(struct f2fs_dir_entry *dentry, struct page *page, 568 struct inode *inode) 569{ 570 struct f2fs_dentry_block *dentry_blk; 571 unsigned int bit_pos; |
574 struct address_space *mapping = page->mapping; 575 struct inode *dir = mapping->host; | 572 struct inode *dir = page->mapping->host; |
576 int slots = GET_DENTRY_SLOTS(le16_to_cpu(dentry->name_len)); 577 int i; 578 579 lock_page(page); 580 f2fs_wait_on_page_writeback(page, DATA); 581 582 dentry_blk = page_address(page); 583 bit_pos = dentry - dentry_blk->dentry; --- 5 unchanged lines hidden (view full) --- 589 NR_DENTRY_IN_BLOCK, 590 0); 591 kunmap(page); /* kunmap - pair of f2fs_find_entry */ 592 set_page_dirty(page); 593 594 dir->i_ctime = dir->i_mtime = CURRENT_TIME; 595 596 if (inode) { | 573 int slots = GET_DENTRY_SLOTS(le16_to_cpu(dentry->name_len)); 574 int i; 575 576 lock_page(page); 577 f2fs_wait_on_page_writeback(page, DATA); 578 579 dentry_blk = page_address(page); 580 bit_pos = dentry - dentry_blk->dentry; --- 5 unchanged lines hidden (view full) --- 586 NR_DENTRY_IN_BLOCK, 587 0); 588 kunmap(page); /* kunmap - pair of f2fs_find_entry */ 589 set_page_dirty(page); 590 591 dir->i_ctime = dir->i_mtime = CURRENT_TIME; 592 593 if (inode) { |
597 struct f2fs_sb_info *sbi = F2FS_SB(dir->i_sb); | 594 struct f2fs_sb_info *sbi = F2FS_I_SB(dir); |
598 599 down_write(&F2FS_I(inode)->i_sem); 600 601 if (S_ISDIR(inode->i_mode)) { 602 drop_nlink(dir); 603 update_inode_page(dir); 604 } 605 inode->i_ctime = CURRENT_TIME; --- 10 unchanged lines hidden (view full) --- 616 else 617 release_orphan_inode(sbi); 618 } 619 620 if (bit_pos == NR_DENTRY_IN_BLOCK) { 621 truncate_hole(dir, page->index, page->index + 1); 622 clear_page_dirty_for_io(page); 623 ClearPageUptodate(page); | 595 596 down_write(&F2FS_I(inode)->i_sem); 597 598 if (S_ISDIR(inode->i_mode)) { 599 drop_nlink(dir); 600 update_inode_page(dir); 601 } 602 inode->i_ctime = CURRENT_TIME; --- 10 unchanged lines hidden (view full) --- 613 else 614 release_orphan_inode(sbi); 615 } 616 617 if (bit_pos == NR_DENTRY_IN_BLOCK) { 618 truncate_hole(dir, page->index, page->index + 1); 619 clear_page_dirty_for_io(page); 620 ClearPageUptodate(page); |
624 inode_dec_dirty_dents(dir); | 621 inode_dec_dirty_pages(dir); |
625 } 626 f2fs_put_page(page, 1); 627} 628 629bool f2fs_empty_dir(struct inode *dir) 630{ 631 unsigned long bidx; 632 struct page *dentry_page; --- 100 unchanged lines hidden --- | 622 } 623 f2fs_put_page(page, 1); 624} 625 626bool f2fs_empty_dir(struct inode *dir) 627{ 628 unsigned long bidx; 629 struct page *dentry_page; --- 100 unchanged lines hidden --- |