[RFC PATCH] xfs: add inline helper to convert from data fork to xfs_attr_shortform

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi folks, while working on the attr structs cleanup, I've noticed there
are so many places where we do:

(struct xfs_attr_shortform *)dp->i_afp->if_u1.if_data;

So, I thought it would be worth to add another inline function to do
this conversion and remove all these casts.

To achieve this, it will be required to include xfs_inode.h header on
xfs_attr_sf.h, so it can access the xfs_inode definition. Also, if this
patch is an acceptable idea, it will make sense then to keep the
xfs_attr_sf_totsize() function also inside xfs_attr_sf.h (which has been
moved on my series to avoid the additional #include), so, I thought on
sending this RFC patch to get comments if it's a good idea or not, and,
if it is, I'll add this patch to my series before sending it over.

I didn't focus on check if this patch is totally correct (only build
test), since my idea is to gather you guys opinions about having this
new inline function, so don't bother on reviewing the patch itself by
now, only the function name if you guys prefer some other name.

Also, this patch is build on top of my clean up series (V2), not yet
sent to the list, so it won't apply anyway.

Cheers.

Signed-off-by: Carlos Maiolino <cmaiolino@xxxxxxxxxx>
---
 fs/xfs/libxfs/xfs_attr.c      |  4 ++--
 fs/xfs/libxfs/xfs_attr_leaf.c | 16 ++++++++--------
 fs/xfs/libxfs/xfs_attr_sf.h   |  6 ++++++
 fs/xfs/xfs_attr_list.c        |  2 +-
 4 files changed, 17 insertions(+), 11 deletions(-)

