9p: move readn meta-function from client to fs layer
[linux-2.6.git] / fs / 9p / fid.h
index 48fc170..c3bbd6a 100644 (file)
 
 #include <linux/list.h>
 
-#define FID_OP   0
-#define FID_WALK 1
-#define FID_CREATE 2
-
-struct v9fs_fid {
-       struct list_head list;   /* list of fids associated with a dentry */
-       struct list_head active; /* XXX - debug */
-
-       struct semaphore lock;
-
-       u32 fid;
-       unsigned char fidopen;    /* set when fid is opened */
-       unsigned char fidclunked; /* set when fid has already been clunked */
-
-       struct v9fs_qid qid;
-       u32 iounit;
-
-       /* readdir stuff */
-       int rdir_fpos;
-       loff_t rdir_pos;
-       struct v9fs_fcall *rdir_fcall;
-
-       /* management stuff */
-       uid_t uid;              /* user associated with this fid */
-
-       /* private data */
-       struct file *filp;      /* backpointer to File struct for open files */
-       struct v9fs_session_info *v9ses;        /* session info for this FID */
+/**
+ * struct v9fs_dentry - 9p private data stored in dentry d_fsdata
+ * @lock: protects the fidlist
+ * @fidlist: list of FIDs currently associated with this dentry
+ *
+ * This structure defines the 9p private data associated with
+ * a particular dentry.  In particular, this private data is used
+ * to lookup which 9P FID handle should be used for a particular VFS
+ * operation.  FID handles are associated with dentries instead of
+ * inodes in order to more closely map functionality to the Plan 9
+ * expected behavior for FID reclaimation and tracking.
+ *
+ * See Also: Mapping FIDs to Linux VFS model in
+ * Design and Implementation of the Linux 9P File System documentation
+ */
+struct v9fs_dentry {
+       spinlock_t lock; /* protect fidlist */
+       struct list_head fidlist;
 };
 
-struct v9fs_fid *v9fs_fid_lookup(struct dentry *dentry);
-struct v9fs_fid *v9fs_fid_get_created(struct dentry *);
-void v9fs_fid_destroy(struct v9fs_fid *fid);
-struct v9fs_fid *v9fs_fid_create(struct v9fs_session_info *, int fid);
-int v9fs_fid_insert(struct v9fs_fid *fid, struct dentry *dentry);
-struct v9fs_fid *v9fs_fid_clone(struct dentry *dentry);
-void v9fs_fid_clunk(struct v9fs_session_info *v9ses, struct v9fs_fid *fid);
-
+struct p9_fid *v9fs_fid_lookup(struct dentry *dentry);
+struct p9_fid *v9fs_fid_clone(struct dentry *dentry);
+int v9fs_fid_add(struct dentry *dentry, struct p9_fid *fid);