dir.c (4f2c0a4acffbec01079c28f839422e64ddeff004) | dir.c (9e22031a5a6c038089dfd4220012c7fb7f1631af) |
---|---|
1// SPDX-License-Identifier: GPL-2.0 2/* 3 * linux/fs/ufs/ufs_dir.c 4 * 5 * Copyright (C) 1996 6 * Adrian Rodriguez (adrian@franklins-tower.rutgers.edu) 7 * Laboratory for Computer Science Research Computing Facility 8 * Rutgers, The State University of New Jersey --- 28 unchanged lines hidden (view full) --- 37{ 38 if (len != ufs_get_de_namlen(sb, de)) 39 return 0; 40 if (!de->d_ino) 41 return 0; 42 return !memcmp(name, de->d_name, len); 43} 44 | 1// SPDX-License-Identifier: GPL-2.0 2/* 3 * linux/fs/ufs/ufs_dir.c 4 * 5 * Copyright (C) 1996 6 * Adrian Rodriguez (adrian@franklins-tower.rutgers.edu) 7 * Laboratory for Computer Science Research Computing Facility 8 * Rutgers, The State University of New Jersey --- 28 unchanged lines hidden (view full) --- 37{ 38 if (len != ufs_get_de_namlen(sb, de)) 39 return 0; 40 if (!de->d_ino) 41 return 0; 42 return !memcmp(name, de->d_name, len); 43} 44 |
45static int ufs_commit_chunk(struct page *page, loff_t pos, unsigned len) | 45static void ufs_commit_chunk(struct page *page, loff_t pos, unsigned len) |
46{ 47 struct address_space *mapping = page->mapping; 48 struct inode *dir = mapping->host; | 46{ 47 struct address_space *mapping = page->mapping; 48 struct inode *dir = mapping->host; |
49 int err = 0; | |
50 51 inode_inc_iversion(dir); 52 block_write_end(NULL, mapping, pos, len, len, page, NULL); 53 if (pos+len > dir->i_size) { 54 i_size_write(dir, pos+len); 55 mark_inode_dirty(dir); 56 } | 49 50 inode_inc_iversion(dir); 51 block_write_end(NULL, mapping, pos, len, len, page, NULL); 52 if (pos+len > dir->i_size) { 53 i_size_write(dir, pos+len); 54 mark_inode_dirty(dir); 55 } |
57 if (IS_DIRSYNC(dir)) 58 err = write_one_page(page); 59 else 60 unlock_page(page); | 56 unlock_page(page); 57} 58 59static int ufs_handle_dirsync(struct inode *dir) 60{ 61 int err; 62 63 err = filemap_write_and_wait(dir->i_mapping); 64 if (!err) 65 err = sync_inode_metadata(dir, 1); |
61 return err; 62} 63 64static inline void ufs_put_page(struct page *page) 65{ 66 kunmap(page); 67 put_page(page); 68} --- 25 unchanged lines hidden (view full) --- 94 95 lock_page(page); 96 err = ufs_prepare_chunk(page, pos, len); 97 BUG_ON(err); 98 99 de->d_ino = cpu_to_fs32(dir->i_sb, inode->i_ino); 100 ufs_set_de_type(dir->i_sb, de, inode->i_mode); 101 | 66 return err; 67} 68 69static inline void ufs_put_page(struct page *page) 70{ 71 kunmap(page); 72 put_page(page); 73} --- 25 unchanged lines hidden (view full) --- 99 100 lock_page(page); 101 err = ufs_prepare_chunk(page, pos, len); 102 BUG_ON(err); 103 104 de->d_ino = cpu_to_fs32(dir->i_sb, inode->i_ino); 105 ufs_set_de_type(dir->i_sb, de, inode->i_mode); 106 |
102 err = ufs_commit_chunk(page, pos, len); | 107 ufs_commit_chunk(page, pos, len); |
103 ufs_put_page(page); 104 if (update_times) 105 dir->i_mtime = dir->i_ctime = current_time(dir); 106 mark_inode_dirty(dir); | 108 ufs_put_page(page); 109 if (update_times) 110 dir->i_mtime = dir->i_ctime = current_time(dir); 111 mark_inode_dirty(dir); |
112 ufs_handle_dirsync(dir); |
|
107} 108 109 110static bool ufs_check_page(struct page *page) 111{ 112 struct inode *dir = page->mapping->host; 113 struct super_block *sb = dir->i_sb; 114 char *kaddr = page_address(page); --- 270 unchanged lines hidden (view full) --- 385 de = de1; 386 } 387 388 ufs_set_de_namlen(sb, de, namelen); 389 memcpy(de->d_name, name, namelen + 1); 390 de->d_ino = cpu_to_fs32(sb, inode->i_ino); 391 ufs_set_de_type(sb, de, inode->i_mode); 392 | 113} 114 115 116static bool ufs_check_page(struct page *page) 117{ 118 struct inode *dir = page->mapping->host; 119 struct super_block *sb = dir->i_sb; 120 char *kaddr = page_address(page); --- 270 unchanged lines hidden (view full) --- 391 de = de1; 392 } 393 394 ufs_set_de_namlen(sb, de, namelen); 395 memcpy(de->d_name, name, namelen + 1); 396 de->d_ino = cpu_to_fs32(sb, inode->i_ino); 397 ufs_set_de_type(sb, de, inode->i_mode); 398 |
393 err = ufs_commit_chunk(page, pos, rec_len); | 399 ufs_commit_chunk(page, pos, rec_len); |
394 dir->i_mtime = dir->i_ctime = current_time(dir); 395 396 mark_inode_dirty(dir); | 400 dir->i_mtime = dir->i_ctime = current_time(dir); 401 402 mark_inode_dirty(dir); |
403 err = ufs_handle_dirsync(dir); |
|
397 /* OFFSET_CACHE */ 398out_put: 399 ufs_put_page(page); 400out: 401 return err; 402out_unlock: 403 unlock_page(page); 404 goto out_put; --- 121 unchanged lines hidden (view full) --- 526 527 pos = page_offset(page) + from; 528 lock_page(page); 529 err = ufs_prepare_chunk(page, pos, to - from); 530 BUG_ON(err); 531 if (pde) 532 pde->d_reclen = cpu_to_fs16(sb, to - from); 533 dir->d_ino = 0; | 404 /* OFFSET_CACHE */ 405out_put: 406 ufs_put_page(page); 407out: 408 return err; 409out_unlock: 410 unlock_page(page); 411 goto out_put; --- 121 unchanged lines hidden (view full) --- 533 534 pos = page_offset(page) + from; 535 lock_page(page); 536 err = ufs_prepare_chunk(page, pos, to - from); 537 BUG_ON(err); 538 if (pde) 539 pde->d_reclen = cpu_to_fs16(sb, to - from); 540 dir->d_ino = 0; |
534 err = ufs_commit_chunk(page, pos, to - from); | 541 ufs_commit_chunk(page, pos, to - from); |
535 inode->i_ctime = inode->i_mtime = current_time(inode); 536 mark_inode_dirty(inode); | 542 inode->i_ctime = inode->i_mtime = current_time(inode); 543 mark_inode_dirty(inode); |
544 err = ufs_handle_dirsync(inode); |
|
537out: 538 ufs_put_page(page); 539 UFSD("EXIT\n"); 540 return err; 541} 542 543int ufs_make_empty(struct inode * inode, struct inode *dir) 544{ --- 29 unchanged lines hidden (view full) --- 574 ((char *)de + fs16_to_cpu(sb, de->d_reclen)); 575 de->d_ino = cpu_to_fs32(sb, dir->i_ino); 576 ufs_set_de_type(sb, de, dir->i_mode); 577 de->d_reclen = cpu_to_fs16(sb, chunk_size - UFS_DIR_REC_LEN(1)); 578 ufs_set_de_namlen(sb, de, 2); 579 strcpy (de->d_name, ".."); 580 kunmap(page); 581 | 545out: 546 ufs_put_page(page); 547 UFSD("EXIT\n"); 548 return err; 549} 550 551int ufs_make_empty(struct inode * inode, struct inode *dir) 552{ --- 29 unchanged lines hidden (view full) --- 582 ((char *)de + fs16_to_cpu(sb, de->d_reclen)); 583 de->d_ino = cpu_to_fs32(sb, dir->i_ino); 584 ufs_set_de_type(sb, de, dir->i_mode); 585 de->d_reclen = cpu_to_fs16(sb, chunk_size - UFS_DIR_REC_LEN(1)); 586 ufs_set_de_namlen(sb, de, 2); 587 strcpy (de->d_name, ".."); 588 kunmap(page); 589 |
582 err = ufs_commit_chunk(page, 0, chunk_size); | 590 ufs_commit_chunk(page, 0, chunk_size); 591 err = ufs_handle_dirsync(inode); |
583fail: 584 put_page(page); 585 return err; 586} 587 588/* 589 * routine to check that the specified directory is empty (for rmdir) 590 */ --- 56 unchanged lines hidden --- | 592fail: 593 put_page(page); 594 return err; 595} 596 597/* 598 * routine to check that the specified directory is empty (for rmdir) 599 */ --- 56 unchanged lines hidden --- |