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 ---