Module Name: src
Committed By: pooka
Date: Mon Aug 3 14:24:58 UTC 2009
Modified Files:
src/lib/libukfs: ukfs.c
Log Message:
* use new etfs interface
+ attempt to register only if we can stat() the devpath. this works
around e.g. nfs devpath, which is useless to register to etfs
XXX: the caller should decide
To generate a diff of this commit:
cvs rdiff -u -r1.32 -r1.33 src/lib/libukfs/ukfs.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/lib/libukfs/ukfs.c
diff -u src/lib/libukfs/ukfs.c:1.32 src/lib/libukfs/ukfs.c:1.33
--- src/lib/libukfs/ukfs.c:1.32 Thu Jul 23 01:01:31 2009
+++ src/lib/libukfs/ukfs.c Mon Aug 3 14:24:58 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: ukfs.c,v 1.32 2009/07/23 01:01:31 pooka Exp $ */
+/* $NetBSD: ukfs.c,v 1.33 2009/08/03 14:24:58 pooka Exp $ */
/*
* Copyright (c) 2007, 2008 Antti Kantee. All Rights Reserved.
@@ -180,6 +180,8 @@
struct ukfs *fs = NULL;
int rv = 0, devfd = -1, rdonly;
int mounted = 0;
+ int regged = 0;
+ int doreg = 0;
/*
* Try open and lock the device. if we can't open it, assume
@@ -222,6 +224,7 @@
close(devfd);
devfd = -1;
}
+ doreg = 1;
}
fs = malloc(sizeof(struct ukfs));
@@ -239,7 +242,13 @@
}
}
- rump_fakeblk_register(devpath);
+ if (doreg) {
+ rv = rump_etfs_register(devpath, devpath, RUMP_ETFS_BLK);
+ if (rv) {
+ goto out;
+ }
+ regged = 1;
+ }
rv = rump_sys_mount(vfsname, mountpath, mntflags, arg, alen);
if (rv) {
goto out;
@@ -254,7 +263,9 @@
goto out;
}
- fs->ukfs_devpath = strdup(devpath);
+ if (regged) {
+ fs->ukfs_devpath = strdup(devpath);
+ }
fs->ukfs_mountpath = strdup(mountpath);
fs->ukfs_cdir = ukfs_getrvp(fs);
pthread_spin_init(&fs->ukfs_spin, PTHREAD_PROCESS_SHARED);
@@ -272,6 +283,8 @@
}
if (mounted)
rump_sys_unmount(mountpath, MNT_FORCE);
+ if (regged)
+ rump_etfs_remove(devpath);
if (devfd != -1) {
flock(devfd, LOCK_UN);
close(devfd);
@@ -301,8 +314,10 @@
}
}
- rump_fakeblk_deregister(fs->ukfs_devpath);
- free(fs->ukfs_devpath);
+ if (fs->ukfs_devpath) {
+ rump_etfs_remove(fs->ukfs_devpath);
+ free(fs->ukfs_devpath);
+ }
free(fs->ukfs_mountpath);
pthread_spin_destroy(&fs->ukfs_spin);