Print this page
Code review comments
*** 26,36 ****
#include "mr_sas.h"
#include "ld_pd_map.h"
/*
* This function will check if FAST IO is possible on this logical drive
! * by checking the EVENT information availabe in the driver
*/
#define MR_LD_STATE_OPTIMAL 3
#define ABS_DIFF(a, b) (((a) > (b)) ? ((a) - (b)) : ((b) - (a)))
static void mr_update_load_balance_params(MR_FW_RAID_MAP_ALL *,
--- 26,36 ----
#include "mr_sas.h"
#include "ld_pd_map.h"
/*
* This function will check if FAST IO is possible on this logical drive
! * by checking the EVENT information available in the driver
*/
#define MR_LD_STATE_OPTIMAL 3
#define ABS_DIFF(a, b) (((a) > (b)) ? ((a) - (b)) : ((b) - (a)))
static void mr_update_load_balance_params(MR_FW_RAID_MAP_ALL *,
*** 208,217 ****
--- 208,219 ----
U8 retval = TRUE;
U32 rowMod;
U32 armQ;
U32 arm;
+ ASSERT(raid->rowDataSize != 0);
+
row = (stripRow / raid->rowDataSize);
if (raid->level == 6) {
U32 logArm = (stripRow % (raid->rowDataSize));
*** 218,228 ****
if (raid->rowSize == 0) {
return (FALSE);
}
rowMod = (row % (raid->rowSize));
armQ = raid->rowSize-1-rowMod;
! arm = armQ+1+logArm;
if (arm >= raid->rowSize)
arm -= raid->rowSize;
physArm = (U8)arm;
} else {
if (raid->modFactor == 0)
--- 220,230 ----
if (raid->rowSize == 0) {
return (FALSE);
}
rowMod = (row % (raid->rowSize));
armQ = raid->rowSize-1-rowMod;
! arm = armQ + 1 + logArm;
if (arm >= raid->rowSize)
arm -= raid->rowSize;
physArm = (U8)arm;
} else {
if (raid->modFactor == 0)
*** 331,341 ****
ref_in_start_stripe = (U16)(ldStartBlock & stripe_mask);
endLba = ldStartBlock + numBlocks - 1;
ref_in_end_stripe = (U16)(endLba & stripe_mask);
endStrip = endLba >> raid->stripeShift;
num_strips = (U8)(endStrip - start_strip + 1);
! /* Check to make sure is not deviding by zero */
if (raid->rowDataSize == 0)
return (FALSE);
start_row = (start_strip / raid->rowDataSize);
endRow = (endStrip / raid->rowDataSize);
/* get the row count */
--- 333,343 ----
ref_in_start_stripe = (U16)(ldStartBlock & stripe_mask);
endLba = ldStartBlock + numBlocks - 1;
ref_in_end_stripe = (U16)(endLba & stripe_mask);
endStrip = endLba >> raid->stripeShift;
num_strips = (U8)(endStrip - start_strip + 1);
! /* Check to make sure is not dividing by zero */
if (raid->rowDataSize == 0)
return (FALSE);
start_row = (start_strip / raid->rowDataSize);
endRow = (endStrip / raid->rowDataSize);
/* get the row count */
*** 347,365 ****
regStart = start_row << raid->stripeShift;
regSize = stripSize;
/* Check if we can send this I/O via FastPath */
if (raid->capability.fpCapable) {
! if (isRead)
io_info->fpOkForIo = (raid->capability.fpReadCapable &&
((num_strips == 1) ||
raid->capability.fpReadAcrossStripe));
! else
io_info->fpOkForIo =
(raid->capability.fpWriteCapable &&
((num_strips == 1) ||
raid->capability.fpWriteAcrossStripe));
} else
io_info->fpOkForIo = FALSE;
/*
--- 349,368 ----
regStart = start_row << raid->stripeShift;
regSize = stripSize;
/* Check if we can send this I/O via FastPath */
if (raid->capability.fpCapable) {
! if (isRead) {
io_info->fpOkForIo = (raid->capability.fpReadCapable &&
((num_strips == 1) ||
raid->capability.fpReadAcrossStripe));
! } else {
io_info->fpOkForIo =
(raid->capability.fpWriteCapable &&
((num_strips == 1) ||
raid->capability.fpWriteAcrossStripe));
+ }
} else
io_info->fpOkForIo = FALSE;
/*
*** 381,395 ****
regStart += ref_in_start_stripe;
regSize = stripSize - ref_in_start_stripe;
}
if (numRows > 2) {
! regSize += (numRows-2) << raid->stripeShift;
}
! if (endStrip == endRow*raid->rowDataSize) {
! regSize += ref_in_end_stripe+1;
} else {
regSize += stripSize;
}
}
--- 384,398 ----
regStart += ref_in_start_stripe;
regSize = stripSize - ref_in_start_stripe;
}
if (numRows > 2) {
! regSize += (numRows - 2) << raid->stripeShift;
}
! if (endStrip == endRow * raid->rowDataSize) {
! regSize += ref_in_end_stripe + 1;
} else {
regSize += stripSize;
}
}