1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 /* 3 * V9FS FID Management 4 * 5 * Copyright (C) 2005 by Eric Van Hensbergen <ericvh@gmail.com> 6 */ 7 #ifndef FS_9P_FID_H 8 #define FS_9P_FID_H 9 #include <linux/list.h> 10 11 struct p9_fid *v9fs_fid_lookup(struct dentry *dentry); 12 static inline struct p9_fid *v9fs_parent_fid(struct dentry *dentry) 13 { 14 return v9fs_fid_lookup(dentry->d_parent); 15 } 16 void v9fs_fid_add(struct dentry *dentry, struct p9_fid **fid); 17 struct p9_fid *v9fs_writeback_fid(struct dentry *dentry); 18 void v9fs_open_fid_add(struct inode *inode, struct p9_fid **fid); 19 static inline struct p9_fid *clone_fid(struct p9_fid *fid) 20 { 21 return IS_ERR(fid) ? fid : p9_client_walk(fid, 0, NULL, 1); 22 } 23 static inline struct p9_fid *v9fs_fid_clone(struct dentry *dentry) 24 { 25 struct p9_fid *fid, *nfid; 26 27 fid = v9fs_fid_lookup(dentry); 28 if (!fid || IS_ERR(fid)) 29 return fid; 30 31 nfid = clone_fid(fid); 32 p9_fid_put(fid); 33 return nfid; 34 } 35 #endif 36