Still towards close/flush.

This commit is contained in:
Bahadir Balban
2008-04-25 23:06:23 +01:00
parent c9b9f9d111
commit f183b3c15e
2 changed files with 33 additions and 24 deletions

View File

@@ -152,28 +152,6 @@ out:
return 0;
}
int sys_close(l4id_t sender, int fd)
{
struct tcb *task;
/* Get the task */
BUG_ON(!(task = find_task(sender)));
/* Validate file descriptor */
if (fd < 0 || fd > TASK_OFILES_MAX) {
l4_ipc_return(-EBADF);
return 0;
}
if (!task->fd[fd]) {
l4_ipc_return(-EBADF);
return 0;
}
/* Finish I/O on file */
return 0;
}
int sys_mkdir(l4id_t sender, const char *pathname, unsigned int mode)
{
struct tcb *task;
@@ -271,6 +249,13 @@ int pager_sys_read(l4id_t sender, unsigned long vnum, unsigned long f_offset,
return 0;
}
/*
* This can be solely called by the pager and is not the posix write call.
* That call is in the pager. This writes the dirty pages of a file
* back to disk via vfs.
*
* The buffer must be contiguous by page, if npages > 1.
*/
int pager_sys_write(l4id_t sender, unsigned long vnum, unsigned long f_offset,
unsigned long npages, void *pagebuf)
{

View File

@@ -257,14 +257,38 @@ int write_file_pages(struct vm_file *vmfile, unsigned long pfn_start,
return 0;
}
int do_flush_file_pages(struct vm_file *vmfile)
int flush_file_pages(struct vm_file *vmfile)
{
}
int sys_close(void)
int sys_close(l4id_t sender, int fd)
{
struct tcb *task;
struct vm_file *f;
int retval, err;
/* Get the task */
BUG_ON(!(task = find_task(sender)));
/* Check fd validity */
if (fd < 0 || fd > TASK_FILES_MAX || !task->fd[fd].vmfile) {
retval = -EBADF;
goto out;
}
/* Finish I/O on file */
f = task->fd[fd].vmfile;
if ((err = flush_file_pages(f)) < 0) {
retval = err;
goto out;
}
out:
l4_ipc_return(retval);
return 0;
}
int sys_flush(void)
{
}