Lines Matching refs:inode
23 struct inode *inode, u32 cnid) in hfsplus_instantiate() argument
26 d_instantiate(dentry, inode); in hfsplus_instantiate()
30 static struct dentry *hfsplus_lookup(struct inode *dir, struct dentry *dentry, in hfsplus_lookup()
33 struct inode *inode = NULL; in hfsplus_lookup() local
57 inode = NULL; in hfsplus_lookup()
118 inode = hfsplus_iget(dir->i_sb, cnid); in hfsplus_lookup()
119 if (IS_ERR(inode)) in hfsplus_lookup()
120 return ERR_CAST(inode); in hfsplus_lookup()
121 if (S_ISREG(inode->i_mode)) in hfsplus_lookup()
122 HFSPLUS_I(inode)->linkid = linkid; in hfsplus_lookup()
124 d_add(dentry, inode); in hfsplus_lookup()
133 struct inode *inode = file_inode(file); in hfsplus_readdir() local
134 struct super_block *sb = inode->i_sb; in hfsplus_readdir()
142 if (file->f_pos >= inode->i_size) in hfsplus_readdir()
153 hfsplus_cat_build_key_with_cnid(sb, fd.search_key, inode->i_ino); in hfsplus_readdir()
187 if (ctx->pos >= inode->i_size) in hfsplus_readdir()
193 if (be32_to_cpu(fd.key->cat.parent) != inode->i_ino) { in hfsplus_readdir()
259 if (ctx->pos >= inode->i_size) in hfsplus_readdir()
274 list_add(&rd->list, &HFSPLUS_I(inode)->open_dir_list); in hfsplus_readdir()
283 static int hfsplus_dir_release(struct inode *inode, struct file *file) in hfsplus_dir_release() argument
287 mutex_lock(&inode->i_mutex); in hfsplus_dir_release()
289 mutex_unlock(&inode->i_mutex); in hfsplus_dir_release()
295 static int hfsplus_link(struct dentry *src_dentry, struct inode *dst_dir, in hfsplus_link()
299 struct inode *inode = d_inode(src_dentry); in hfsplus_link() local
300 struct inode *src_dir = d_inode(src_dentry->d_parent); in hfsplus_link()
306 if (HFSPLUS_IS_RSRC(inode)) in hfsplus_link()
308 if (!S_ISREG(inode->i_mode)) in hfsplus_link()
312 if (inode->i_ino == (u32)(unsigned long)src_dentry->d_fsdata) { in hfsplus_link()
318 res = hfsplus_rename_cat(inode->i_ino, in hfsplus_link()
326 HFSPLUS_I(inode)->linkid = id; in hfsplus_link()
330 &src_dentry->d_name, inode); in hfsplus_link()
337 res = hfsplus_create_cat(cnid, dst_dir, &dst_dentry->d_name, inode); in hfsplus_link()
341 inc_nlink(inode); in hfsplus_link()
342 hfsplus_instantiate(dst_dentry, inode, cnid); in hfsplus_link()
343 ihold(inode); in hfsplus_link()
344 inode->i_ctime = CURRENT_TIME_SEC; in hfsplus_link()
345 mark_inode_dirty(inode); in hfsplus_link()
353 static int hfsplus_unlink(struct inode *dir, struct dentry *dentry) in hfsplus_unlink()
356 struct inode *inode = d_inode(dentry); in hfsplus_unlink() local
362 if (HFSPLUS_IS_RSRC(inode)) in hfsplus_unlink()
367 if (inode->i_ino == cnid && in hfsplus_unlink()
368 atomic_read(&HFSPLUS_I(inode)->opencnt)) { in hfsplus_unlink()
370 str.len = sprintf(name, "temp%lu", inode->i_ino); in hfsplus_unlink()
371 res = hfsplus_rename_cat(inode->i_ino, in hfsplus_unlink()
375 inode->i_flags |= S_DEAD; in hfsplus_unlink()
376 drop_nlink(inode); in hfsplus_unlink()
384 if (inode->i_nlink > 0) in hfsplus_unlink()
385 drop_nlink(inode); in hfsplus_unlink()
386 if (inode->i_ino == cnid) in hfsplus_unlink()
387 clear_nlink(inode); in hfsplus_unlink()
388 if (!inode->i_nlink) { in hfsplus_unlink()
389 if (inode->i_ino != cnid) { in hfsplus_unlink()
391 if (!atomic_read(&HFSPLUS_I(inode)->opencnt)) { in hfsplus_unlink()
392 res = hfsplus_delete_cat(inode->i_ino, in hfsplus_unlink()
396 hfsplus_delete_inode(inode); in hfsplus_unlink()
398 inode->i_flags |= S_DEAD; in hfsplus_unlink()
400 hfsplus_delete_inode(inode); in hfsplus_unlink()
403 inode->i_ctime = CURRENT_TIME_SEC; in hfsplus_unlink()
404 mark_inode_dirty(inode); in hfsplus_unlink()
410 static int hfsplus_rmdir(struct inode *dir, struct dentry *dentry) in hfsplus_rmdir()
413 struct inode *inode = d_inode(dentry); in hfsplus_rmdir() local
416 if (inode->i_size != 2) in hfsplus_rmdir()
420 res = hfsplus_delete_cat(inode->i_ino, dir, &dentry->d_name); in hfsplus_rmdir()
423 clear_nlink(inode); in hfsplus_rmdir()
424 inode->i_ctime = CURRENT_TIME_SEC; in hfsplus_rmdir()
425 hfsplus_delete_inode(inode); in hfsplus_rmdir()
426 mark_inode_dirty(inode); in hfsplus_rmdir()
432 static int hfsplus_symlink(struct inode *dir, struct dentry *dentry, in hfsplus_symlink()
436 struct inode *inode; in hfsplus_symlink() local
440 inode = hfsplus_new_inode(dir->i_sb, S_IFLNK | S_IRWXUGO); in hfsplus_symlink()
441 if (!inode) in hfsplus_symlink()
444 res = page_symlink(inode, symname, strlen(symname) + 1); in hfsplus_symlink()
448 res = hfsplus_create_cat(inode->i_ino, dir, &dentry->d_name, inode); in hfsplus_symlink()
452 res = hfsplus_init_inode_security(inode, dir, &dentry->d_name); in hfsplus_symlink()
457 hfsplus_delete_cat(inode->i_ino, dir, &dentry->d_name); in hfsplus_symlink()
461 hfsplus_instantiate(dentry, inode, inode->i_ino); in hfsplus_symlink()
462 mark_inode_dirty(inode); in hfsplus_symlink()
466 clear_nlink(inode); in hfsplus_symlink()
467 hfsplus_delete_inode(inode); in hfsplus_symlink()
468 iput(inode); in hfsplus_symlink()
474 static int hfsplus_mknod(struct inode *dir, struct dentry *dentry, in hfsplus_mknod()
478 struct inode *inode; in hfsplus_mknod() local
482 inode = hfsplus_new_inode(dir->i_sb, mode); in hfsplus_mknod()
483 if (!inode) in hfsplus_mknod()
487 init_special_inode(inode, mode, rdev); in hfsplus_mknod()
489 res = hfsplus_create_cat(inode->i_ino, dir, &dentry->d_name, inode); in hfsplus_mknod()
493 res = hfsplus_init_inode_security(inode, dir, &dentry->d_name); in hfsplus_mknod()
498 hfsplus_delete_cat(inode->i_ino, dir, &dentry->d_name); in hfsplus_mknod()
502 hfsplus_instantiate(dentry, inode, inode->i_ino); in hfsplus_mknod()
503 mark_inode_dirty(inode); in hfsplus_mknod()
507 clear_nlink(inode); in hfsplus_mknod()
508 hfsplus_delete_inode(inode); in hfsplus_mknod()
509 iput(inode); in hfsplus_mknod()
515 static int hfsplus_create(struct inode *dir, struct dentry *dentry, umode_t mode, in hfsplus_create()
521 static int hfsplus_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode) in hfsplus_mkdir()
526 static int hfsplus_rename(struct inode *old_dir, struct dentry *old_dentry, in hfsplus_rename()
527 struct inode *new_dir, struct dentry *new_dentry) in hfsplus_rename()