socsvn commit: r237289 - soc2012/oleksandr/udf-head/sys/fs/udf2
oleksandr at FreeBSD.org
oleksandr at FreeBSD.org
Fri Jun 8 08:36:32 UTC 2012
Author: oleksandr
Date: Fri Jun 8 08:36:29 2012
New Revision: 237289
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=237289
Log:
Add some comments and debug section
Modified:
soc2012/oleksandr/udf-head/sys/fs/udf2/udf.h
soc2012/oleksandr/udf-head/sys/fs/udf2/udf_mount.h
soc2012/oleksandr/udf-head/sys/fs/udf2/udf_subr.c
soc2012/oleksandr/udf-head/sys/fs/udf2/udf_vfsops.c
Modified: soc2012/oleksandr/udf-head/sys/fs/udf2/udf.h
==============================================================================
--- soc2012/oleksandr/udf-head/sys/fs/udf2/udf.h Fri Jun 8 07:44:42 2012 (r237288)
+++ soc2012/oleksandr/udf-head/sys/fs/udf2/udf.h Fri Jun 8 08:36:29 2012 (r237289)
@@ -32,10 +32,57 @@
/* lets see debug stuff for now */
#define DEBUG
+/* debug section */
+extern int udf_verbose;
/* undefine UDF_COMPLETE_DELETE to need `purge'; but purge is not implemented */
#define UDF_COMPLETE_DELETE
+/* debug categories */
+#define UDF_DEBUG_VOLUMES 0x0000001
+#define UDF_DEBUG_LOCKING 0x0000002
+#define UDF_DEBUG_NODE 0x0000004
+#define UDF_DEBUG_LOOKUP 0x0000008
+#define UDF_DEBUG_READDIR 0x0000010
+#define UDF_DEBUG_FIDS 0x0000020
+#define UDF_DEBUG_DESCRIPTOR 0x0000040
+#define UDF_DEBUG_TRANSLATE 0x0000080
+#define UDF_DEBUG_STRATEGY 0x0000100
+#define UDF_DEBUG_READ 0x0000200
+#define UDF_DEBUG_WRITE 0x0000400
+#define UDF_DEBUG_CALL 0x0000800
+#define UDF_DEBUG_ATTR 0x0001000
+#define UDF_DEBUG_EXTATTR 0x0002000
+#define UDF_DEBUG_ALLOC 0x0004000
+#define UDF_DEBUG_ADWLK 0x0008000
+#define UDF_DEBUG_DIRHASH 0x0010000
+#define UDF_DEBUG_NOTIMPL 0x0020000
+#define UDF_DEBUG_SHEDULE 0x0040000
+#define UDF_DEBUG_ECCLINE 0x0080000
+#define UDF_DEBUG_SYNC 0x0100000
+#define UDF_DEBUG_PARANOIA 0x0200000
+#define UDF_DEBUG_PARANOIDADWLK 0x0400000
+#define UDF_DEBUG_NODEDUMP 0x0800000
+#define UDF_DEBUG_RESERVE 0x1000000
+
+/* initial value of udf_verbose */
+#define UDF_DEBUGGING 0
+
+#ifdef DEBUG
+#define DPRINTF(name, arg) { \
+ if (udf_verbose & UDF_DEBUG_##name) {\
+ printf arg;\
+ };\
+ }
+#define DPRINTFIF(name, cond, arg) { \
+ if (udf_verbose & UDF_DEBUG_##name) { \
+ if (cond) printf arg;\
+ };\
+ }
+#else
+#define DPRINTF(name, arg) {}
+#define DPRINTFIF(name, cond, arg) {}
+#endif
/* constants to identify what kind of identifier we are dealing with */
#define UDF_REGID_DOMAIN 1
Modified: soc2012/oleksandr/udf-head/sys/fs/udf2/udf_mount.h
==============================================================================
--- soc2012/oleksandr/udf-head/sys/fs/udf2/udf_mount.h Fri Jun 8 07:44:42 2012 (r237288)
+++ soc2012/oleksandr/udf-head/sys/fs/udf2/udf_mount.h Fri Jun 8 08:36:29 2012 (r237289)
@@ -39,8 +39,7 @@
* Arguments to mount UDF filingsystem.
*/
-//#define UDFMNT_VERSION 1
-#if 0
+#define UDFMNT_VERSION 1
struct udf_args {
uint32_t version; /* version of this structure */
char *fspec; /* mount specifier */
@@ -58,13 +57,12 @@
/* extendable */
uint8_t reserved[32];
};
-#endif
/* udf mount options */
-//#define UDFMNT_CLOSESESSION 0x00000001 /* close session on dismount */
-//#define UDFMNT_BITS "\20\1CLOSESESSION"
+#define UDFMNT_CLOSESESSION 0x00000001 /* close session on dismount */
+#define UDFMNT_BITS "\20\1CLOSESESSION"
#define UDFMNT_KICONV 100
#endif /* !_FS_UDF_UDF_MOUNT_H_ */
Modified: soc2012/oleksandr/udf-head/sys/fs/udf2/udf_subr.c
==============================================================================
--- soc2012/oleksandr/udf-head/sys/fs/udf2/udf_subr.c Fri Jun 8 07:44:42 2012 (r237288)
+++ soc2012/oleksandr/udf-head/sys/fs/udf2/udf_subr.c Fri Jun 8 08:36:29 2012 (r237289)
@@ -34,7 +34,6 @@
#include <sys/stat.h>
#include <sys/mount.h> /* We shouldn't be, but are dependent on this header. */
#include <sys/iconv.h>
-
#include "ecma167-udf.h"
#include "udf.h"
#include "udf_subr.h"
@@ -3276,6 +3275,7 @@
dscr = NULL;
error = 0;
while (fsd_len || error) {
+ DPRINTF(VOLUMES, ("fsd_len = %d\n", fsd_len));
/* translate fsd_loc to lb_num */
error = udf_translate_vtop(ump, &fsd_loc, &lb_num, &dummy);
if (error)
@@ -3313,6 +3313,7 @@
/* follow up to fsd->next_ex (long_ad) if its not null */
if (le32toh(ump->fileset_desc->next_ex.len)) {
+ DPRINTF(VOLUMES, ("follow up FSD extent\n"));
fsd_loc = ump->fileset_desc->next_ex;
fsd_len = le32toh(ump->fileset_desc->next_ex.len);
}
@@ -3324,6 +3325,8 @@
if (ump->fileset_desc == NULL)
return ENOENT;
+ DPRINTF(VOLUMES, ("FSD read in fine\n"));
+ DPRINTF(VOLUMES, ("Updating fsd logical volume id\n"));
udf_update_logvolname(ump, ump->logical_vol->logvol_id);
/*
@@ -3508,7 +3511,7 @@
/* add node to the rb tree */
mutex_enter(&ump->ihash_lock);
- rb_tree_insert_node(&ump->udf_node_tree, &udf_node->rbnode);
+ rb_tree_insert_node(&ump->udf_node_tree, &udf_node->rbnode);
mutex_exit(&ump->ihash_lock);
}
@@ -3520,7 +3523,7 @@
/* remove node from the rb tree */
mutex_enter(&ump->ihash_lock);
- rb_tree_remove_node(&ump->udf_node_tree, &udf_node->rbnode);
+ rb_tree_remove_node(&ump->udf_node_tree, &udf_node->rbnode);
mutex_exit(&ump->ihash_lock);
}
@@ -5573,15 +5576,40 @@
int
udf_dispose_node(struct udf_node *udf_node)
{
+ //struct vnode *vp;
int extnr;
- if (!udf_node)
+ DPRINTF(NODE, ("udf_dispose_node called on node %p\n", udf_node));
+ if (!udf_node) {
+ DPRINTF(NODE, ("UDF: Dispose node on node NULL, ignoring\n"));
return 0;
-
-/* udf_cleanup_reservation(udf_node); */
+ }
+#if 0
+ vp = udf_node->vnode;
+#ifdef DIAGNOSTIC
+ if (vp->v_numoutput)
+ panic("disposing UDF node with pending I/O's, udf_node = %p, "
+ "v_numoutput = %d", udf_node, vp->v_numoutput);
+#endif
+ udf_cleanup_reservation(udf_node);
/* TODO extended attributes and streamdir */
+ /* remove dirhash if present */
+ dirhash_purge(&udf_node->dir_hash);
+
+ /* remove from our hash lookup table */
+ udf_deregister_node(udf_node);
+
+ /* destroy our lock */
+ mutex_destroy(&udf_node->node_mutex);
+ cv_destroy(&udf_node->node_lock);
+
+ /* dissociate our udf_node from the vnode */
+ genfs_node_destroy(udf_node->vnode);
+ vp->v_data = NULL;
+#endif
+
/* free associated memory and the node itself */
for (extnr = 0; extnr < udf_node->num_extensions; extnr++) {
/*udf_free_logvol_dscr(udf_node->ump, &udf_node->ext_loc[extnr],
Modified: soc2012/oleksandr/udf-head/sys/fs/udf2/udf_vfsops.c
==============================================================================
--- soc2012/oleksandr/udf-head/sys/fs/udf2/udf_vfsops.c Fri Jun 8 07:44:42 2012 (r237288)
+++ soc2012/oleksandr/udf-head/sys/fs/udf2/udf_vfsops.c Fri Jun 8 08:36:29 2012 (r237289)
@@ -187,11 +187,15 @@
char *fspec;
td = curthread;
-
+ DPRINTF(CALL, ("udf_mount called\n"));
+ /*
+ * Unconditionally mount as read-only.
+ */
MNT_ILOCK(mp);
mp->mnt_flag |= MNT_RDONLY;
MNT_IUNLOCK(mp);
+ /* No root filesystem support */
if (mp->mnt_flag & MNT_ROOTFS)
return (ENOTSUP);
@@ -204,6 +208,8 @@
error = vfs_getopt(mp->mnt_optnew, "from", (void **)&fspec, &len);
if (!error && fspec[len - 1] != '\0')
return (EINVAL);
+
+ /* Check that the mount device exists */
if (fspec == NULL)
return (EINVAL);
@@ -218,6 +224,7 @@
return (error);
}
+ /* Check the access rights on the mount device */
error = VOP_ACCESS(devvp, VREAD, td->td_ucred, td);
if (error)
error = priv_check(td, PRIV_VFS_MOUNT_PERM);
@@ -236,7 +243,7 @@
}
/* successfully mounted */
-
+ DPRINTF(VOLUMES, ("udf_mount() successfull\n"));
#if 0
/* If we're not opened read-only, open its logical volume */
if ((mp->mnt_flag & MNT_RDONLY) == 0) {
@@ -281,9 +288,10 @@
udf_unmount(struct mount *mp, int mntflags)
{
struct udf_mount *ump;
- int error, flags;
+ int error, flags = 0;
ump = VFSTOUDF(mp);
+
if (!ump)
panic("UDF unmount: empty ump\n");
@@ -400,6 +408,7 @@
/* setup basic mount information */
+ mp->mnt_data = NULL;
mp->mnt_stat.f_fsid.val[0] = dev2udev(devvp->v_rdev);
mp->mnt_stat.f_fsid.val[1] = mp->mnt_vfc->vfc_typenum;
mp->mnt_stat.f_namemax = UDF_MAX_NAMELEN;
@@ -413,6 +422,7 @@
MNTK_EXTENDED_SHARED;
MNT_IUNLOCK(mp);
+ /* allocate udf part of mount structure; malloc always succeeds */
ump = malloc(sizeof(struct udf_mount), M_UDFTEMP, M_WAITOK | M_ZERO);
#if 0
@@ -422,6 +432,9 @@
mutex_init(&ump->get_node_lock, MUTEX_DEFAULT, IPL_NONE);
mutex_init(&ump->allocate_mutex, MUTEX_DEFAULT, IPL_NONE);
cv_init(&ump->dirtynodes_cv, "udfsync2");
+
+ /* init rbtree for nodes, ordered by their icb address (long_ad) */
+ udf_init_nodes_tree(ump);
#endif
/* set up linkage */
@@ -549,6 +562,9 @@
error = EINVAL;
goto fail;
}
+
+ /*DPRINTF(VOLUMES, ("Read %d anchors on this disc, session %d\n",
+ num_anchors, args->sessionnr));*/
/* read in volume descriptor sequence */
if ((error = udf_read_vds_space(ump))) {
More information about the svn-soc-all
mailing list