diff options
Diffstat (limited to 'fs/nilfs2/inode.c')
-rw-r--r-- | fs/nilfs2/inode.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/fs/nilfs2/inode.c b/fs/nilfs2/inode.c index 6e9df85b5824..82cfdbc43e1c 100644 --- a/fs/nilfs2/inode.c +++ b/fs/nilfs2/inode.c | |||
@@ -527,6 +527,28 @@ struct inode *nilfs_iget(struct super_block *sb, unsigned long ino) | |||
527 | return inode; | 527 | return inode; |
528 | } | 528 | } |
529 | 529 | ||
530 | struct inode *nilfs_iget_for_gc(struct super_block *sb, unsigned long ino, | ||
531 | __u64 cno) | ||
532 | { | ||
533 | struct nilfs_iget_args args = { .ino = ino, .cno = cno, .for_gc = 1 }; | ||
534 | struct inode *inode; | ||
535 | int err; | ||
536 | |||
537 | inode = iget5_locked(sb, ino, nilfs_iget_test, nilfs_iget_set, &args); | ||
538 | if (unlikely(!inode)) | ||
539 | return ERR_PTR(-ENOMEM); | ||
540 | if (!(inode->i_state & I_NEW)) | ||
541 | return inode; | ||
542 | |||
543 | err = nilfs_init_gcinode(inode); | ||
544 | if (unlikely(err)) { | ||
545 | iget_failed(inode); | ||
546 | return ERR_PTR(err); | ||
547 | } | ||
548 | unlock_new_inode(inode); | ||
549 | return inode; | ||
550 | } | ||
551 | |||
530 | void nilfs_write_inode_common(struct inode *inode, | 552 | void nilfs_write_inode_common(struct inode *inode, |
531 | struct nilfs_inode *raw_inode, int has_bmap) | 553 | struct nilfs_inode *raw_inode, int has_bmap) |
532 | { | 554 | { |