shithub: ext4srv

Download patch

ref: aa0d4ea543fec82928fc1ff6f57eb681e1b50716
author: Sigrid Solveig Haflínudóttir <ftrvxmtrx@gmail.com>
date: Tue Nov 3 14:25:47 EST 2020

wip

--- /dev/null
+++ b/.gitignore
@@ -1,0 +1,2 @@
+*.[0125678vqki]
+[0125678vqki].*
--- /dev/null
+++ b/README.md
@@ -1,0 +1,3 @@
+# ext4srv
+
+Ext[2-4] file system for Plan 9. *WIP*
--- /dev/null
+++ b/ext4srv.c
@@ -1,0 +1,265 @@
+#include <ext4.h>
+#include <fcall.h>
+#include <thread.h>
+#include <9p.h>
+
+typedef struct Aux Aux;
+typedef struct Root Root;
+
+struct Aux {
+	int type;
+	Aux *raux;
+	union {
+		ext4_file *file;
+		ext4_dir *dir;
+		Root *r;
+	};
+};
+
+struct Root {
+	struct ext4_blockdev *dev;
+	QLock lock;
+	int id;
+	int f;
+};
+
+enum {
+	Aroot,
+	Afile,
+	Adir,
+
+	Frdonly = 1<<0,
+};
+
+#define BDEV2AUX(bdev) (Aux*)(bdev-1)
+
+static int
+bdopen(struct ext4_blockdev *bdev)
+{
+	Aux *a;
+
+	a = BDEV2AUX(bdev);
+
+	return 0;
+}
+
+static int
+bdread(struct ext4_blockdev *bdev, void *buf, u64int blkid, u32int blkcnt)
+{
+	Aux *a;
+
+	a = BDEV2AUX(bdev);
+
+	return 0;
+}
+
+static int
+bdwrite(struct ext4_blockdev *bdev, const void *buf, u64int blkid, u32int blkcnt)
+{
+	Aux *a;
+
+	a = BDEV2AUX(bdev);
+
+	return 0;
+}
+
+static int
+bdnowrite(struct ext4_blockdev *bdev, const void *buf, u64int blkid, u32int blkcnt)
+{
+	USED(bdev, buf, blkid, blkcnt);
+
+	return -1;
+}
+
+static int
+bdclose(struct ext4_blockdev *bdev)
+{
+	Aux *a;
+
+	a = BDEV2AUX(bdev);
+
+	return 0;
+}
+
+static int
+bdlock(struct ext4_blockdev *bdev)
+{
+	Aux *a;
+
+	a = BDEV2AUX(bdev);
+	qlock(&a->root.b.lock);
+
+	return 0;
+}
+
+static int
+bdunlock(struct ext4_blockdev *bdev)
+{
+	Aux *a;
+
+	a = BDEV2AUX(bdev);
+	qunlock(&a->root.b.lock);
+
+	return 0;
+}
+
+static Aux *
+newroot(char *dev, int flags)
+{
+	static int newid;
+	static QLock lock;
+	int id;
+	Aux *a;
+	Root *r;
+	int f;
+
+	qlock(&lock);
+	id = newid++;
+	if(id < 0){
+		werrstr("root id overflow");
+		/* no unlock on purpose, get stuck forever */
+		return nil;
+	}
+	qunlock(&lock);
+
+	if((f = open(dev, ORDWR)) < 0)
+		return nil;
+
+	if((a = calloc(1, sizeof(*a)+sizeof(*r)) == nil){
+		close(f);
+		return nil;
+	}
+	a->type = Aroot;
+	a->raux = a;
+	a->r = r = (struct ext4_blockdev*)(a+1);
+
+	r->open = bdopen;
+	r->bread = bdread;
+	r->bwrite = (flags & Frdonly) != 0 ? bdwrite : bdnowrite;
+	r->close = bdclose;
+	r->lock = bdlock;
+	r->unlock = bdunlock;
+	r->ph_bsize = 
+
+	return a;
+}
+
+static struct ext4_blockdev_iface iface0 = {
+
+	/**@brief   Block size (bytes): physical*/
+	uint32_t ph_bsize;
+
+	/**@brief   Block count: physical*/
+	uint64_t ph_bcnt;
+
+	/**@brief   Block size buffer: physical*/
+	uint8_t *ph_bbuf;
+
+	/**@brief   Reference counter to block device interface*/
+	uint32_t ph_refctr;
+
+	/**@brief   Physical read counter*/
+	uint32_t bread_ctr;
+
+	/**@brief   Physical write counter*/
+	uint32_t bwrite_ctr;
+
+	/**@brief   User data pointer*/
+	void* p_user;
+
+static void
+rattach(Req *r)
+{
+}
+
+static void
+rauth(Req *r)
+{
+}
+
+static void
+ropen(Req *r)
+{
+}
+
+static void
+rcreate(Req *r)
+{
+}
+
+static void
+rread(Req *r)
+{
+}
+
+static void
+rwrite(Req *r)
+{
+}
+
+static void
+rremove(Req *r)
+{
+}
+
+static void
+rstat(Req *r)
+{
+}
+
+static void
+rwstat(Req *r)
+{
+}
+
+static char *
+rwalk1(Fid *fid, char *name, Qid *qid)
+{
+	return nil;
+}
+
+static char *
+rclone(Fid *oldfid, Fid *newfid)
+{
+	return nil;
+}
+
+static void
+rdestroyfid(Fid *fid)
+{
+}
+
+static void
+rstart(Srv *s)
+{
+}
+
+static void
+rend(Srv *s)
+{
+}
+
+static Srv fs = {
+	.attach = rattach,
+	.open = ropen,
+	.create = rcreate,
+	.read = rread,
+	.write = rwrite,
+	.remove = rremove,
+	.stat = rstat,
+	.wstat = rwstat,
+	.walk1 = rwalk1,
+	.clone = rclone,
+	.destroyfid = rdestroyfid,
+	.start = rstart,
+	.end = rend,
+};
+
+void
+threadmain(int argc, char **argv)
+{
+	ARGBEGIN{
+	}ARGEND
+
+	threadexitsall(nil);
+}
--- /dev/null
+++ b/mkfile
@@ -1,0 +1,14 @@
+</$objtype/mkfile
+
+BIN=/$objtype/bin
+TARG=ext4srv
+CFLAGS=$CFLAGS -p -I../lwext4/include/plan9 -I../lwext4/include
+
+HFILES=\
+
+OFILES=\
+	ext4srv.$O\
+
+default:V: all
+
+</sys/src/cmd/mkone