Index: uspace/srv/vfs/vfs.h
===================================================================
--- uspace/srv/vfs/vfs.h	(revision 01f5e17ed977fd4735bbbdc90c3ba9ad567f5093)
+++ uspace/srv/vfs/vfs.h	(revision 8c20b26354d64b3b5d419d182d91ed2f83cbeacf)
@@ -36,4 +36,6 @@
 #include <ipc/ipc.h>
 #include <libadt/list.h>
+#include <atomic.h>
+#include <types.h>
 
 #define dprintf(...)	printf(__VA_ARGS__)
@@ -42,4 +44,6 @@
 
 #define IPC_METHOD_TO_VFS_OP(m)	((m) - VFS_FIRST)	
+
+typedef int64_t off_t;
 
 typedef enum {
@@ -85,4 +89,7 @@
 } vfs_info_t;
 
+/**
+ * A structure like this will be allocated for each registered file system.
+ */
 typedef struct {
 	link_t fs_link;
@@ -90,4 +97,32 @@
 	ipcarg_t phone;
 } fs_info_t;
+
+/**
+ * Instances of this type represent a file system node (e.g. directory, file).
+ * They are abstracted away from any file system implementation and contain just
+ * enough bits to uniquely identify the object in its file system instance.
+ *
+ * @note	fs_handle, dev_handle and index are meant to be returned in one
+ *		IPC reply.
+ */
+typedef struct {
+	int fs_handle;		/**< Global file system ID. */
+	int dev_handle;		/**< Global mount device devno. */
+	uint64_t index;		/**< Index of the node on its file system. */
+} vfs_node_t;
+
+/**
+ * Instances of this type represent an open file. If the file is opened by more
+ * than one task, there will be a separate structure allocated for each task.
+ */
+typedef struct {
+	vfs_node_t *node;
+	
+	/** Number of file handles referencing this file. */
+	atomic_t refcnt;
+
+	/** Current position in the file. */
+	off_t pos;
+} vfs_file_t;
 
 extern link_t fs_head;
