On 10/18/2023 2:17 AM, Bart Van Assche wrote: > - * Write life time hint values. > - * Stored in struct inode as u8. > - */ > -enum rw_hint { > - WRITE_LIFE_NOT_SET = 0, > - WRITE_LIFE_NONE = RWH_WRITE_LIFE_NONE, > - WRITE_LIFE_SHORT = RWH_WRITE_LIFE_SHORT, > - WRITE_LIFE_MEDIUM = RWH_WRITE_LIFE_MEDIUM, > - WRITE_LIFE_LONG = RWH_WRITE_LIFE_LONG, > - WRITE_LIFE_EXTREME = RWH_WRITE_LIFE_EXTREME, > -}; > - > /* Match RWF_* bits to IOCB bits */ > #define IOCB_HIPRI (__force int) RWF_HIPRI > #define IOCB_DSYNC (__force int) RWF_DSYNC > @@ -677,7 +665,7 @@ struct inode { > spinlock_t i_lock; /* i_blocks, i_bytes, maybe i_size */ > unsigned short i_bytes; > u8 i_blkbits; > - u8 i_write_hint; > + enum rw_hint i_write_hint; > blkcnt_t i_blocks; > > #ifdef __NEED_I_SIZE_ORDERED > diff --git a/include/linux/rw_hint.h b/include/linux/rw_hint.h > new file mode 100644 > index 000000000000..4a7d28945973 > --- /dev/null > +++ b/include/linux/rw_hint.h > @@ -0,0 +1,20 @@ > +/* SPDX-License-Identifier: GPL-2.0 */ > +#ifndef _LINUX_RW_HINT_H > +#define _LINUX_RW_HINT_H > + > +#include <linux/build_bug.h> > +#include <linux/compiler_attributes.h> > + > +/* Block storage write lifetime hint values. */ > +enum rw_hint { > + WRITE_LIFE_NOT_SET = 0, /* RWH_WRITE_LIFE_NOT_SET */ > + WRITE_LIFE_NONE = 1, /* RWH_WRITE_LIFE_NONE */ > + WRITE_LIFE_SHORT = 2, /* RWH_WRITE_LIFE_SHORT */ > + WRITE_LIFE_MEDIUM = 3, /* RWH_WRITE_LIFE_MEDIUM */ > + WRITE_LIFE_LONG = 4, /* RWH_WRITE_LIFE_LONG */ > + WRITE_LIFE_EXTREME = 5, /* RWH_WRITE_LIFE_EXTREME */ > +} __packed; > + > +static_assert(sizeof(enum rw_hint) == 1); Does it make sense to do away with these, and have temperature-neutral names instead e.g., WRITE_LIFE_1, WRITE_LIFE_2? With the current choice: - If the count goes up (beyond 5 hints), infra can scale fine but these names do not. Imagine ULTRA_EXTREME after EXTREME. - Applications or in-kernel users can specify LONG hint with data that actually has a SHORT lifetime. Nothing really ensures that LONG is really LONG. Temperature-neutral names seem more generic/scalable and do not present the unnecessary need to be accurate with relative temperatures.