[sheepdog] [PATCH 2/4] plain store: add support to non-aglined read/write
Liu Yuan
namei.unix at gmail.com
Wed May 22 18:21:59 CEST 2013
On 05/22/2013 06:23 PM, MORITA Kazutaka wrote:
>> --- a/sheep/plain_store.c
>> +++ b/sheep/plain_store.c
>> @@ -37,6 +37,11 @@ static int get_open_flags(uint64_t oid, bool create)
>> return flags;
>> }
>>
>> +static inline bool flags_direct(int flags)
>> +{
>> + return flags & O_DIRECT;
>> +}
>> +
>
> Does this function really help us? Inlining (flags & O_DIRECT) looks
> simpler and easier to understand to me.
>
>
>> static int get_obj_path(uint64_t oid, char *path)
>> {
>> return snprintf(path, PATH_MAX, "%s/%016" PRIx64,
>> @@ -90,6 +95,38 @@ static int err_to_sderr(char *path, uint64_t oid, int err)
>> }
>> }
>>
>> +#define sector_algined(x) ({(x) % SECTOR_SIZE == 0;})
>
> I prefer it to be a inline function, and I think
> ((x) & (SECTOR_SIZE - 1)) is faster.
>
>
Can't be inline because off and len has different type.
>> +
>> +static inline bool is_aligned(const struct siocb *iocb)
>
> The name 'is_aligned' is too generic. 'iocb_is_aligned' looks better.
>
>> +{
>> + return sector_algined(iocb->offset) && sector_algined(iocb->length);
>> +}
>> +
>> +static inline int do_aligned_write(uint64_t oid, const struct siocb *iocb)
>> +{
>> + struct siocb new = {
>> + .offset = round_down(iocb->offset, SECTOR_SIZE),
>> + .length = round_up(iocb->offset + iocb->length, SECTOR_SIZE) -
>> + round_down(iocb->offset, SECTOR_SIZE),
>> + .epoch = iocb->epoch,
>> + };
>> + int ret = SD_RES_SUCCESS;
>> +
>> + sd_dprintf("new %"PRIu64 ", %"PRIu32 ", old %"PRIu64 ", %"PRIu32,
>> + new.offset, new.length, iocb->offset, iocb->length);
>> + new.buf = xvalloc(new.length);
>
> I wonder if it is a good way to read the whole length. The only
> missing data is a sub-sector, which is less than 512 bytes. How about
> reading only [new.offset..iocb->offset] and
> [iocb->length..new.length]?
>
I don't get it. What you mean by whole length? Actually I only read what
is needed. For example, off=513, length=512, with my calculation, we
only read [512, 1536], no more no less.
Thanks,
Yuan
More information about the sheepdog
mailing list