]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Added a configuration check to prevent IoState::startWriting() assertions.
authorAlex Rousskov <rousskov@measurement-factory.com>
Sat, 29 Jan 2011 00:08:52 +0000 (17:08 -0700)
committerAlex Rousskov <rousskov@measurement-factory.com>
Sat, 29 Jan 2011 00:08:52 +0000 (17:08 -0700)
Rock::IoState::startWriting() asserts that [padded] write request size does
not exceed the slot size. Padded request size always exceeds the slot size for
slots smaller than the page.

This check may also help avoid using unallocated buffer for padding, but that
part may need more work.

src/fs/rock/RockSwapDir.cc

index 0bdf80517b2719ee2caf46073c2489737090b19a..7bad86b11a3a687024746fcbf764ac9883cda9d6 100644 (file)
@@ -165,6 +165,15 @@ Rock::SwapDir::validateOptions()
     if (max_objsize <= 0)
         fatal("Rock store requires a positive max-size");
 
+    // Rock::IoState::startWriting() inflates write size to the end of the page
+    // so that mmap does not have to read the tail and then write it back.
+    // This is a weak check that the padded area will be allocated by [growing]
+    // MemBuf and a sufficient check that inflated size will not exceed the
+    // slot size.
+    static const int ps = getpagesize();
+    if (ps > 0 && (max_objsize % ps != 0))
+        fatal("Rock store max-size should be a multiple of page size");
+
     const int64_t eLimitHi = 0xFFFFFF; // Core sfileno maximum
     const int64_t eLimitLo = map.entryLimit(); // dynamic shrinking unsupported
     const int64_t eWanted = (maximumSize() - HeaderSize)/max_objsize;