Dave Hansen wrote: > On Thu, 2009-07-23 at 10:44 +0900, KAMEZAWA Hiroyuki wrote: >> The caller can't know whether >> - there are no entry or >> - NULL(0) is stored at the array. >> >> Then, he has to check gotten value is valid or not by himself. > > I think you may be reading this bit wrong. Either that, or I badly > miscoded it. :) The flex_array_get() code should returns NULL in cases > of error or the *address* of the data element. It will actually return > an address pointing into the second-level page. > > NULL's two meaning here are: > 1. No element was ever put() here and thus there's no data page > 2. Your index was out of bounds > > (1) is a little fuzzy here. It of course doesn't absolutely guarantee > that no put() was done since we just use the data page's existence to > tell. This is certainly no worse than a normal C array would be, > though. > ok, maybe not necessary to handle. >> Can't we return -ENOENT here(especially when prealloc() is called) ? >> But ah, anyway, all-zero elements in allocated array exists ;( >> and the user can get value from an entry never be put. >> >> If we can fill the first 4bytes of _unused_ index by some magic code >> like this >> #define FLEX_ARRAY_UNUSED_MAGIC (0xa5a5a5a5) >> (if maintaining bitmap/status of usage is nonsense) >> and flex_array_get() can return -ENOENT, the users will feel easy. >> >> Overprotection ;) ? > > I intentionally didn't use kzalloc() for the data pages. I figured that > users will either initialize it themselves or pass in __GFP_ZERO. I've > added a comment to clarify this. > sorry for noise. I just felt that this code expects users know all they really do. As said, seems nice :) thank you. Reviewed-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@xxxxxxxxxxxxxx> _______________________________________________ Containers mailing list Containers@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/containers