Lines Matching refs:dir
66 static int write_dir(struct inode *dir, struct logfs_disk_dentry *dd, in write_dir() argument
69 return logfs_inode_write(dir, dd, sizeof(*dd), pos, WF_LOCK, NULL); in write_dir()
157 static struct page *logfs_get_dd_page(struct inode *dir, struct dentry *dentry) in logfs_get_dd_page() argument
172 if (beyond_eof(dir, index)) in logfs_get_dd_page()
174 if (!logfs_exist_block(dir, index)) in logfs_get_dd_page()
176 page = read_cache_page(dir->i_mapping, index, in logfs_get_dd_page()
213 static int logfs_unlink(struct inode *dir, struct dentry *dentry) in logfs_unlink() argument
215 struct logfs_super *super = logfs_super(dir->i_sb); in logfs_unlink()
229 inode->i_ctime = dir->i_ctime = dir->i_mtime = CURRENT_TIME; in logfs_unlink()
231 page = logfs_get_dd_page(dir, dentry); in logfs_unlink()
244 logfs_add_transaction(dir, ta); in logfs_unlink()
246 ret = logfs_delete(dir, index, NULL); in logfs_unlink()
248 ret = write_inode(dir); in logfs_unlink()
251 abort_transaction(dir, ta); in logfs_unlink()
264 static inline int logfs_empty_dir(struct inode *dir) in logfs_empty_dir() argument
268 data = logfs_seek_data(dir, 0) << dir->i_sb->s_blocksize_bits; in logfs_empty_dir()
269 return data >= i_size_read(dir); in logfs_empty_dir()
272 static int logfs_rmdir(struct inode *dir, struct dentry *dentry) in logfs_rmdir() argument
279 return logfs_unlink(dir, dentry); in logfs_rmdir()
286 struct inode *dir = file_inode(file); in logfs_readdir() local
301 if (beyond_eof(dir, pos)) in logfs_readdir()
303 if (!logfs_exist_block(dir, pos)) { in logfs_readdir()
305 pos = dir_seek_data(dir, pos); in logfs_readdir()
308 page = read_cache_page(dir->i_mapping, pos, in logfs_readdir()
332 static struct dentry *logfs_lookup(struct inode *dir, struct dentry *dentry, in logfs_lookup() argument
341 page = logfs_get_dd_page(dir, dentry); in logfs_lookup()
354 inode = logfs_iget(dir->i_sb, ino); in logfs_lookup()
357 ino, dir->i_ino, index); in logfs_lookup()
361 static void grow_dir(struct inode *dir, loff_t index) in grow_dir() argument
363 index = (index + 1) << dir->i_sb->s_blocksize_bits; in grow_dir()
364 if (i_size_read(dir) < index) in grow_dir()
365 i_size_write(dir, index); in grow_dir()
368 static int logfs_write_dir(struct inode *dir, struct dentry *dentry, in logfs_write_dir() argument
380 if (logfs_exist_block(dir, index)) in logfs_write_dir()
382 page = find_or_create_page(dir->i_mapping, index, GFP_KERNEL); in logfs_write_dir()
393 err = logfs_write_buf(dir, page, WF_LOCK); in logfs_write_dir()
397 grow_dir(dir, index); in logfs_write_dir()
407 static int __logfs_create(struct inode *dir, struct dentry *dentry, in __logfs_create() argument
410 struct logfs_super *super = logfs_super(dir->i_sb); in __logfs_create()
446 logfs_add_transaction(dir, ta); in __logfs_create()
447 ret = logfs_write_dir(dir, dentry, inode); in __logfs_create()
450 ret = write_inode(dir); in __logfs_create()
453 logfs_del_transaction(dir, ta); in __logfs_create()
466 static int logfs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode) in logfs_mkdir() argument
475 inode = logfs_new_inode(dir, S_IFDIR | mode); in logfs_mkdir()
482 return __logfs_create(dir, dentry, inode, NULL, 0); in logfs_mkdir()
485 static int logfs_create(struct inode *dir, struct dentry *dentry, umode_t mode, in logfs_create() argument
490 inode = logfs_new_inode(dir, mode); in logfs_create()
498 return __logfs_create(dir, dentry, inode, NULL, 0); in logfs_create()
501 static int logfs_mknod(struct inode *dir, struct dentry *dentry, umode_t mode, in logfs_mknod() argument
509 inode = logfs_new_inode(dir, mode); in logfs_mknod()
515 return __logfs_create(dir, dentry, inode, NULL, 0); in logfs_mknod()
518 static int logfs_symlink(struct inode *dir, struct dentry *dentry, in logfs_symlink() argument
524 if (destlen > dir->i_sb->s_blocksize) in logfs_symlink()
527 inode = logfs_new_inode(dir, S_IFLNK | 0777); in logfs_symlink()
534 return __logfs_create(dir, dentry, inode, target, destlen); in logfs_symlink()
537 static int logfs_link(struct dentry *old_dentry, struct inode *dir, in logfs_link() argument
542 inode->i_ctime = dir->i_ctime = dir->i_mtime = CURRENT_TIME; in logfs_link()
547 return __logfs_create(dir, dentry, inode, NULL, 0); in logfs_link()
550 static int logfs_get_dd(struct inode *dir, struct dentry *dentry, in logfs_get_dd() argument
556 page = logfs_get_dd_page(dir, dentry); in logfs_get_dd()
567 static int logfs_delete_dd(struct inode *dir, loff_t pos) in logfs_delete_dd() argument
574 BUG_ON(beyond_eof(dir, pos)); in logfs_delete_dd()
575 dir->i_ctime = dir->i_mtime = CURRENT_TIME; in logfs_delete_dd()
576 log_dir(" Delete dentry (%lx, %llx)\n", dir->i_ino, pos); in logfs_delete_dd()
577 return logfs_delete(dir, pos, NULL); in logfs_delete_dd()
604 ta->dir = old_dir->i_ino; in logfs_rename_cross()
633 static int logfs_replace_inode(struct inode *dir, struct dentry *dentry, in logfs_replace_inode() argument
639 err = logfs_get_dd(dir, dentry, dd, &pos); in logfs_replace_inode()
645 err = write_dir(dir, dd, pos); in logfs_replace_inode()
648 log_dir("Replace dentry (%lx, %llx) %s -> %llx\n", dir->i_ino, pos, in logfs_replace_inode()
650 return write_inode(dir); in logfs_replace_inode()
685 ta->dir = old_dir->i_ino; in logfs_rename_target()