[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <1403170201.10778.36.camel@acox1-desk.ger.corp.intel.com>
Date: Thu, 19 Jun 2014 10:30:01 +0100
From: Alan Cox <alan@...ux.intel.com>
To: linux-fsdevel@...r.kernel.org, akpm@...ux-foundation.org,
aeb@....nl, linux-kernel@...r.kernel.org
Subject: Cannot partition 32GB disk on a 32bit machine
The block code has 32bit cleanness problems with the iterator. This
prevents things like partitioning a 32GB volume on a 32bit system.
I hit this with a volume of exactly 32GB in size (easy to duplicate with
virtual machines). Tracing at step by step through the kernel I found
the problem lines in blkdev_read_iter which truncates the size value
into a 32bit value when setting up the iterator.
The hack below if applied "fixes" this and I think demonstrates that
this is the problem spot.
What I'm less clear on is what the correct fix for this should be.
diff --git a/fs/block_dev.c b/fs/block_dev.c
index 6d72746..3792406 100644
--- a/fs/block_dev.c
+++ b/fs/block_dev.c
@@ -1603,6 +1603,9 @@ static ssize_t blkdev_read_iter(struct kiocb
*iocb, struct iov_iter *to)
size -= pos;
iov_iter_truncate(to, size);
+ /* Fix up for 32bit boxes for now */
+ if (to->count < size)
+ to->count = size;
return generic_file_read_iter(iocb, to);
}
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists