Index: uspace/srv/vfs/vfs.c
===================================================================
--- uspace/srv/vfs/vfs.c	(revision eb27ce5a8fc10aea5ca8d1e35996165a9eb406d8)
+++ uspace/srv/vfs/vfs.c	(revision 22e8166d31603820c5ff6a19314d26c8a16f3ece)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2007 Jakub Jermar
+ * Copyright (c) 2008 Jakub Jermar
  * All rights reserved.
  *
@@ -104,4 +104,6 @@
 			break;
 		case VFS_TRUNCATE:
+			vfs_truncate(callid, &call);
+			break;
 		case VFS_UNMOUNT:
 		case VFS_CLOSE:
Index: uspace/srv/vfs/vfs.h
===================================================================
--- uspace/srv/vfs/vfs.h	(revision eb27ce5a8fc10aea5ca8d1e35996165a9eb406d8)
+++ uspace/srv/vfs/vfs.h	(revision 22e8166d31603820c5ff6a19314d26c8a16f3ece)
@@ -230,4 +230,5 @@
 extern void vfs_write(ipc_callid_t, ipc_call_t *);
 extern void vfs_seek(ipc_callid_t, ipc_call_t *);
+extern void vfs_truncate(ipc_callid_t, ipc_call_t *);
 
 #endif
Index: uspace/srv/vfs/vfs_ops.c
===================================================================
--- uspace/srv/vfs/vfs_ops.c	(revision eb27ce5a8fc10aea5ca8d1e35996165a9eb406d8)
+++ uspace/srv/vfs/vfs_ops.c	(revision 22e8166d31603820c5ff6a19314d26c8a16f3ece)
@@ -690,4 +690,31 @@
 }
 
+void vfs_truncate(ipc_callid_t rid, ipc_call_t *request)
+{
+	int fd = IPC_GET_ARG1(*request);
+	size_t size = IPC_GET_ARG2(*request);
+	ipcarg_t rc;
+
+	vfs_file_t *file = vfs_file_get(fd);
+	if (!file) {
+		ipc_answer_0(rid, ENOENT);
+		return;
+	}
+	futex_down(&file->lock);
+
+	rwlock_write_lock(&file->node->contents_rwlock);
+	int fs_phone = vfs_grab_phone(file->node->fs_handle);
+	rc = async_req_3_0(fs_phone, VFS_TRUNCATE, (ipcarg_t)file->node->dev_handle,
+	    (ipcarg_t)file->node->index, (ipcarg_t)size);
+	vfs_release_phone(fs_phone);
+	if (rc == EOK)
+		file->node->size = size;
+	rwlock_write_unlock(&file->node->contents_rwlock);
+
+	futex_up(&file->lock);
+
+	return rc;	
+}
+
 atomic_t fs_head_futex = FUTEX_INITIALIZER;
 link_t fs_head;
