hc
2023-12-11 d2ccde1c8e90d38cee87a1b0309ad2827f3fd30d
kernel/drivers/infiniband/hw/qib/qib_fs.c
....@@ -34,6 +34,7 @@
3434
3535 #include <linux/module.h>
3636 #include <linux/fs.h>
37
+#include <linux/fs_context.h>
3738 #include <linux/mount.h>
3839 #include <linux/pagemap.h>
3940 #include <linux/init.h>
....@@ -492,7 +493,7 @@
492493 remove_file(dir, "flash");
493494 inode_unlock(d_inode(dir));
494495 ret = simple_rmdir(d_inode(root), dir);
495
- d_delete(dir);
496
+ d_drop(dir);
496497 dput(dir);
497498
498499 bail:
....@@ -506,10 +507,10 @@
506507 * after device init. The direct add_cntr_files() call handles adding
507508 * them from the init code, when the fs is already mounted.
508509 */
509
-static int qibfs_fill_super(struct super_block *sb, void *data, int silent)
510
+static int qibfs_fill_super(struct super_block *sb, struct fs_context *fc)
510511 {
511
- struct qib_devdata *dd, *tmp;
512
- unsigned long flags;
512
+ struct qib_devdata *dd;
513
+ unsigned long index;
513514 int ret;
514515
515516 static const struct tree_descr files[] = {
....@@ -524,31 +525,32 @@
524525 goto bail;
525526 }
526527
527
- spin_lock_irqsave(&qib_devs_lock, flags);
528
-
529
- list_for_each_entry_safe(dd, tmp, &qib_dev_list, list) {
530
- spin_unlock_irqrestore(&qib_devs_lock, flags);
528
+ xa_for_each(&qib_dev_table, index, dd) {
531529 ret = add_cntr_files(sb, dd);
532530 if (ret)
533531 goto bail;
534
- spin_lock_irqsave(&qib_devs_lock, flags);
535532 }
536
-
537
- spin_unlock_irqrestore(&qib_devs_lock, flags);
538533
539534 bail:
540535 return ret;
541536 }
542537
543
-static struct dentry *qibfs_mount(struct file_system_type *fs_type, int flags,
544
- const char *dev_name, void *data)
538
+static int qibfs_get_tree(struct fs_context *fc)
545539 {
546
- struct dentry *ret;
547
-
548
- ret = mount_single(fs_type, flags, data, qibfs_fill_super);
549
- if (!IS_ERR(ret))
550
- qib_super = ret->d_sb;
540
+ int ret = get_tree_single(fc, qibfs_fill_super);
541
+ if (ret == 0)
542
+ qib_super = fc->root->d_sb;
551543 return ret;
544
+}
545
+
546
+static const struct fs_context_operations qibfs_context_ops = {
547
+ .get_tree = qibfs_get_tree,
548
+};
549
+
550
+static int qibfs_init_fs_context(struct fs_context *fc)
551
+{
552
+ fc->ops = &qibfs_context_ops;
553
+ return 0;
552554 }
553555
554556 static void qibfs_kill_super(struct super_block *s)
....@@ -589,7 +591,7 @@
589591 static struct file_system_type qibfs_fs_type = {
590592 .owner = THIS_MODULE,
591593 .name = "ipathfs",
592
- .mount = qibfs_mount,
594
+ .init_fs_context = qibfs_init_fs_context,
593595 .kill_sb = qibfs_kill_super,
594596 };
595597 MODULE_ALIAS_FS("ipathfs");