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