Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
x(bi_promote_target, 16) \
x(bi_foreground_target, 16) \
x(bi_background_target, 16) \
- x(bi_erasure_code, 16)
+ x(bi_erasure_code, 16) \
+ x(bi_fields_set, 16)
/* subset of BCH_INODE_FIELDS */
#define BCH_INODE_OPTS() \
x(background_target, 16) \
x(erasure_code, 16)
+enum inode_opt_id {
+#define x(name, ...) \
+ Inode_opt_##name,
+ BCH_INODE_OPTS()
+#undef x
+ Inode_opt_nr,
+};
+
enum {
/*
* User flags (get/settable with FS_IOC_*FLAGS, correspond to FS_*_FL
{
struct flags_set *s = p;
- bi->bi_project = s->projid;
+ if (s->projid != bi->bi_project) {
+ if (s->projid)
+ bi->bi_fields_set |= 1U << Inode_opt_project;
+ else
+ bi->bi_fields_set &= ~(1U << Inode_opt_project);
+
+ bi->bi_project = s->projid;
+ }
return bch2_inode_flags_set(inode, bi, p);
}
#define x(_name, ...) \
case Opt_##_name: \
inode->bi_##_name = v; \
+ if (v) \
+ inode->bi_fields_set |= 1U << Inode_opt_##_name;\
+ else \
+ inode->bi_fields_set &= ~(1U << Inode_opt_##_name);\
break;
BCH_INODE_OPTS()
#undef x