On 11/17/2011 06:52 PM, Liu Yuan wrote: > On 11/17/2011 06:27 PM, MORITA Kazutaka wrote: > >> I think this is still not generic... If this is specific one to >> simple_store, move it to simple_store.c. >> >> > > > I use siocb for interface functions internal information passing *and* > for higher level code to specify flags, length, buf, offset to store.rw > too. > > This is just a dirty hack, enabling me to make small changes to the > previous code to work with simple store correctly. > > My intention is that siocb is not specific to simple store. we need a > channel to send information to store.open(), then it can use it > communicate with store.read/write/close. > > So I think siocb would be globally seen by higher level code. > > if we don't use siocb, then what do you suggest to use for higher level > information (for e.g, flags, length, buf, offset) to store's interfaces? > > We can't simple pass a void *ptr, without knowing the internal structure > for it. > > and even if later, siocb get changed, we don't need to change current > (oid, void *priv) interface. > > This is my own thought, maybe there is better idea. > > >> Remove the 'static' modifier in store.c if you want to use obj_path in >> this file. >> > > > Umm, obj_path is not static in my repo...I guess some patch remove it > already. I'll rebase it. > > >>> + ret = store_write_last_sector(oid, &fd); >> >> store_write_last_sector() expects struct siocb in the second argument. >> > > > Good catch, it is my carelessness. > >> >> I think we should define opaque as 'void *', get a store_driver >> specific opaque in the argument of store.open(), and pass it to >> store.read()/write()/close(). This is also what Christoph suggested. >> Am i wrong? >> > > > Like above, so it is totally opaque, where can we pass flags, length, > offset to store driver? > And more, length, offset is critical for later partial data object read/write, if we support huge data size. So we can't assume an interface just need (key, value). Thanks, Yuan |