XFS_RANDOM_REFCOUNT_FINISH_ONE,
        XFS_RANDOM_BMAP_FINISH_ONE,
        XFS_RANDOM_AG_RESV_CRITICAL,
+       XFS_RANDOM_DROP_WRITES,
 };
 
 struct xfs_errortag_attr {
 XFS_ERRORTAG_ATTR_RW(refcount_finish_one,      XFS_ERRTAG_REFCOUNT_FINISH_ONE);
 XFS_ERRORTAG_ATTR_RW(bmap_finish_one,  XFS_ERRTAG_BMAP_FINISH_ONE);
 XFS_ERRORTAG_ATTR_RW(ag_resv_critical, XFS_ERRTAG_AG_RESV_CRITICAL);
+XFS_ERRORTAG_ATTR_RW(drop_writes,      XFS_ERRTAG_DROP_WRITES);
 
 static struct attribute *xfs_errortag_attrs[] = {
        XFS_ERRORTAG_ATTR_LIST(noerror),
        XFS_ERRORTAG_ATTR_LIST(refcount_finish_one),
        XFS_ERRORTAG_ATTR_LIST(bmap_finish_one),
        XFS_ERRORTAG_ATTR_LIST(ag_resv_critical),
+       XFS_ERRORTAG_ATTR_LIST(drop_writes),
        NULL,
 };
 
 
 #define XFS_ERRTAG_REFCOUNT_FINISH_ONE                 25
 #define XFS_ERRTAG_BMAP_FINISH_ONE                     26
 #define XFS_ERRTAG_AG_RESV_CRITICAL                    27
-#define XFS_ERRTAG_MAX                                 28
+/*
+ * DEBUG mode instrumentation to test and/or trigger delayed allocation
+ * block killing in the event of failed writes. When enabled, all
+ * buffered writes are silenty dropped and handled as if they failed.
+ * All delalloc blocks in the range of the write (including pre-existing
+ * delalloc blocks!) are tossed as part of the write failure error
+ * handling sequence.
+ */
+#define XFS_ERRTAG_DROP_WRITES                         28
+#define XFS_ERRTAG_MAX                                 29
 
 /*
  * Random factors for above tags, 1 means always, 2 means 1/2 time, etc.
 #define XFS_RANDOM_REFCOUNT_FINISH_ONE                 1
 #define XFS_RANDOM_BMAP_FINISH_ONE                     1
 #define XFS_RANDOM_AG_RESV_CRITICAL                    4
+#define XFS_RANDOM_DROP_WRITES                         1
 
 #ifdef DEBUG
 extern int xfs_errortag_init(struct xfs_mount *mp);
 
         * Behave as if the write failed if drop writes is enabled. Set the NEW
         * flag to force delalloc cleanup.
         */
-       if (xfs_mp_drop_writes(mp)) {
+       if (XFS_TEST_ERROR(false, mp, XFS_ERRTAG_DROP_WRITES)) {
                iomap->flags |= IOMAP_F_NEW;
                written = 0;
        }
 
         */
        unsigned int            *m_errortag;
        struct xfs_kobj         m_errortag_kobj;
-
-       /*
-        * DEBUG mode instrumentation to test and/or trigger delayed allocation
-        * block killing in the event of failed writes. When enabled, all
-        * buffered writes are silenty dropped and handled as if they failed.
-        * All delalloc blocks in the range of the write (including pre-existing
-        * delalloc blocks!) are tossed as part of the write failure error
-        * handling sequence.
-        */
-       bool                    m_drop_writes;
 #endif
 } xfs_mount_t;
 
        return (xfs_agblock_t) do_div(ld, mp->m_sb.sb_agblocks);
 }
 
-#ifdef DEBUG
-static inline bool
-xfs_mp_drop_writes(struct xfs_mount *mp)
-{
-       return mp->m_drop_writes;
-}
-#else
-static inline bool
-xfs_mp_drop_writes(struct xfs_mount *mp)
-{
-       return 0;
-}
-#endif
-
 /* per-AG block reservation data structures*/
 enum xfs_ag_resv_type {
        XFS_AG_RESV_NONE = 0,
 
        return container_of(kobj, struct xfs_mount, m_kobj);
 }
 
-#ifdef DEBUG
-
-STATIC ssize_t
-drop_writes_store(
-       struct kobject          *kobject,
-       const char              *buf,
-       size_t                  count)
-{
-       struct xfs_mount        *mp = to_mp(kobject);
-       int                     ret;
-       int                     val;
-
-       ret = kstrtoint(buf, 0, &val);
-       if (ret)
-               return ret;
-
-       if (val == 1)
-               mp->m_drop_writes = true;
-       else if (val == 0)
-               mp->m_drop_writes = false;
-       else
-               return -EINVAL;
-
-       return count;
-}
-
-STATIC ssize_t
-drop_writes_show(
-       struct kobject          *kobject,
-       char                    *buf)
-{
-       struct xfs_mount        *mp = to_mp(kobject);
-
-       return snprintf(buf, PAGE_SIZE, "%d\n", mp->m_drop_writes ? 1 : 0);
-}
-XFS_SYSFS_ATTR_RW(drop_writes);
-
-#endif /* DEBUG */
-
 static struct attribute *xfs_mp_attrs[] = {
-#ifdef DEBUG
-       ATTR_LIST(drop_writes),
-#endif
        NULL,
 };