|
@@ -473,15 +473,19 @@ static inline unsigned _ubh_find_last_zero_bit_(
|
|
|
static inline int _ubh_isblockset_(struct ufs_sb_private_info * uspi,
|
|
|
struct ufs_buffer_head * ubh, unsigned begin, unsigned block)
|
|
|
{
|
|
|
+ u8 mask;
|
|
|
switch (uspi->s_fpb) {
|
|
|
case 8:
|
|
|
return (*ubh_get_addr (ubh, begin + block) == 0xff);
|
|
|
case 4:
|
|
|
- return (*ubh_get_addr (ubh, begin + (block >> 1)) == (0x0f << ((block & 0x01) << 2)));
|
|
|
+ mask = 0x0f << ((block & 0x01) << 2);
|
|
|
+ return (*ubh_get_addr (ubh, begin + (block >> 1)) & mask) == mask;
|
|
|
case 2:
|
|
|
- return (*ubh_get_addr (ubh, begin + (block >> 2)) == (0x03 << ((block & 0x03) << 1)));
|
|
|
+ mask = 0x03 << ((block & 0x03) << 1);
|
|
|
+ return (*ubh_get_addr (ubh, begin + (block >> 2)) & mask) == mask;
|
|
|
case 1:
|
|
|
- return (*ubh_get_addr (ubh, begin + (block >> 3)) == (0x01 << (block & 0x07)));
|
|
|
+ mask = 0x01 << (block & 0x07);
|
|
|
+ return (*ubh_get_addr (ubh, begin + (block >> 3)) & mask) == mask;
|
|
|
}
|
|
|
return 0;
|
|
|
}
|