summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjdike <jdike>2003-11-10 22:57:03 +0000
committerjdike <jdike>2003-11-10 22:57:03 +0000
commit9dfcf2818d493c446c5403bf3068c3f3b93674bd (patch)
tree07708fd02af8de12bcada8b6a0ac41f0bdaea245
parentb85d4aed0700ce709a6ae14e84c34a260669ff3d (diff)
downloaduml-history-9dfcf2818d493c446c5403bf3068c3f3b93674bd.tar.gz
Added os_file_modtime, and changed everything that looks at mtime to use it
rather than os_stat_file.
-rw-r--r--arch/um/drivers/cow_user.c10
-rw-r--r--arch/um/drivers/ubd_user.c14
-rw-r--r--arch/um/include/os.h1
-rw-r--r--arch/um/os-Linux/file.c17
4 files changed, 29 insertions, 13 deletions
diff --git a/arch/um/drivers/cow_user.c b/arch/um/drivers/cow_user.c
index 79a2cdb..fa36c6e 100644
--- a/arch/um/drivers/cow_user.c
+++ b/arch/um/drivers/cow_user.c
@@ -162,7 +162,7 @@ int write_cow_header(char *cow_file, int fd, char *backing_file,
int sectorsize, int alignment, long long *size)
{
struct cow_header_v3 *header;
- struct uml_stat buf;
+ unsigned long modtime;
int err;
err = cow_seek_file(fd, 0);
@@ -192,10 +192,10 @@ int write_cow_header(char *cow_file, int fd, char *backing_file,
backing_file))
goto out_free;
- err = os_stat_file(header->backing_file, &buf);
+ err = os_file_modtime(header->backing_file, &modtime);
if(err < 0){
- cow_printf("Stat of backing file '%s' failed, err = %d\n",
- header->backing_file, -err);
+ cow_printf("Backing file '%s' mtime request failed, "
+ "err = %d\n", header->backing_file, -err);
goto out_free;
}
@@ -206,7 +206,7 @@ int write_cow_header(char *cow_file, int fd, char *backing_file,
goto out_free;
}
- header->mtime = htonl(buf.ust_mtime);
+ header->mtime = htonl(modtime);
header->size = htonll(*size);
header->sectorsize = htonl(sectorsize);
header->alignment = htonl(alignment);
diff --git a/arch/um/drivers/ubd_user.c b/arch/um/drivers/ubd_user.c
index f745d2c..2c549e7 100644
--- a/arch/um/drivers/ubd_user.c
+++ b/arch/um/drivers/ubd_user.c
@@ -56,14 +56,14 @@ static int same_backing_files(char *from_cmdline, char *from_cow, char *cow)
static int backing_file_mismatch(char *file, __u64 size, time_t mtime)
{
- struct uml_stat buf;
+ unsigned long modtime;
long long actual;
int err;
- err = os_stat_file(file, &buf);
+ err = os_file_modtime(file, &modtime);
if(err < 0){
- printk("Failed to stat backing file \"%s\", err = %d\n",
- file, -err);
+ printk("Failed to get modification time of backing file "
+ "\"%s\", err = %d\n", file, -err);
return(err);
}
@@ -79,9 +79,9 @@ static int backing_file_mismatch(char *file, __u64 size, time_t mtime)
"file\n", size, actual);
return(-EINVAL);
}
- if(buf.ust_mtime != mtime){
+ if(modtime != mtime){
printk("mtime mismatch (%ld vs %ld) of COW header vs backing "
- "file\n", mtime, buf.ust_mtime);
+ "file\n", mtime, modtime);
return(-EINVAL);
}
return(0);
@@ -243,7 +243,7 @@ void do_io(struct io_thread_req *req)
/* Touch the page to force the host to do any necessary IO to
* get it into memory
*/
- n = *((int *) req->buffer);
+ n = *((volatile int *) req->buffer);
req->error = update_bitmap(req);
return;
}
diff --git a/arch/um/include/os.h b/arch/um/include/os.h
index 65af4d9..5d5a5ad 100644
--- a/arch/um/include/os.h
+++ b/arch/um/include/os.h
@@ -137,6 +137,7 @@ extern int os_open_file(char *file, struct openflags flags, int mode);
extern int os_read_file(int fd, void *buf, int len);
extern int os_write_file(int fd, const void *buf, int count);
extern int os_file_size(char *file, long long *size_out);
+extern int os_file_modtime(char *file, unsigned long *modtime);
extern int os_pipe(int *fd, int stream, int close_on_exec);
extern int os_set_fd_async(int fd, int owner);
extern int os_set_fd_block(int fd, int blocking);
diff --git a/arch/um/os-Linux/file.c b/arch/um/os-Linux/file.c
index e48b997..eabdf9a 100644
--- a/arch/um/os-Linux/file.c
+++ b/arch/um/os-Linux/file.c
@@ -293,7 +293,7 @@ int os_connect_socket(char *name)
err = connect(fd, (struct sockaddr *) &sock, sizeof(sock));
if(err)
- return(err);
+ return(-errno);
return(fd);
}
@@ -388,6 +388,21 @@ int os_file_size(char *file, long long *size_out)
return(0);
}
+int os_file_modtime(char *file, unsigned long *modtime)
+{
+ struct uml_stat buf;
+ int err;
+
+ err = os_stat_file(file, &buf);
+ if(err < 0){
+ printk("Couldn't stat \"%s\" : err = %d\n", file, -err);
+ return(err);
+ }
+
+ *modtime = buf.ust_mtime;
+ return(0);
+}
+
int os_get_exec_close(int fd, int* close_on_exec)
{
int ret;