[pnfs] [PATCH 03/13] pnfsd: Simplify getdeviceinfo export ops.
Dean Hildebrand
seattleplus at gmail.com
Sat Jan 12 17:01:45 EST 2008
Benny Halevy wrote:
> Dean Hildebrand wrote:
>>
>>
>> Benny Halevy wrote:
>>> Dean, this patch would break compilation of the tree
>>> so it makes the patchset non-bisectable. The main problem
>>> with that is if a regression is found we can't use git-bisect
>>> to semi-automatically find the offending patch in O(log(#patches)).
>>>
>> I agree, but I'm not sure how. That patch changes a data structure
>> that is used in a lot of different places. Should I merge all
>> patches together that are affected by the change to this data
>> structure? (I think that is almost all of my patches)
> I'm not sure what is the best approach in this case, but in general,
> off the top of my head we can use several techniques:
>
> 1. make the change atomic, i.e. make the change in data structures and
> in the code using them
> in the same patch.
ok, I guess these days bisection is more important than small patches,
so I'll go with option 1.
Dean
>
> 2. If that is too complicated, consider making a serious of patches
> that implements the above
> in layers, each atomically changing part of the data structure and its
> usage.
>
> 3. If the approaches above still don't work, the new data structures
> can be given new names
> and their usage can be implemented gradually, e.g. one function in a
> patch.
> Once everything got converted the old data structures can be deleted,
> and if really wanted
> the new structures can then be renamed to the old names (in an atomic
> change).
> Each patch in this series should at least compile and ideally run
> correctly.
> If there's a correctness issue while the new API is introduced you can
> introduce the
> new functions with new names, without removing the old code yet (and I
> think it makes sense
> in this case because the change in functionality is through enough
> that the diff in the patches
> that you sent that show the new code with the existing code in a
> merged view are almost useless
> as they don't help understanding what you did but rather make it
> harder...)
> and then when the new API is fully implemented, change the layer that
> uses it and remove
> the old implementation and interface.
>
> Benny
>
>> Dean
>>> Also, minor nit below.
>>>
>>> Thanks for sending the patches!
>>>
>>> Benny
>>>
>>> On Jan. 10, 2008, 23:38 +0200, seattleplus at gmail.com wrote:
>>> <snip>
>>>
>>>
>>>> @@ -35,6 +35,35 @@ enum fid_type {
>>>> FILEID_INO32_GEN_PARENT = 2,
>>>> };
>>>>
>>>> +#if defined(CONFIG_PNFS)
>>>> +
>>>> +/* XDR stream arguments and results. Exported file system uses this
>>>> + * struct to encode information and return how many bytes were
>>>> encoded.
>>>> + */
>>>> +struct pnfs_xdr_info {
>>>> + u32 *p; /* in */
>>>> + u32 *end; /* in */
>>>> + u32 maxcount; /* in */
>>>> + u32 bytes_written; /* out */
>>>> +};
>>>> +
>>>> +/* Used by get_device_info to encode a device (da_addr_body in spec)
>>>> + * Args:
>>>> + * xdr - xdr stream
>>>> + * device - pointer to device to be encoded
>>>> +*/
>>>> +typedef int (*pnfs_encodedev_t)(struct pnfs_xdr_info *xdr, void
>>>> *device);
>>>> +
>>>> +/* Arguments for get_device_info */
>>>> +struct pnfs_devinfo_arg {
>>>> + u32 type;
>>>> + u32 devid;
>>>> + struct pnfs_xdr_info xdr;
>>>> + pnfs_encodedev_t func;
>>>> +};
>>>> +
>>>> +#endif
>>>>
>>>
>>> please add comment after #endif, like this:
>>> #endif /* CONFIG_PNFS */
>>>
>>>
>>>
>
More information about the pNFS
mailing list