9ns: Add tree_chan_ctl()
authorBarret Rhoden <brho@cs.berkeley.edu>
Mon, 30 Jul 2018 15:33:51 +0000 (11:33 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Mon, 30 Jul 2018 20:06:25 +0000 (16:06 -0400)
This provides a default operation (right now, just errors) for tree file
systems.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
kern/drivers/dev/gtfs.c
kern/drivers/dev/kfs.c
kern/drivers/dev/tmpfs.c
kern/include/tree_file.h
kern/src/ns/tree_file.c

index d2d25b1..9f82c77 100644 (file)
@@ -817,7 +817,6 @@ static void gtfs_sync_gtfs(struct gtfs *gtfs)
        tfs_frontend_for_each(&gtfs->tfs, gtfs_sync_tf);
 }
 
-/* chan_ctl or something can hook into these functions */
 static void gtfs_sync_chan(struct chan *c)
 {
        gtfs_sync_tf(chan_to_tree_file(c));
@@ -840,7 +839,7 @@ static unsigned long gtfs_chan_ctl(struct chan *c, int op, unsigned long a1,
                        gtfs_sync_chan(c);
                return 0;
        default:
-               error(EINVAL, "%s does not support %d", __func__, op);
+               return tree_chan_ctl(c, op, a1, a2, a3, a4);
        }
 }
 
index 3a5541e..aedf7a9 100644 (file)
@@ -310,7 +310,7 @@ static unsigned long kfs_chan_ctl(struct chan *c, int op, unsigned long a1,
        case CCTL_SYNC:
                return 0;
        default:
-               error(EINVAL, "%s does not support %d", __func__, op);
+               return tree_chan_ctl(c, op, a1, a2, a3, a4);
        }
 }
 
index 7a55da6..2ddb280 100644 (file)
@@ -254,7 +254,7 @@ static unsigned long tmpfs_chan_ctl(struct chan *c, int op, unsigned long a1,
        case CCTL_SYNC:
                return 0;
        default:
-               error(EINVAL, "%s does not support %d", __func__, op);
+               return tree_chan_ctl(c, op, a1, a2, a3, a4);
        }
 }
 
index 7bd1f00..51ddf5e 100644 (file)
@@ -265,6 +265,9 @@ size_t tree_chan_stat(struct chan *c, uint8_t *m_buf, size_t m_buf_sz);
 size_t tree_chan_wstat(struct chan *c, uint8_t *m_buf, size_t m_buf_sz);
 struct fs_file *tree_chan_mmap(struct chan *c, struct vm_region *vmr, int prot,
                                int flags);
+unsigned long tree_chan_ctl(struct chan *c, int op, unsigned long a1,
+                            unsigned long a2, unsigned long a3,
+                            unsigned long a4);
 
 struct chan *tree_file_alloc_chan(struct tree_file *tf, struct dev *dev,
                                   char *name);
index 377e572..d4fe650 100644 (file)
@@ -1044,6 +1044,16 @@ struct fs_file *tree_chan_mmap(struct chan *c, struct vm_region *vmr, int prot,
        return f;
 }
 
+unsigned long tree_chan_ctl(struct chan *c, int op, unsigned long a1,
+                            unsigned long a2, unsigned long a3,
+                            unsigned long a4)
+{
+       switch (op) {
+       default:
+               error(EINVAL, "%s does not support chanctl %d", chan_dev_name(c), op);
+       }
+}
+
 /* Given a tree file, construct a chan that points to the TF for the given
  * device.  Careful with this - it's for bootstrapping. */
 struct chan *tree_file_alloc_chan(struct tree_file *tf, struct dev *dev,