* - OST_IO_MAXREQSIZE must be at least 1 page of cookies plus some spillover
* - Must be a multiple of 1024
*/
-#define _OST_MAXREQSIZE_BASE (sizeof(struct lustre_msg) + \
- sizeof(struct ptlrpc_body) + \
- sizeof(struct obdo) + \
- sizeof(struct obd_ioobj) + \
- sizeof(struct niobuf_remote))
-#define _OST_MAXREQSIZE_SUM (_OST_MAXREQSIZE_BASE + \
- sizeof(struct niobuf_remote) * \
- (DT_MAX_BRW_PAGES - 1))
+#define _OST_MAXREQSIZE_BASE ((unsigned long)(sizeof(struct lustre_msg) + \
+ sizeof(struct ptlrpc_body) + \
+ sizeof(struct obdo) + \
+ sizeof(struct obd_ioobj) + \
+ sizeof(struct niobuf_remote)))
+#define _OST_MAXREQSIZE_SUM ((unsigned long)(_OST_MAXREQSIZE_BASE + \
+ sizeof(struct niobuf_remote) * \
+ (DT_MAX_BRW_PAGES - 1)))
/**
* FIEMAP request can be 4K+ for now
*/
-#define OST_MAXREQSIZE (16 * 1024)
-#define OST_IO_MAXREQSIZE max_t(int, OST_MAXREQSIZE, \
- (((_OST_MAXREQSIZE_SUM - 1) | (1024 - 1)) + 1))
+#define OST_MAXREQSIZE (16UL * 1024UL)
+#define OST_IO_MAXREQSIZE max(OST_MAXREQSIZE, \
+ ((_OST_MAXREQSIZE_SUM - 1) | \
+ (1024UL - 1)) + 1)
/* Safe estimate of free space in standard RPC, provides upper limit for # of
* bytes of i/o to pack in RPC (skipping bulk transfer). */
#define OST_SHORT_IO_SPACE (OST_IO_MAXREQSIZE - _OST_MAXREQSIZE_BASE)
/* Actual size used for short i/o buffer. Calculation means this:
* At least one page (for large PAGE_SIZE), or 16 KiB, but not more
* than the available space aligned to a page boundary. */
-#define OBD_MAX_SHORT_IO_BYTES (min(max(PAGE_SIZE, 16UL * 1024UL), \
- OST_SHORT_IO_SPACE & PAGE_MASK))
+#define OBD_MAX_SHORT_IO_BYTES min(max(PAGE_SIZE, 16UL * 1024UL), \
+ OST_SHORT_IO_SPACE & PAGE_MASK)
#define OST_MAXREPSIZE (9 * 1024)
#define OST_IO_MAXREPSIZE OST_MAXREPSIZE
})
#elif BITS_PER_LONG == 32
# define lov_do_div64(n, base) ({ \
+ uint64_t __num = (n); \
uint64_t __rem; \
if ((sizeof(base) > 4) && (((base) & 0xffffffff00000000ULL) != 0)) { \
- int __remainder; \
- LASSERTF(!((base) & (LOV_MIN_STRIPE_SIZE - 1)), "64 bit lov " \
- "division %llu / %llu\n", (n), (uint64_t)(base)); \
- __remainder = (n) & (LOV_MIN_STRIPE_SIZE - 1); \
- (n) >>= LOV_MIN_STRIPE_BITS; \
- __rem = do_div(n, (base) >> LOV_MIN_STRIPE_BITS); \
+ int __remainder; \
+ LASSERTF(!((base) & (LOV_MIN_STRIPE_SIZE - 1)), \
+ "64 bit lov division %llu / %llu\n", \
+ __num, (uint64_t)(base)); \
+ __remainder = __num & (LOV_MIN_STRIPE_SIZE - 1); \
+ __num >>= LOV_MIN_STRIPE_BITS; \
+ __rem = do_div(__num, (base) >> LOV_MIN_STRIPE_BITS); \
__rem <<= LOV_MIN_STRIPE_BITS; \
__rem += __remainder; \
} else { \
- __rem = do_div(n, base); \
+ __rem = do_div(__num, base); \
} \
+ (n) = __num; \
__rem; \
})
#endif
EXPORT_SYMBOL(short_io_bytes_show);
/* Used to catch people who think they're specifying pages. */
-#define MIN_SHORT_IO_BYTES 64
+#define MIN_SHORT_IO_BYTES 64U
ssize_t short_io_bytes_store(struct kobject *kobj, struct attribute *attr,
const char *buffer, size_t count)
{
uint64_t mirror_end = 0;
ssize_t result = 0;
- size_t count;
+ uint64_t count;
if (end == OBD_OBJECT_EOF)
count = OBD_OBJECT_EOF;
while (count > 0) {
uint32_t src;
- size_t to_copy;
+ uint64_t to_copy;
ssize_t copied;
src = llapi_mirror_find(layout, start, end, &mirror_end);
struct llapi_resync_comp *comp_array,
int comp_size, uint64_t start, uint64_t end)
{
- size_t count;
+ uint64_t count;
size_t page_size = sysconf(_SC_PAGESIZE);
const size_t buflen = 4 << 20; /* 4M */
void *buf;
while (count > 0) {
uint32_t src;
uint64_t mirror_end = 0;
+ uint64_t bytes_left;
ssize_t bytes_read;
size_t to_read;
size_t to_write;
return -ENOENT;
if (mirror_end == OBD_OBJECT_EOF) {
- to_read = count;
+ bytes_left = count;
} else {
- to_read = MIN(count, mirror_end - pos);
- to_read = (to_read + page_size - 1) & ~(page_size - 1);
+ bytes_left = MIN(count, mirror_end - pos);
+ bytes_left = ((bytes_left - 1) | (page_size - 1)) + 1;
}
- to_read = MIN(buflen, to_read);
+ to_read = MIN(buflen, bytes_left);
bytes_read = llapi_mirror_read(fd, src, buf, to_read, pos);
if (bytes_read == 0) {
}
/* round up to page align to make direct IO happy. */
- to_write = (bytes_read + page_size - 1) & ~(page_size - 1);
+ to_write = ((bytes_read - 1) | (page_size - 1)) + 1;
for (i = 0; i < comp_size; i++) {
ssize_t written;
/* round up to page align to make direct IO happy.
* this implies the last segment to write. */
- to_write = (bytes_read + page_size - 1) & ~(page_size - 1);
+ to_write = ((bytes_read - 1) | (page_size - 1)) + 1;
for (i = 0; i < nr; i++) {
ssize_t written;