[PATCH 12/14] Add ngnfs_dir_mkdir() and debugfs command
Valerie Aurora
val at versity.com
Mon Mar 3 09:23:44 PST 2025
On Sat, Mar 1, 2025 at 12:37 AM Zach Brown <zab at zabbo.net> wrote:
>
> On Thu, Feb 27, 2025 at 03:16:21PM +0100, Valerie Aurora wrote:
> > Makes a directory of the specified name in the current working
> > directory in debugfs.
>
> > +/*
> > + * Create a new directory and add a directory entry referencing it.
> > + */
> > +int ngnfs_dir_mkdir(struct ngnfs_fs_info *nfi, u64 dir_ino, umode_t mode, char *name,
> > + size_t name_len)
> > +{
> > + struct {
> > + struct ngnfs_transaction txn;
> > + struct ngnfs_inode_txn_ref dir;
> > + struct ngnfs_inode_txn_ref new_dir;
> > + u64 ino;
> > + u64 nsec;
> > + struct dirent_args da;
> > + } *op;
> > + int ret;
> > +
> > + op = kmalloc(sizeof(*op), GFP_NOFS);
> > + if (!op) {
> > + ret = -ENOMEM;
> > + goto out;
> > + }
> > +
> > + ngnfs_txn_init(&op->txn);
> > + op->nsec = ktime_to_ns(ktime_get_real());
> > + init_dirent_args(&op->da, name, name_len, 0, mode | S_IFDIR);
> > +
> > + do {
> > + ret = ngnfs_inode_get(nfi, &op->txn, NBF_WRITE, dir_ino, &op->dir) ?:
> > + check_ifmt(op->dir.ninode, S_IFDIR, -ENOTDIR) ?:
> > + ngnfs_inode_alloc(nfi, &op->txn, &op->ino, &op->new_dir) ?:
> > + ngnfs_inode_init(&op->new_dir, op->ino, 1, 2, mode | S_IFDIR, op->nsec,
> > + dir_ino) ?:
> > + update_dirent_args_ino(&op->da, op->ino) ?:
> > + insert_dirent(nfi, &op->txn, &op->dir, &op->da) ?:
> > + update_dir(op->dir.tblk, op->dir.ninode, &op->da, 1);
> > +
> > + } while (ngnfs_txn_retry(nfi, &op->txn, &ret));
> > +
> > + ngnfs_txn_teardown(nfi, &op->txn);
> > + kfree(op);
> > +out:
> > + return ret;
> > +}
>
> This is just _create() with different nlink and mode, right? We
> probably do want different _create, _mkdir, _symlink, _mknod exposed
> calls, but we can have them each call a core_create(), or whatever, that
> takes nlink and dev_t provided by each calling shim.
Makes sense, will do! I'll put in the args that we need now and add
more as as we implement mknod(), etc.
Valerie
More information about the ngnfs-devel
mailing list