diff options
author | jdike <jdike> | 2003-11-10 22:57:03 +0000 |
---|---|---|
committer | jdike <jdike> | 2003-11-10 22:57:03 +0000 |
commit | 9dfcf2818d493c446c5403bf3068c3f3b93674bd (patch) | |
tree | 07708fd02af8de12bcada8b6a0ac41f0bdaea245 | |
parent | b85d4aed0700ce709a6ae14e84c34a260669ff3d (diff) | |
download | uml-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.c | 10 | ||||
-rw-r--r-- | arch/um/drivers/ubd_user.c | 14 | ||||
-rw-r--r-- | arch/um/include/os.h | 1 | ||||
-rw-r--r-- | arch/um/os-Linux/file.c | 17 |
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; |