From: Gabriel Krisman Bertazi <krisman@collabora.com>
To: Hugh Dickins <hughd@google.com>,
Andrew Morton <akpm@linux-foundation.org>,
Amir Goldstein <amir73il@gmail.com>
Cc: Gabriel Krisman Bertazi <krisman@collabora.com>,
kernel@collabora.com, Khazhismel Kumykov <khazhy@google.com>,
Linux MM <linux-mm@kvack.org>,
linux-fsdevel <linux-fsdevel@vger.kernel.org>
Subject: [PATCH RESEND 3/3] shmem: Expose space and accounting error count
Date: Mon, 4 Apr 2022 09:41:37 -0400 [thread overview]
Message-ID: <20220404134137.26284-4-krisman@collabora.com> (raw)
In-Reply-To: <20220404134137.26284-1-krisman@collabora.com>
Exposing these shmem counters through sysfs is particularly useful for
container provisioning, to allow administrators to differentiate between
insufficiently provisioned fs size vs. running out of memory.
Suggested-by: Amir Goldstein <amir73il@gmail.com>
Suggested-by: Khazhy Kumykov <khazhy@google.com>
Signed-off-by: Gabriel Krisman Bertazi <krisman@collabora.com>
---
Documentation/ABI/testing/sysfs-fs-tmpfs | 13 ++++++++++++
mm/shmem.c | 25 ++++++++++++++++++++++++
2 files changed, 38 insertions(+)
create mode 100644 Documentation/ABI/testing/sysfs-fs-tmpfs
diff --git a/Documentation/ABI/testing/sysfs-fs-tmpfs b/Documentation/ABI/testing/sysfs-fs-tmpfs
new file mode 100644
index 000000000000..d32b90949710
--- /dev/null
+++ b/Documentation/ABI/testing/sysfs-fs-tmpfs
@@ -0,0 +1,13 @@
+What: /sys/fs/tmpfs/<disk>/acct_errors
+Date: March 2022
+Contact: "Gabriel Krisman Bertazi" <krisman@collabora.com>
+Description:
+ Track the number of IO errors caused by lack of memory to
+ perform the allocation of a tmpfs block.
+
+What: /sys/fs/tmpfs/<disk>/space_errors
+Date: March 2022
+Contact: "Gabriel Krisman Bertazi" <krisman@collabora.com>
+Description:
+ Track the number of IO errors caused by lack of space
+ in the filesystem to perform the allocation of a tmpfs block.
diff --git a/mm/shmem.c b/mm/shmem.c
index 665d417ba8a8..50d22449d99e 100644
--- a/mm/shmem.c
+++ b/mm/shmem.c
@@ -214,6 +214,7 @@ static inline bool shmem_inode_acct_block(struct inode *inode, long pages)
if (shmem_acct_block(info->flags, pages)) {
sbinfo->acct_errors += 1;
+ sysfs_notify(&sbinfo->s_kobj, NULL, "acct_errors");
return false;
}
@@ -228,6 +229,7 @@ static inline bool shmem_inode_acct_block(struct inode *inode, long pages)
unacct:
sbinfo->space_errors += 1;
+ sysfs_notify(&sbinfo->s_kobj, NULL, "space_errors");
shmem_unacct_blocks(info->flags, pages);
return false;
}
@@ -3586,10 +3588,33 @@ static int shmem_show_options(struct seq_file *seq, struct dentry *root)
#endif /* CONFIG_TMPFS */
#if defined(CONFIG_TMPFS) && defined(CONFIG_SYSFS)
+static ssize_t acct_errors_show(struct kobject *kobj,
+ struct kobj_attribute *attr, char *page)
+{
+ struct shmem_sb_info *sbinfo =
+ container_of(kobj, struct shmem_sb_info, s_kobj);
+
+ return sysfs_emit(page, "%lu\n", sbinfo->acct_errors);
+}
+
+static ssize_t space_errors_show(struct kobject *kobj,
+ struct kobj_attribute *attr, char *page)
+{
+ struct shmem_sb_info *sbinfo =
+ container_of(kobj, struct shmem_sb_info, s_kobj);
+
+ return sysfs_emit(page, "%lu\n", sbinfo->space_errors);
+}
+
#define TMPFS_SB_ATTR_RO(name) \
static struct kobj_attribute tmpfs_sb_attr_##name = __ATTR_RO(name)
+TMPFS_SB_ATTR_RO(acct_errors);
+TMPFS_SB_ATTR_RO(space_errors);
+
static struct attribute *tmpfs_attrs[] = {
+ &tmpfs_sb_attr_acct_errors.attr,
+ &tmpfs_sb_attr_space_errors.attr,
NULL
};
ATTRIBUTE_GROUPS(tmpfs);
--
2.35.1
prev parent reply other threads:[~2022-04-04 13:42 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-04-04 13:41 [PATCH RESEND 0/3] shmem: Allow userspace monitoring of tmpfs for lack of space Gabriel Krisman Bertazi
2022-04-04 13:41 ` [PATCH RESEND 1/3] shmem: Keep track of out-of-memory and out-of-space errors Gabriel Krisman Bertazi
2022-04-04 13:41 ` [PATCH RESEND 2/3] shmem: Introduce /sys/fs/tmpfs support Gabriel Krisman Bertazi
2022-04-04 14:02 ` Al Viro
2022-04-04 19:02 ` Gabriel Krisman Bertazi
2022-04-04 13:41 ` Gabriel Krisman Bertazi [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220404134137.26284-4-krisman@collabora.com \
--to=krisman@collabora.com \
--cc=akpm@linux-foundation.org \
--cc=amir73il@gmail.com \
--cc=hughd@google.com \
--cc=kernel@collabora.com \
--cc=khazhy@google.com \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-mm@kvack.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).