@@ -159,6 +159,17 @@ struct xfs_da3_intnode {
#define XFS_DIR3_FT_MAX 9
+#define XFS_DIR3_FTYPE_STR \
+ { XFS_DIR3_FT_UNKNOWN, "unknown" }, \
+ { XFS_DIR3_FT_REG_FILE, "file" }, \
+ { XFS_DIR3_FT_DIR, "directory" }, \
+ { XFS_DIR3_FT_CHRDEV, "char" }, \
+ { XFS_DIR3_FT_BLKDEV, "block" }, \
+ { XFS_DIR3_FT_FIFO, "fifo" }, \
+ { XFS_DIR3_FT_SOCK, "sock" }, \
+ { XFS_DIR3_FT_SYMLINK, "symlink" }, \
+ { XFS_DIR3_FT_WHT, "whiteout" }
+
/*
* Byte offset in data block and shortform entry.
*/
@@ -91,7 +91,7 @@ xfs_parent_valuecheck(
}
/* Initializes a xfs_parent_name_rec to be stored as an attribute name */
-void
+static inline void
xfs_init_parent_name_rec(
struct xfs_parent_name_rec *rec,
struct xfs_inode *ip,
@@ -135,6 +135,33 @@ xfs_parent_irec_from_disk(
memset(&irec->p_name[valuelen], 0, sizeof(irec->p_name) - valuelen);
}
+/*
+ * Convert an incore parent_name record to its ondisk format. If @value or
+ * @valuelen are NULL, they will not be written to.
+ */
+void
+xfs_parent_irec_to_disk(
+ struct xfs_parent_name_rec *rec,
+ void *value,
+ int *valuelen,
+ const struct xfs_parent_name_irec *irec)
+{
+ rec->p_ino = cpu_to_be64(irec->p_ino);
+ rec->p_gen = cpu_to_be32(irec->p_gen);
+ rec->p_diroffset = cpu_to_be32(irec->p_diroffset);
+
+ if (valuelen) {
+ ASSERT(*valuelen > 0);
+ ASSERT(*valuelen >= irec->p_namelen);
+ ASSERT(*valuelen < MAXNAMELEN);
+
+ *valuelen = irec->p_namelen;
+ }
+
+ if (value)
+ memcpy(value, irec->p_name, irec->p_namelen);
+}
+
/*
* Allocate memory to control a logged parent pointer update as part of a
* dirent operation.
@@ -33,6 +33,8 @@ struct xfs_parent_name_irec {
void xfs_parent_irec_from_disk(struct xfs_parent_name_irec *irec,
const struct xfs_parent_name_rec *rec,
const void *value, int valuelen);
+void xfs_parent_irec_to_disk(struct xfs_parent_name_rec *rec, void *value,
+ int *valuelen, const struct xfs_parent_name_irec *irec);
/*
* Dynamically allocd structure used to wrap the needed data to pass around
@@ -48,10 +50,6 @@ struct xfs_parent_defer {
/*
* Parent pointer attribute prototypes
*/
-void xfs_init_parent_name_rec(struct xfs_parent_name_rec *rec,
- struct xfs_inode *ip, uint32_t p_diroffset);
-void xfs_init_parent_name_irec(struct xfs_parent_name_irec *irec,
- struct xfs_parent_name_rec *rec);
int __xfs_parent_init(struct xfs_mount *mp, bool grab_log,
struct xfs_parent_defer **parentp);