Loading arch/um/drivers/ubd_kern.c +5 −22 Original line number Diff line number Diff line Loading @@ -535,11 +535,7 @@ static int read_cow_bitmap(int fd, void *buf, int offset, int len) { int err; err = os_seek_file(fd, offset); if (err < 0) return err; err = os_read_file(fd, buf, len); err = os_pread_file(fd, buf, len, offset); if (err < 0) return err; Loading Loading @@ -1377,14 +1373,8 @@ static int update_bitmap(struct io_thread_req *req) if(req->cow_offset == -1) return 0; n = os_seek_file(req->fds[1], req->cow_offset); if(n < 0){ printk("do_io - bitmap lseek failed : err = %d\n", -n); return 1; } n = os_write_file(req->fds[1], &req->bitmap_words, sizeof(req->bitmap_words)); n = os_pwrite_file(req->fds[1], &req->bitmap_words, sizeof(req->bitmap_words), req->cow_offset); if(n != sizeof(req->bitmap_words)){ printk("do_io - bitmap update failed, err = %d fd = %d\n", -n, req->fds[1]); Loading @@ -1399,7 +1389,6 @@ static void do_io(struct io_thread_req *req) char *buf; unsigned long len; int n, nsectors, start, end, bit; int err; __u64 off; if (req->op == UBD_FLUSH) { Loading Loading @@ -1428,18 +1417,12 @@ static void do_io(struct io_thread_req *req) len = (end - start) * req->sectorsize; buf = &req->buffer[start * req->sectorsize]; err = os_seek_file(req->fds[bit], off); if(err < 0){ printk("do_io - lseek failed : err = %d\n", -err); req->error = 1; return; } if(req->op == UBD_READ){ n = 0; do { buf = &buf[n]; len -= n; n = os_read_file(req->fds[bit], buf, len); n = os_pread_file(req->fds[bit], buf, len, off); if (n < 0) { printk("do_io - read failed, err = %d " "fd = %d\n", -n, req->fds[bit]); Loading @@ -1449,7 +1432,7 @@ static void do_io(struct io_thread_req *req) } while((n < len) && (n != 0)); if (n < len) memset(&buf[n], 0, len - n); } else { n = os_write_file(req->fds[bit], buf, len); n = os_pwrite_file(req->fds[bit], buf, len, off); if(n != len){ printk("do_io - write failed err = %d " "fd = %d\n", -n, req->fds[bit]); Loading arch/um/include/shared/os.h +2 −0 Original line number Diff line number Diff line Loading @@ -146,6 +146,8 @@ 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_sync_file(int fd); extern int os_file_size(const char *file, unsigned long long *size_out); extern int os_pread_file(int fd, void *buf, int len, unsigned long long offset); extern int os_pwrite_file(int fd, const void *buf, int count, unsigned long long offset); extern int os_file_modtime(const 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); Loading arch/um/os-Linux/file.c +19 −0 Original line number Diff line number Diff line Loading @@ -264,6 +264,15 @@ int os_read_file(int fd, void *buf, int len) return n; } int os_pread_file(int fd, void *buf, int len, unsigned long long offset) { int n = pread(fd, buf, len, offset); if (n < 0) return -errno; return n; } int os_write_file(int fd, const void *buf, int len) { int n = write(fd, (void *) buf, len); Loading @@ -282,6 +291,16 @@ int os_sync_file(int fd) return n; } int os_pwrite_file(int fd, const void *buf, int len, unsigned long long offset) { int n = pwrite(fd, (void *) buf, len, offset); if (n < 0) return -errno; return n; } int os_file_size(const char *file, unsigned long long *size_out) { struct uml_stat buf; Loading Loading
arch/um/drivers/ubd_kern.c +5 −22 Original line number Diff line number Diff line Loading @@ -535,11 +535,7 @@ static int read_cow_bitmap(int fd, void *buf, int offset, int len) { int err; err = os_seek_file(fd, offset); if (err < 0) return err; err = os_read_file(fd, buf, len); err = os_pread_file(fd, buf, len, offset); if (err < 0) return err; Loading Loading @@ -1377,14 +1373,8 @@ static int update_bitmap(struct io_thread_req *req) if(req->cow_offset == -1) return 0; n = os_seek_file(req->fds[1], req->cow_offset); if(n < 0){ printk("do_io - bitmap lseek failed : err = %d\n", -n); return 1; } n = os_write_file(req->fds[1], &req->bitmap_words, sizeof(req->bitmap_words)); n = os_pwrite_file(req->fds[1], &req->bitmap_words, sizeof(req->bitmap_words), req->cow_offset); if(n != sizeof(req->bitmap_words)){ printk("do_io - bitmap update failed, err = %d fd = %d\n", -n, req->fds[1]); Loading @@ -1399,7 +1389,6 @@ static void do_io(struct io_thread_req *req) char *buf; unsigned long len; int n, nsectors, start, end, bit; int err; __u64 off; if (req->op == UBD_FLUSH) { Loading Loading @@ -1428,18 +1417,12 @@ static void do_io(struct io_thread_req *req) len = (end - start) * req->sectorsize; buf = &req->buffer[start * req->sectorsize]; err = os_seek_file(req->fds[bit], off); if(err < 0){ printk("do_io - lseek failed : err = %d\n", -err); req->error = 1; return; } if(req->op == UBD_READ){ n = 0; do { buf = &buf[n]; len -= n; n = os_read_file(req->fds[bit], buf, len); n = os_pread_file(req->fds[bit], buf, len, off); if (n < 0) { printk("do_io - read failed, err = %d " "fd = %d\n", -n, req->fds[bit]); Loading @@ -1449,7 +1432,7 @@ static void do_io(struct io_thread_req *req) } while((n < len) && (n != 0)); if (n < len) memset(&buf[n], 0, len - n); } else { n = os_write_file(req->fds[bit], buf, len); n = os_pwrite_file(req->fds[bit], buf, len, off); if(n != len){ printk("do_io - write failed err = %d " "fd = %d\n", -n, req->fds[bit]); Loading
arch/um/include/shared/os.h +2 −0 Original line number Diff line number Diff line Loading @@ -146,6 +146,8 @@ 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_sync_file(int fd); extern int os_file_size(const char *file, unsigned long long *size_out); extern int os_pread_file(int fd, void *buf, int len, unsigned long long offset); extern int os_pwrite_file(int fd, const void *buf, int count, unsigned long long offset); extern int os_file_modtime(const 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); Loading
arch/um/os-Linux/file.c +19 −0 Original line number Diff line number Diff line Loading @@ -264,6 +264,15 @@ int os_read_file(int fd, void *buf, int len) return n; } int os_pread_file(int fd, void *buf, int len, unsigned long long offset) { int n = pread(fd, buf, len, offset); if (n < 0) return -errno; return n; } int os_write_file(int fd, const void *buf, int len) { int n = write(fd, (void *) buf, len); Loading @@ -282,6 +291,16 @@ int os_sync_file(int fd) return n; } int os_pwrite_file(int fd, const void *buf, int len, unsigned long long offset) { int n = pwrite(fd, (void *) buf, len, offset); if (n < 0) return -errno; return n; } int os_file_size(const char *file, unsigned long long *size_out) { struct uml_stat buf; Loading