From: Valerie Aurora <val@versity.com>
To: rpdfs-devel@lists.linux.dev
Cc: Valerie Aurora <val@versity.com>
Subject: [PATCH 2/2] Add rpdfs_rmdir()
Date: Tue, 24 Feb 2026 17:41:57 +0100 [thread overview]
Message-ID: <20260224164157.2591-3-val@versity.com> (raw)
In-Reply-To: <20260224164157.2591-1-val@versity.com>
Copied from rpdfs_rename() and the extra bits removed.
Signed-off-by: Valerie Aurora <val@versity.com>
---
fs/rpdfs/dir.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 51 insertions(+)
diff --git a/fs/rpdfs/dir.c b/fs/rpdfs/dir.c
index 9b33453ad5f6..cff995a7618c 100644
--- a/fs/rpdfs/dir.c
+++ b/fs/rpdfs/dir.c
@@ -541,6 +541,56 @@ static int rpdfs_unlink(struct inode *dir, struct dentry *dentry)
return ret;
}
+static int rpdfs_rmdir(struct inode *dir, struct dentry *dentry)
+{
+ struct rpdfs_fs_info *rfi = RPDFS_INODE_FS(dir);
+ struct inode *inode = d_inode(dentry);
+ struct key_dent *kd = NULL;
+ DECLARE_RPDFS_TXN(txn);
+ int ret;
+
+ kd = alloc_key_dent(dentry, inode);
+ if (!kd) {
+ ret = -ENOMEM;
+ goto out;
+ }
+
+ /* prepare all the blocks in the txn */
+ do {
+ ret = rpdfs_inode_txn_prepare(rfi, &txn, dir, RBAF_WRITE) ?:
+ rpdfs_inode_txn_prepare(rfi, &txn, inode, RBAF_WRITE) ?:
+ prepare_remove_entry(rfi, &txn, dir, kd);
+ } while (rpdfs_txn_retry(rfi, &txn, &ret));
+ if (ret < 0)
+ goto out;
+
+ /* apply changes to block structures */
+ apply_remove_entry(rfi, &txn, dir, kd);
+
+ /* update vfs inodes: first dir sizes and times */
+ i_size_write(dir, i_size_read(dir) - dentry->d_name.len);
+ inode_set_mtime_to_ts(dir, inode_set_ctime_current(dir));
+
+ /* now inode nlink and times */
+ if (inode->i_nlink < 2)
+ pr_warn("deleting dir %.*s with link count %d < 2",
+ dentry->d_name.len, dentry->d_name.name, inode->i_nlink);
+ else
+ clear_nlink(inode);
+ inode_set_ctime_current(inode);
+
+ /* update block storage of vfs inodes */
+ rpdfs_inode_txn_update(rfi, &txn, dir);
+ rpdfs_inode_txn_update(rfi, &txn, inode);
+
+ ret = 0;
+out:
+ rpdfs_txn_reset(rfi, &txn);
+ kfree(kd);
+
+ return ret;
+}
+
/*
* The vfs has verified the cached directories. Our inode refresh will
* fail if the inodes have been reused, so we don't have to test if
@@ -731,6 +781,7 @@ const struct inode_operations rpdfs_dir_iops = {
.mkdir = rpdfs_mkdir,
.rename = rpdfs_rename,
.unlink = rpdfs_unlink,
+ .rmdir = rpdfs_rmdir,
};
const struct file_operations rpdfs_dir_fops = {
--
2.49.0
next prev parent reply other threads:[~2026-02-24 16:42 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-24 16:41 [PATCH 0/2] linux-rpdfs: rmdir() and unlink() Valerie Aurora
2026-02-24 16:41 ` [PATCH 1/2] Add rpdfs_unlink() Valerie Aurora
2026-02-24 16:41 ` Valerie Aurora [this message]
2026-02-25 23:10 ` [PATCH 2/2] Add rpdfs_rmdir() Zach Brown
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=20260224164157.2591-3-val@versity.com \
--to=val@versity.com \
--cc=rpdfs-devel@lists.linux.dev \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.