On 14.02.2008 [23:16:44 +0100], Mariusz Kozlowski wrote: > Hello, > > > > > Is it just me, or does > > > > > > > > ((user_addr + iov[seg].iov_len + PAGE_SIZE - 1)/PAGE_SIZE - user_addr/PAGE_SIZE) > > > > > > > > not simplify to > > > > > > > > = ((iov[seg].iov_len + PAGE_SIZE - 1)/PAGE_SIZE + user_addr/PAGE_SIZE - user_addr/PAGE_SIZE) > > > > > > > > = ((iov[seg].iov_len + PAGE_SIZE - 1)/PAGE_SIZE) > > > > > > > > = DIV_ROUND_UP(iov[seg].iov_len, PAGE_SIZE) > > > > > > > > CMIIW. > > > > > > I double-checked this and I believe you're correct. It's simpler to > > > see when you do: > > > > > > x = user_addr > > > y = iov[seg].iov_len > > > z = PAGE_SIZE > > > > > > So > > > > > > (x + y + z - 1)/z - x/z > > > > > > = [x + (y + z - 1)]/z - x/z > > > > > > = [xz + z(y + z - 1)]/z^2 - x/z > > > > > > = x/z + (y + z - 1)/z - x/z > > > > > > And the rest follows from your simplifications. > > > > It doesn't work: > > > > ((3+4+5-1)/5) - (3/5) = 2 > > ((4+5-1)/5) = 1 > > Logic was wrong but conclusion was right :) and so was Nishanth: <snip> As I replied to Julia off-list -- the math I and others have given is correct, but assumes we're dealing with real-typed values. However, we only have integer types in the kernel, meaning the divisions truncate. Thus, while mathematically equivalent, the simplification is not computationally so. Thanks, Nish -- Nishanth Aravamudan <nacc@xxxxxxxxxx> IBM Linux Technology Center - To unsubscribe from this list: send the line "unsubscribe kernel-janitors" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html