[Pkg-uml-pkgs] Bug#442108: user-mode-linux: Fix for #442108 (2.6.23.1 backport)
Alexander V. Inyukhin
shurick at sectorb.msk.ru
Tue Oct 30 21:24:54 UTC 2007
Package: user-mode-linux
Tags: patch
Followup-For: Bug #442108
This bug is fixed in 2.6.23. I just backport it.
-- System Information:
Debian Release: lenny/sid
APT prefers testing
APT policy: (500, 'testing')
Architecture: i386 (i686)
Kernel: Linux 2.6.22.2-rt (SMP w/2 CPU cores; PREEMPT)
Locale: LANG=ru_RU.KOI8-R, LC_CTYPE=ru_RU.KOI8-R (charmap=KOI8-R)
Shell: /bin/sh linked to /bin/bash
Versions of packages user-mode-linux depends on:
ii uml-utilities 20070815-1 User-mode Linux (utility programs)
user-mode-linux recommends no packages.
-- debconf-show failed
-------------- next part --------------
diff --git a/debian/changelog b/debian/changelog
index 8925f60..838359d 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,10 @@
+user-mode-linux (2.6.22-1um-1.1) unstable; urgency=low
+
+ * Non-maintainer upload.
+ * UBD fix (Closes: #442108)
+
+ -- Alexander V. Inyukhin <shurick at sectorb.msk.ru> Tue, 30 Oct 2007 23:54:51 +0300
+
user-mode-linux (2.6.22-1um-1) unstable; urgency=low
* New upstream release (Closes: #436388).
diff --git a/debian/patches/00list b/debian/patches/00list
index 09a8197..77115e0 100644
--- a/debian/patches/00list
+++ b/debian/patches/00list
@@ -1,3 +1,4 @@
02_x-terminal-emulator.dpatch
03_uml_switch.diff
04_restructure-do_aio.patch
+99_ubd.patch
diff --git a/debian/patches/99_ubd.patch b/debian/patches/99_ubd.patch
new file mode 100644
index 0000000..8ff4387
--- /dev/null
+++ b/debian/patches/99_ubd.patch
@@ -0,0 +1,75 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 99_ubd - Alexander V. Inyukhin <shurick at sectorb.msk.ru>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: UBD fixes from 2.6.23
+
+ at DPATCH@
+
+# Author: shurick
+# Status: none
+
+diff --git a/arch/um/drivers/ubd_kern.c b/arch/um/drivers/ubd_kern.c
+index 2e09f16..0eabe73 100644
+--- a/arch/um/drivers/ubd_kern.c
++++ b/arch/um/drivers/ubd_kern.c
+@@ -469,7 +469,7 @@ __uml_help(fakehd,
+ " Change the ubd device name to \"hd\".\n\n"
+ );
+
+-static void do_ubd_request(request_queue_t * q);
++static void do_ubd_request(struct request_queue * q);
+
+ /* Only changed by ubd_init, which is an initcall. */
+ int thread_fd = -1;
+@@ -612,6 +612,8 @@ static int ubd_open_dev(struct ubd *ubd_dev)
+ ubd_dev->fd = fd;
+
+ if(ubd_dev->cow.file != NULL){
++ blk_queue_max_sectors(ubd_dev->queue, 8 * sizeof(long));
++
+ err = -ENOMEM;
+ ubd_dev->cow.bitmap = (void *) vmalloc(ubd_dev->cow.bitmap_len);
+ if(ubd_dev->cow.bitmap == NULL){
+@@ -1079,11 +1081,11 @@ static void prepare_request(struct request *req, struct io_thread_req *io_req,
+ }
+
+ /* Called with dev->lock held */
+-static void do_ubd_request(request_queue_t *q)
++static void do_ubd_request(struct request_queue *q)
+ {
+ struct io_thread_req *io_req;
+ struct request *req;
+- int n;
++ int n, last_sectors;
+
+ while(1){
+ struct ubd *dev = q->queuedata;
+@@ -1099,9 +1101,11 @@ static void do_ubd_request(request_queue_t *q)
+ }
+
+ req = dev->request;
++ last_sectors = 0;
+ while(dev->start_sg < dev->end_sg){
+ struct scatterlist *sg = &dev->sg[dev->start_sg];
+
++ req->sector += last_sectors;
+ io_req = kmalloc(sizeof(struct io_thread_req),
+ GFP_ATOMIC);
+ if(io_req == NULL){
+@@ -1113,6 +1117,7 @@ static void do_ubd_request(request_queue_t *q)
+ (unsigned long long) req->sector << 9,
+ sg->offset, sg->length, sg->page);
+
++ last_sectors = sg->length >> 9;
+ n = os_write_file(thread_fd, &io_req,
+ sizeof(struct io_thread_req *));
+ if(n != sizeof(struct io_thread_req *)){
+@@ -1124,7 +1129,6 @@ static void do_ubd_request(request_queue_t *q)
+ return;
+ }
+
+- req->sector += sg->length >> 9;
+ dev->start_sg++;
+ }
+ dev->end_sg = 0;
More information about the Pkg-uml-pkgs
mailing list