On (23/01/10 15:17), Nhat Pham wrote: > +#ifdef CONFIG_ZPOOL > +/* > + * The second least-significant bit in the object's header identifies if the > + * value stored at the header is a deferred handle from the last reclaim > + * attempt. > + * > + * As noted above, this is valid because we have room for two bits. > + */ > +#define OBJ_DEFERRED_HANDLE_TAG 2 > +#define OBJ_TAG_BITS 2 > +#define OBJ_TAG_MASK (OBJ_ALLOCATED_TAG | OBJ_DEFERRED_HANDLE_TAG) > +#else > +#define OBJ_TAG_BITS 1 > +#define OBJ_TAG_MASK OBJ_ALLOCATED_TAG > +#endif /* CONFIG_ZPOOL */ > + > #define OBJ_INDEX_BITS (BITS_PER_LONG - _PFN_BITS - OBJ_TAG_BITS) > #define OBJ_INDEX_MASK ((_AC(1, UL) << OBJ_INDEX_BITS) - 1) > > @@ -222,6 +238,12 @@ struct link_free { > * Handle of allocated object. > */ > unsigned long handle; > +#ifdef CONFIG_ZPOOL > + /* > + * Deferred handle of a reclaimed object. > + */ > + unsigned long deferred_handle; > +#endif A nit: Do we really need to have that #ifdef and add a member to anon uion? I see that we use ->deferred_handle only in one place, so I'm not sure if it makes code any simpler.