sizeof(*(obj)) - offsetofend(typeof(*(obj)), member));   \
 })
 
+/**
+ * memset_startat - Set a value starting at a member to the end of a struct
+ *
+ * @obj: Address of target struct instance
+ * @v: Byte value to repeatedly write
+ * @member: struct member to start writing at
+ *
+ * Note that if there is padding between the prior member and the target
+ * member, memset_after() should be used to clear the prior padding.
+ */
+#define memset_startat(obj, v, member)                                 \
+({                                                                     \
+       u8 *__ptr = (u8 *)(obj);                                        \
+       typeof(v) __val = (v);                                          \
+       memset(__ptr + offsetof(typeof(*(obj)), member), __val,         \
+              sizeof(*(obj)) - offsetof(typeof(*(obj)), member));      \
+})
+
 /**
  * str_has_prefix - Test if a string has a given prefix
  * @str: The string to test
 
                          0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72,
                        },
        };
+       struct some_bytes startat = {
+               .data = { 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+                         0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79,
+                         0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79,
+                         0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79,
+                       },
+       };
        struct some_bytes dest = { };
        int count, value;
        u8 *ptr;
        memset_after(&dest, 0x72, three);
        compare("memset_after()", dest, after);
 
+       /* Verify memset_startat() */
+       dest = control;
+       memset_startat(&dest, 0x79, four);
+       compare("memset_startat()", dest, startat);
 #undef TEST_OP
 }