Lines Matching refs:dir
12 static void hpfs_update_directory_times(struct inode *dir)
14 time64_t t = local_to_gmt(dir->i_sb, local_get_seconds(dir->i_sb));
15 if (t == dir->i_mtime.tv_sec &&
16 t == dir->i_ctime.tv_sec)
18 dir->i_mtime.tv_sec = dir->i_ctime.tv_sec = t;
19 dir->i_mtime.tv_nsec = dir->i_ctime.tv_nsec = 0;
20 hpfs_write_inode_nolock(dir);
23 static int hpfs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
39 hpfs_lock(dir->i_sb);
41 fnode = hpfs_alloc_fnode(dir->i_sb, hpfs_i(dir)->i_dno, &fno, &bh);
44 dnode = hpfs_alloc_dnode(dir->i_sb, fno, &dno, &qbh0);
53 dee.creation_date = dee.write_date = dee.read_date = cpu_to_le32(local_get_seconds(dir->i_sb));
54 result = new_inode(dir->i_sb);
59 hpfs_i(result)->i_parent_dir = dir->i_ino;
61 result->i_ctime.tv_sec = result->i_mtime.tv_sec = result->i_atime.tv_sec = local_to_gmt(dir->i_sb, le32_to_cpu(dee.creation_date));
75 r = hpfs_add_dirent(dir, name, len, &dee);
84 fnode->up = cpu_to_le32(dir->i_ino);
93 de = hpfs_add_de(dir->i_sb, dnode, "\001\001", 2, 0);
94 de->creation_date = de->write_date = de->read_date = cpu_to_le32(local_get_seconds(dir->i_sb));
103 inc_nlink(dir);
114 hpfs_update_directory_times(dir);
116 hpfs_unlock(dir->i_sb);
122 hpfs_free_dnode(dir->i_sb, dno);
125 hpfs_free_sectors(dir->i_sb, fno, 1);
127 hpfs_unlock(dir->i_sb);
131 static int hpfs_create(struct inode *dir, struct dentry *dentry, umode_t mode, bool excl)
144 hpfs_lock(dir->i_sb);
146 fnode = hpfs_alloc_fnode(dir->i_sb, hpfs_i(dir)->i_dno, &fno, &bh);
154 dee.creation_date = dee.write_date = dee.read_date = cpu_to_le32(local_get_seconds(dir->i_sb));
156 result = new_inode(dir->i_sb);
167 hpfs_i(result)->i_parent_dir = dir->i_ino;
168 result->i_ctime.tv_sec = result->i_mtime.tv_sec = result->i_atime.tv_sec = local_to_gmt(dir->i_sb, le32_to_cpu(dee.creation_date));
180 r = hpfs_add_dirent(dir, name, len, &dee);
189 fnode->up = cpu_to_le32(dir->i_ino);
203 hpfs_update_directory_times(dir);
205 hpfs_unlock(dir->i_sb);
212 hpfs_free_sectors(dir->i_sb, fno, 1);
214 hpfs_unlock(dir->i_sb);
218 static int hpfs_mknod(struct inode *dir, struct dentry *dentry, umode_t mode, dev_t rdev)
230 if (hpfs_sb(dir->i_sb)->sb_eas < 2) return -EPERM;
231 hpfs_lock(dir->i_sb);
233 fnode = hpfs_alloc_fnode(dir->i_sb, hpfs_i(dir)->i_dno, &fno, &bh);
241 dee.creation_date = dee.write_date = dee.read_date = cpu_to_le32(local_get_seconds(dir->i_sb));
243 result = new_inode(dir->i_sb);
249 hpfs_i(result)->i_parent_dir = dir->i_ino;
250 result->i_ctime.tv_sec = result->i_mtime.tv_sec = result->i_atime.tv_sec = local_to_gmt(dir->i_sb, le32_to_cpu(dee.creation_date));
262 r = hpfs_add_dirent(dir, name, len, &dee);
271 fnode->up = cpu_to_le32(dir->i_ino);
277 hpfs_update_directory_times(dir);
280 hpfs_unlock(dir->i_sb);
286 hpfs_free_sectors(dir->i_sb, fno, 1);
288 hpfs_unlock(dir->i_sb);
292 static int hpfs_symlink(struct inode *dir, struct dentry *dentry, const char *symlink)
304 hpfs_lock(dir->i_sb);
305 if (hpfs_sb(dir->i_sb)->sb_eas < 2) {
306 hpfs_unlock(dir->i_sb);
310 fnode = hpfs_alloc_fnode(dir->i_sb, hpfs_i(dir)->i_dno, &fno, &bh);
317 dee.creation_date = dee.write_date = dee.read_date = cpu_to_le32(local_get_seconds(dir->i_sb));
319 result = new_inode(dir->i_sb);
324 hpfs_i(result)->i_parent_dir = dir->i_ino;
325 result->i_ctime.tv_sec = result->i_mtime.tv_sec = result->i_atime.tv_sec = local_to_gmt(dir->i_sb, le32_to_cpu(dee.creation_date));
340 r = hpfs_add_dirent(dir, name, len, &dee);
349 fnode->up = cpu_to_le32(dir->i_ino);
357 hpfs_update_directory_times(dir);
359 hpfs_unlock(dir->i_sb);
365 hpfs_free_sectors(dir->i_sb, fno, 1);
367 hpfs_unlock(dir->i_sb);
371 static int hpfs_unlink(struct inode *dir, struct dentry *dentry)
382 hpfs_lock(dir->i_sb);
386 de = map_dirent(dir, hpfs_i(dir)->i_dno, name, len, &dno, &qbh);
398 r = hpfs_remove_dirent(dir, dno, de, &qbh, 1);
401 hpfs_error(dir->i_sb, "there was error when removing dirent");
417 hpfs_update_directory_times(dir);
418 hpfs_unlock(dir->i_sb);
422 static int hpfs_rmdir(struct inode *dir, struct dentry *dentry)
435 hpfs_lock(dir->i_sb);
437 de = map_dirent(dir, hpfs_i(dir)->i_dno, name, len, &dno, &qbh);
449 hpfs_count_dnodes(dir->i_sb, hpfs_i(inode)->i_dno, NULL, NULL, &n_items);
454 r = hpfs_remove_dirent(dir, dno, de, &qbh, 1);
457 hpfs_error(dir->i_sb, "there was error when removing dirent");
464 drop_nlink(dir);
473 hpfs_update_directory_times(dir);
474 hpfs_unlock(dir->i_sb);