Lines Matching refs:inode

44 static int ceph_encode_snapfh(struct inode *inode, u32 *rawfh, int *max_len,  in ceph_encode_snapfh()  argument
45 struct inode *parent_inode) in ceph_encode_snapfh()
47 struct ceph_client *cl = ceph_inode_to_client(inode); in ceph_encode_snapfh()
50 u64 snapid = ceph_snap(inode); in ceph_encode_snapfh()
62 struct inode *dir; in ceph_encode_snapfh()
63 struct dentry *dentry = d_find_alias(inode); in ceph_encode_snapfh()
79 if (!S_ISDIR(inode->i_mode)) in ceph_encode_snapfh()
84 sfh->ino = ceph_ino(inode); in ceph_encode_snapfh()
90 doutc(cl, "%p %llx.%llx ret=%d\n", inode, ceph_vinop(inode), ret); in ceph_encode_snapfh()
94 static int ceph_encode_fh(struct inode *inode, u32 *rawfh, int *max_len, in ceph_encode_fh() argument
95 struct inode *parent_inode) in ceph_encode_fh()
97 struct ceph_client *cl = ceph_inode_to_client(inode); in ceph_encode_fh()
102 if (ceph_snap(inode) != CEPH_NOSNAP) in ceph_encode_fh()
103 return ceph_encode_snapfh(inode, rawfh, max_len, parent_inode); in ceph_encode_fh()
115 doutc(cl, "%p %llx.%llx with parent %p %llx.%llx\n", inode, in ceph_encode_fh()
116 ceph_vinop(inode), parent_inode, ceph_vinop(parent_inode)); in ceph_encode_fh()
117 cfh->ino = ceph_ino(inode); in ceph_encode_fh()
123 doutc(cl, "%p %llx.%llx\n", inode, ceph_vinop(inode)); in ceph_encode_fh()
124 fh->ino = ceph_ino(inode); in ceph_encode_fh()
131 static struct inode *__lookup_inode(struct super_block *sb, u64 ino) in __lookup_inode()
134 struct inode *inode; in __lookup_inode() local
144 inode = ceph_find_inode(sb, vino); in __lookup_inode()
145 if (!inode) { in __lookup_inode()
162 inode = req->r_target_inode; in __lookup_inode()
163 if (inode) in __lookup_inode()
164 ihold(inode); in __lookup_inode()
166 if (!inode) in __lookup_inode()
169 if (ceph_inode_is_shutdown(inode)) { in __lookup_inode()
170 iput(inode); in __lookup_inode()
174 return inode; in __lookup_inode()
177 struct inode *ceph_lookup_inode(struct super_block *sb, u64 ino) in ceph_lookup_inode()
179 struct inode *inode = __lookup_inode(sb, ino); in ceph_lookup_inode() local
180 if (IS_ERR(inode)) in ceph_lookup_inode()
181 return inode; in ceph_lookup_inode()
182 if (inode->i_nlink == 0) { in ceph_lookup_inode()
183 iput(inode); in ceph_lookup_inode()
186 return inode; in ceph_lookup_inode()
191 struct inode *inode = __lookup_inode(sb, ino); in __fh_to_dentry() local
192 struct ceph_inode_info *ci = ceph_inode(inode); in __fh_to_dentry()
195 if (IS_ERR(inode)) in __fh_to_dentry()
196 return ERR_CAST(inode); in __fh_to_dentry()
198 err = ceph_do_getattr(inode, CEPH_CAP_LINK_SHARED, false); in __fh_to_dentry()
200 iput(inode); in __fh_to_dentry()
204 if ((inode->i_nlink == 0) && !__ceph_is_file_opened(ci)) { in __fh_to_dentry()
205 iput(inode); in __fh_to_dentry()
208 return d_obtain_alias(inode); in __fh_to_dentry()
218 struct inode *inode; in __snapfh_to_dentry() local
240 inode = ceph_find_inode(sb, vino); in __snapfh_to_dentry()
241 if (inode) { in __snapfh_to_dentry()
242 if (ceph_inode_is_shutdown(inode)) { in __snapfh_to_dentry()
243 iput(inode); in __snapfh_to_dentry()
246 return d_obtain_alias(inode); in __snapfh_to_dentry()
271 inode = req->r_target_inode; in __snapfh_to_dentry()
272 if (inode) { in __snapfh_to_dentry()
274 if (inode->i_nlink == 0) in __snapfh_to_dentry()
276 inode = ceph_get_snapdir(inode); in __snapfh_to_dentry()
277 } else if (ceph_snap(inode) == vino.snap) { in __snapfh_to_dentry()
278 ihold(inode); in __snapfh_to_dentry()
281 inode = ERR_PTR(-EOPNOTSUPP); in __snapfh_to_dentry()
284 inode = ERR_PTR(-ESTALE); in __snapfh_to_dentry()
295 return unlinked ? d_obtain_root(inode) : d_obtain_alias(inode); in __snapfh_to_dentry()
328 struct inode *inode; in __get_parent() local
359 inode = req->r_target_inode; in __get_parent()
360 if (inode) in __get_parent()
361 ihold(inode); in __get_parent()
363 if (!inode) in __get_parent()
366 return d_obtain_alias(inode); in __get_parent()
371 struct inode *inode = d_inode(child); in ceph_get_parent() local
372 struct ceph_client *cl = ceph_inode_to_client(inode); in ceph_get_parent()
375 if (ceph_snap(inode) != CEPH_NOSNAP) { in ceph_get_parent()
376 struct inode* dir; in ceph_get_parent()
383 dir = __lookup_inode(inode->i_sb, ceph_ino(inode)); in ceph_get_parent()
390 if (ceph_snap(inode) != CEPH_SNAPDIR) { in ceph_get_parent()
391 struct inode *snapdir = ceph_get_snapdir(dir); in ceph_get_parent()
412 doutc(cl, "child %p %p %llx.%llx err=%ld\n", child, inode, in ceph_get_parent()
413 ceph_vinop(inode), (long)PTR_ERR_OR_ZERO(dn)); in ceph_get_parent()
448 struct inode *inode = d_inode(child); in __get_snap_name() local
449 struct inode *dir = d_inode(parent); in __get_snap_name()
450 struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode); in __get_snap_name()
456 if (ceph_ino(inode) != ceph_ino(dir)) in __get_snap_name()
458 if (ceph_snap(inode) == CEPH_SNAPDIR) { in __get_snap_name()
486 err = ceph_alloc_readdir_reply_buffer(req, inode); in __get_snap_name()
513 BUG_ON(!rde->inode.in); in __get_snap_name()
514 if (ceph_snap(inode) == in __get_snap_name()
515 le64_to_cpu(rde->inode.in->snapid)) { in __get_snap_name()
544 inode, ceph_vinop(inode), err); in __get_snap_name()
553 struct inode *dir = d_inode(parent); in ceph_get_name()
554 struct inode *inode = d_inode(child); in ceph_get_name() local
558 if (ceph_snap(inode) != CEPH_NOSNAP) in ceph_get_name()
561 mdsc = ceph_inode_to_fs_client(inode)->mdsc; in ceph_get_name()
568 req->r_inode = inode; in ceph_get_name()
569 ihold(inode); in ceph_get_name()
606 child, inode, ceph_vinop(inode), err, err ? "" : "name ", in ceph_get_name()