X-Git-Url: http://plrg.eecs.uci.edu/git/?p=folly.git;a=blobdiff_plain;f=folly%2FMemoryMapping.cpp;h=ae4cac71aeaba2487ec745840aa604ea1daf4179;hp=bc094d380a65fd4b4c494edbec256807c9535cd7;hb=e9c1c0434713e921c98288e932c05f228a734886;hpb=bc026609d8abdfd0ce8fdada93fa56b868c0d3ab diff --git a/folly/MemoryMapping.cpp b/folly/MemoryMapping.cpp index bc094d38..ae4cac71 100644 --- a/folly/MemoryMapping.cpp +++ b/folly/MemoryMapping.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2016 Facebook, Inc. + * Copyright 2017 Facebook, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -94,8 +94,7 @@ void getDeviceOptions(dev_t device, off_t& pageSize, bool& autoExtend) { } } #else -inline void getDeviceOptions(dev_t device, off_t& pageSize, - bool& autoExtend) { } +inline void getDeviceOptions(dev_t, off_t&, bool&) {} #endif } // namespace @@ -129,7 +128,7 @@ void MemoryMapping::init(off_t offset, off_t length) { } if (pageSize == 0) { - pageSize = sysconf(_SC_PAGESIZE); + pageSize = off_t(sysconf(_SC_PAGESIZE)); } CHECK_GT(pageSize, 0); @@ -137,7 +136,7 @@ void MemoryMapping::init(off_t offset, off_t length) { CHECK_GE(offset, 0); // Round down the start of the mapped region - size_t skipStart = offset % pageSize; + off_t skipStart = offset % pageSize; offset -= skipStart; mapLength_ = length; @@ -188,13 +187,13 @@ void MemoryMapping::init(off_t offset, off_t length) { (options_.writable ? PROT_WRITE : 0)); } - unsigned char* start = static_cast( - mmap(options_.address, mapLength_, prot, flags, file_.fd(), offset)); + unsigned char* start = static_cast(mmap( + options_.address, size_t(mapLength_), prot, flags, file_.fd(), offset)); PCHECK(start != MAP_FAILED) << " offset=" << offset << " length=" << mapLength_; mapStart_ = start; - data_.reset(start + skipStart, length); + data_.reset(start + skipStart, size_t(length)); } } @@ -206,7 +205,7 @@ off_t memOpChunkSize(off_t length, off_t pageSize) { return chunkSize; } - chunkSize = FLAGS_mlock_chunk_size; + chunkSize = off_t(FLAGS_mlock_chunk_size); off_t r = chunkSize % pageSize; if (r) { chunkSize += (pageSize - r); @@ -231,7 +230,7 @@ bool memOpInChunks(std::function op, // chunks breaks the locking into intervals and lets other threads do memory // operations of their own. - size_t chunkSize = memOpChunkSize(bufSize, pageSize); + size_t chunkSize = size_t(memOpChunkSize(off_t(bufSize), pageSize)); char* addr = static_cast(mem); amountSucceeded = 0; @@ -251,17 +250,22 @@ bool memOpInChunks(std::function op, bool MemoryMapping::mlock(LockMode lock) { size_t amountSucceeded = 0; - locked_ = memOpInChunks(::mlock, mapStart_, mapLength_, options_.pageSize, - amountSucceeded); + locked_ = memOpInChunks( + ::mlock, + mapStart_, + size_t(mapLength_), + options_.pageSize, + amountSucceeded); if (locked_) { return true; } auto msg = - folly::sformat("mlock({}) failed at {}", mapLength_, amountSucceeded); - - if (lock == LockMode::TRY_LOCK && (errno == EPERM || errno == ENOMEM)) { + folly::format("mlock({}) failed at {}", mapLength_, amountSucceeded); + if (lock == LockMode::TRY_LOCK && errno == EPERM) { PLOG(WARNING) << msg; + } else if (lock == LockMode::TRY_LOCK && errno == ENOMEM) { + VLOG(1) << msg; } else { PLOG(FATAL) << msg; } @@ -279,12 +283,16 @@ void MemoryMapping::munlock(bool dontneed) { if (!locked_) return; size_t amountSucceeded = 0; - if (!memOpInChunks(::munlock, mapStart_, mapLength_, options_.pageSize, - amountSucceeded)) { + if (!memOpInChunks( + ::munlock, + mapStart_, + size_t(mapLength_), + options_.pageSize, + amountSucceeded)) { PLOG(WARNING) << "munlock()"; } if (mapLength_ && dontneed && - ::madvise(mapStart_, mapLength_, MADV_DONTNEED)) { + ::madvise(mapStart_, size_t(mapLength_), MADV_DONTNEED)) { PLOG(WARNING) << "madvise()"; } locked_ = false; @@ -297,18 +305,24 @@ void MemoryMapping::hintLinearScan() { MemoryMapping::~MemoryMapping() { if (mapLength_) { size_t amountSucceeded = 0; - if (!memOpInChunks(::munmap, mapStart_, mapLength_, options_.pageSize, - amountSucceeded)) { + if (!memOpInChunks( + ::munmap, + mapStart_, + size_t(mapLength_), + options_.pageSize, + amountSucceeded)) { PLOG(FATAL) << folly::format("munmap({}) failed at {}", mapLength_, amountSucceeded); } } } -void MemoryMapping::advise(int advice) const { advise(advice, 0, mapLength_); } +void MemoryMapping::advise(int advice) const { + advise(advice, 0, size_t(mapLength_)); +} void MemoryMapping::advise(int advice, size_t offset, size_t length) const { - CHECK_LE(offset + length, mapLength_) + CHECK_LE(offset + length, size_t(mapLength_)) << " offset: " << offset << " length: " << length << " mapLength_: " << mapLength_; @@ -376,7 +390,7 @@ void mmapFileCopy(const char* src, const char* dest, mode_t mode) { MemoryMapping destMap( File(dest, O_RDWR | O_CREAT | O_TRUNC, mode), 0, - srcMap.range().size(), + off_t(srcMap.range().size()), MemoryMapping::writable()); alignedForwardMemcpy(destMap.writableRange().data(),