xfs: resurrect debug mode drop buffered writes mechanism
A debug mode write failure mechanism was introduced to XFS in commit801cc4e17a
("xfs: debug mode forced buffered write failure") to facilitate targeted testing of delalloc indirect reservation management from userspace. This code was subsequently rendered ineffective by the move to iomap based buffered writes in commit68a9f5e700
("xfs: implement iomap based buffered write path"). This likely went unnoticed because the associated userspace code had not made it into xfstests. Resurrect this mechanism to facilitate effective indlen reservation testing from xfstests. The move to iomap based buffered writes relocated the hook this mechanism needs to return write failure from XFS to generic code. The failure trigger must remain in XFS. Given that limitation, convert this from a write failure mechanism to one that simply drops writes without returning failure to userspace. Rename all "fail_writes" references to "drop_writes" to illustrate the point. This is more hacky than preferred, but still triggers the XFS error handling behavior required to drive the indlen tests. This is only available in DEBUG mode and for testing purposes only. Signed-off-by: Brian Foster <bfoster@redhat.com> Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Este cometimento está contido em:

cometido por
Darrick J. Wong

ascendente
fa7f138ac4
cometimento
9dbddd7b0c
@@ -93,7 +93,7 @@ to_mp(struct kobject *kobject)
|
||||
#ifdef DEBUG
|
||||
|
||||
STATIC ssize_t
|
||||
fail_writes_store(
|
||||
drop_writes_store(
|
||||
struct kobject *kobject,
|
||||
const char *buf,
|
||||
size_t count)
|
||||
@@ -107,9 +107,9 @@ fail_writes_store(
|
||||
return ret;
|
||||
|
||||
if (val == 1)
|
||||
mp->m_fail_writes = true;
|
||||
mp->m_drop_writes = true;
|
||||
else if (val == 0)
|
||||
mp->m_fail_writes = false;
|
||||
mp->m_drop_writes = false;
|
||||
else
|
||||
return -EINVAL;
|
||||
|
||||
@@ -117,21 +117,21 @@ fail_writes_store(
|
||||
}
|
||||
|
||||
STATIC ssize_t
|
||||
fail_writes_show(
|
||||
drop_writes_show(
|
||||
struct kobject *kobject,
|
||||
char *buf)
|
||||
{
|
||||
struct xfs_mount *mp = to_mp(kobject);
|
||||
|
||||
return snprintf(buf, PAGE_SIZE, "%d\n", mp->m_fail_writes ? 1 : 0);
|
||||
return snprintf(buf, PAGE_SIZE, "%d\n", mp->m_drop_writes ? 1 : 0);
|
||||
}
|
||||
XFS_SYSFS_ATTR_RW(fail_writes);
|
||||
XFS_SYSFS_ATTR_RW(drop_writes);
|
||||
|
||||
#endif /* DEBUG */
|
||||
|
||||
static struct attribute *xfs_mp_attrs[] = {
|
||||
#ifdef DEBUG
|
||||
ATTR_LIST(fail_writes),
|
||||
ATTR_LIST(drop_writes),
|
||||
#endif
|
||||
NULL,
|
||||
};
|
||||
|
Criar uma nova questão referindo esta
Bloquear um utilizador