diff --git a/fs/xfs/libxfs/xfs_attr.c b/fs/xfs/libxfs/xfs_attr.c
index ff1fa2ed40ab9..1dccc8b9f31f6 100644
--- a/fs/xfs/libxfs/xfs_attr.c
+++ b/fs/xfs/libxfs/xfs_attr.c
@@ -525,8 +525,8 @@ xfs_attr_set(
 
 /* total space in use */
 static inline int xfs_attr_sf_totsize(struct xfs_inode *dp) {
-	struct xfs_attr_shortform *sf =
-		(struct xfs_attr_shortform *)dp->i_afp->if_u1.if_data;
+	struct xfs_attr_shortform *sf = xfs_attr_ifork_to_sf(dp);
+
 	return be16_to_cpu(sf->hdr.totsize);
 }
 
diff --git a/fs/xfs/libxfs/xfs_attr_leaf.c b/fs/xfs/libxfs/xfs_attr_leaf.c
index f64ab351b760c..ac92eba8745d6 100644
--- a/fs/xfs/libxfs/xfs_attr_leaf.c
+++ b/fs/xfs/libxfs/xfs_attr_leaf.c
@@ -681,7 +681,7 @@ xfs_attr_sf_findname(
 	int			end;
 	int			i;
 
-	sf = (struct xfs_attr_shortform *)args->dp->i_afp->if_u1.if_data;
+	sf = xfs_attr_ifork_to_sf(args->dp);
 	sfe = &sf->list[0];
 	end = sf->hdr.count;
 	for (i = 0; i < end; sfe = xfs_attr_sf_nextentry(sfe),
@@ -728,14 +728,14 @@ xfs_attr_shortform_add(
 
 	ifp = dp->i_afp;
 	ASSERT(ifp->if_flags & XFS_IFINLINE);
-	sf = (struct xfs_attr_shortform *)ifp->if_u1.if_data;
+	sf = xfs_attr_ifork_to_sf(dp);
 	if (xfs_attr_sf_findname(args, &sfe, NULL) == -EEXIST)
 		ASSERT(0);
 
 	offset = (char *)sfe - (char *)sf;
 	size = xfs_attr_sf_entsize_byname(args->namelen, args->valuelen);
 	xfs_idata_realloc(dp, size, XFS_ATTR_FORK);
-	sf = (struct xfs_attr_shortform *)ifp->if_u1.if_data;
+	sf = xfs_attr_ifork_to_sf(dp);
 	sfe = (struct xfs_attr_sf_entry *)((char *)sf + offset);
 
 	sfe->namelen = args->namelen;
@@ -787,7 +787,7 @@ xfs_attr_shortform_remove(
 
 	dp = args->dp;
 	mp = dp->i_mount;
-	sf = (struct xfs_attr_shortform *)dp->i_afp->if_u1.if_data;
+	sf = xfs_attr_ifork_to_sf(dp);
 
 	error = xfs_attr_sf_findname(args, &sfe, &base);
 	if (error != -EEXIST)
@@ -846,7 +846,7 @@ xfs_attr_shortform_lookup(xfs_da_args_t *args)
 
 	ifp = args->dp->i_afp;
 	ASSERT(ifp->if_flags & XFS_IFINLINE);
-	sf = (struct xfs_attr_shortform *)ifp->if_u1.if_data;
+	sf = xfs_attr_ifork_to_sf(args->dp);
 	sfe = &sf->list[0];
 	for (i = 0; i < sf->hdr.count;
 				sfe = xfs_attr_sf_nextentry(sfe), i++) {
@@ -873,7 +873,7 @@ xfs_attr_shortform_getvalue(
 	int			i;
 
 	ASSERT(args->dp->i_afp->if_flags == XFS_IFINLINE);
-	sf = (struct xfs_attr_shortform *)args->dp->i_afp->if_u1.if_data;
+	sf = xfs_attr_ifork_to_sf(args->dp);
 	sfe = &sf->list[0];
 	for (i = 0; i < sf->hdr.count;
 				sfe = xfs_attr_sf_nextentry(sfe), i++) {
@@ -908,7 +908,7 @@ xfs_attr_shortform_to_leaf(
 
 	dp = args->dp;
 	ifp = dp->i_afp;
-	sf = (struct xfs_attr_shortform *)ifp->if_u1.if_data;
+	sf = xfs_attr_ifork_to_sf(dp);
 	size = be16_to_cpu(sf->hdr.totsize);
 	tmpbuffer = kmem_alloc(size, 0);
 	ASSERT(tmpbuffer != NULL);
@@ -1018,7 +1018,7 @@ xfs_attr_shortform_verify(
 
 	ASSERT(ip->i_afp->if_format == XFS_DINODE_FMT_LOCAL);
 	ifp = XFS_IFORK_PTR(ip, XFS_ATTR_FORK);
-	sfp = (struct xfs_attr_shortform *)ifp->if_u1.if_data;
+	sfp = xfs_attr_ifork_to_sf(ip);
 	size = ifp->if_bytes;
 
 	/*
diff --git a/fs/xfs/libxfs/xfs_attr_sf.h b/fs/xfs/libxfs/xfs_attr_sf.h
index 540ad3332a9c8..a51aed1dab6c1 100644
--- a/fs/xfs/libxfs/xfs_attr_sf.h
+++ b/fs/xfs/libxfs/xfs_attr_sf.h
@@ -3,6 +3,8 @@
  * Copyright (c) 2000,2002,2005 Silicon Graphics, Inc.
  * All Rights Reserved.
  */
+
+#include "xfs_inode.h"
 #ifndef __XFS_ATTR_SF_H__
 #define	__XFS_ATTR_SF_H__
 
@@ -47,4 +49,8 @@ xfs_attr_sf_nextentry(struct xfs_attr_sf_entry *sfep) {
 					    xfs_attr_sf_entsize(sfep));
 }
 
+static inline struct xfs_attr_shortform *
+xfs_attr_ifork_to_sf(struct xfs_inode *ino) {
+	return (struct xfs_attr_shortform *)ino->i_afp->if_u1.if_data;
+}
 #endif	/* __XFS_ATTR_SF_H__ */
diff --git a/fs/xfs/xfs_attr_list.c b/fs/xfs/xfs_attr_list.c
index 8f8837fe21cf0..7c0ebdeb43567 100644
--- a/fs/xfs/xfs_attr_list.c
+++ b/fs/xfs/xfs_attr_list.c
@@ -61,7 +61,7 @@ xfs_attr_shortform_list(
 	int				error = 0;
 
 	ASSERT(dp->i_afp != NULL);
-	sf = (struct xfs_attr_shortform *)dp->i_afp->if_u1.if_data;
+	sf = xfs_attr_ifork_to_sf(dp);
 	ASSERT(sf != NULL);
 	if (!sf->hdr.count)
 		return 0;
-- 
2.26.2




[Index of Archives]     [XFS Filesystem Development (older mail)]     [Linux Filesystem Development]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux RAID]     [Linux SCSI]


  Powered by Linux