Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
dc4113d2
Commit
dc4113d2
authored
Jul 20, 2016
by
Dave Chinner
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'xfs-4.8-dir2-sf-fixes' into for-next
parents
b47ec80b
aa2dd0ad
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
37 additions
and
86 deletions
+37
-86
fs/xfs/libxfs/xfs_da_format.c
fs/xfs/libxfs/xfs_da_format.c
+13
-18
fs/xfs/libxfs/xfs_da_format.h
fs/xfs/libxfs/xfs_da_format.h
+12
-31
fs/xfs/libxfs/xfs_dir2_sf.c
fs/xfs/libxfs/xfs_dir2_sf.c
+12
-26
fs/xfs/xfs_linux.h
fs/xfs/xfs_linux.h
+0
-7
fs/xfs/xfs_ondisk.h
fs/xfs/xfs_ondisk.h
+0
-4
No files found.
fs/xfs/libxfs/xfs_da_format.c
View file @
dc4113d2
...
...
@@ -40,8 +40,7 @@ xfs_dir2_sf_entsize(
int
count
=
sizeof
(
struct
xfs_dir2_sf_entry
);
/* namelen + offset */
count
+=
len
;
/* name */
count
+=
hdr
->
i8count
?
sizeof
(
xfs_dir2_ino8_t
)
:
sizeof
(
xfs_dir2_ino4_t
);
/* ino # */
count
+=
hdr
->
i8count
?
XFS_INO64_SIZE
:
XFS_INO32_SIZE
;
/* ino # */
return
count
;
}
...
...
@@ -125,33 +124,33 @@ xfs_dir3_sfe_put_ftype(
static
xfs_ino_t
xfs_dir2_sf_get_ino
(
struct
xfs_dir2_sf_hdr
*
hdr
,
xfs_dir2_inou
_t
*
from
)
__uint8
_t
*
from
)
{
if
(
hdr
->
i8count
)
return
get_unaligned_be64
(
&
from
->
i8
.
i
)
&
0x00ffffffffffffffULL
;
return
get_unaligned_be64
(
from
)
&
0x00ffffffffffffffULL
;
else
return
get_unaligned_be32
(
&
from
->
i4
.
i
);
return
get_unaligned_be32
(
from
);
}
static
void
xfs_dir2_sf_put_ino
(
struct
xfs_dir2_sf_hdr
*
hdr
,
xfs_dir2_inou
_t
*
to
,
__uint8
_t
*
to
,
xfs_ino_t
ino
)
{
ASSERT
((
ino
&
0xff00000000000000ULL
)
==
0
);
if
(
hdr
->
i8count
)
put_unaligned_be64
(
ino
,
&
to
->
i8
.
i
);
put_unaligned_be64
(
ino
,
to
);
else
put_unaligned_be32
(
ino
,
&
to
->
i4
.
i
);
put_unaligned_be32
(
ino
,
to
);
}
static
xfs_ino_t
xfs_dir2_sf_get_parent_ino
(
struct
xfs_dir2_sf_hdr
*
hdr
)
{
return
xfs_dir2_sf_get_ino
(
hdr
,
&
hdr
->
parent
);
return
xfs_dir2_sf_get_ino
(
hdr
,
hdr
->
parent
);
}
static
void
...
...
@@ -159,7 +158,7 @@ xfs_dir2_sf_put_parent_ino(
struct
xfs_dir2_sf_hdr
*
hdr
,
xfs_ino_t
ino
)
{
xfs_dir2_sf_put_ino
(
hdr
,
&
hdr
->
parent
,
ino
);
xfs_dir2_sf_put_ino
(
hdr
,
hdr
->
parent
,
ino
);
}
/*
...
...
@@ -173,8 +172,7 @@ xfs_dir2_sfe_get_ino(
struct
xfs_dir2_sf_hdr
*
hdr
,
struct
xfs_dir2_sf_entry
*
sfep
)
{
return
xfs_dir2_sf_get_ino
(
hdr
,
(
xfs_dir2_inou_t
*
)
&
sfep
->
name
[
sfep
->
namelen
]);
return
xfs_dir2_sf_get_ino
(
hdr
,
&
sfep
->
name
[
sfep
->
namelen
]);
}
static
void
...
...
@@ -183,8 +181,7 @@ xfs_dir2_sfe_put_ino(
struct
xfs_dir2_sf_entry
*
sfep
,
xfs_ino_t
ino
)
{
xfs_dir2_sf_put_ino
(
hdr
,
(
xfs_dir2_inou_t
*
)
&
sfep
->
name
[
sfep
->
namelen
],
ino
);
xfs_dir2_sf_put_ino
(
hdr
,
&
sfep
->
name
[
sfep
->
namelen
],
ino
);
}
static
xfs_ino_t
...
...
@@ -192,8 +189,7 @@ xfs_dir3_sfe_get_ino(
struct
xfs_dir2_sf_hdr
*
hdr
,
struct
xfs_dir2_sf_entry
*
sfep
)
{
return
xfs_dir2_sf_get_ino
(
hdr
,
(
xfs_dir2_inou_t
*
)
&
sfep
->
name
[
sfep
->
namelen
+
1
]);
return
xfs_dir2_sf_get_ino
(
hdr
,
&
sfep
->
name
[
sfep
->
namelen
+
1
]);
}
static
void
...
...
@@ -202,8 +198,7 @@ xfs_dir3_sfe_put_ino(
struct
xfs_dir2_sf_entry
*
sfep
,
xfs_ino_t
ino
)
{
xfs_dir2_sf_put_ino
(
hdr
,
(
xfs_dir2_inou_t
*
)
&
sfep
->
name
[
sfep
->
namelen
+
1
],
ino
);
xfs_dir2_sf_put_ino
(
hdr
,
&
sfep
->
name
[
sfep
->
namelen
+
1
],
ino
);
}
...
...
fs/xfs/libxfs/xfs_da_format.h
View file @
dc4113d2
...
...
@@ -191,12 +191,6 @@ typedef __uint16_t xfs_dir2_data_off_t;
#define NULLDATAOFF 0xffffU
typedef
uint
xfs_dir2_data_aoff_t
;
/* argument form */
/*
* Normalized offset (in a data block) of the entry, really xfs_dir2_data_off_t.
* Only need 16 bits, this is the byte offset into the single block form.
*/
typedef
struct
{
__uint8_t
i
[
2
];
}
__arch_pack
xfs_dir2_sf_off_t
;
/*
* Offset in data space of a data entry.
*/
...
...
@@ -214,22 +208,10 @@ typedef xfs_off_t xfs_dir2_off_t;
*/
typedef
__uint32_t
xfs_dir2_db_t
;
/*
* Inode number stored as 8 8-bit values.
*/
typedef
struct
{
__uint8_t
i
[
8
];
}
xfs_dir2_ino8_t
;
/*
* Inode number stored as 4 8-bit values.
* Works a lot of the time, when all the inode numbers in a directory
* fit in 32 bits.
*/
typedef
struct
{
__uint8_t
i
[
4
];
}
xfs_dir2_ino4_t
;
#define XFS_INO32_SIZE 4
#define XFS_INO64_SIZE 8
#define XFS_INO64_DIFF (XFS_INO64_SIZE - XFS_INO32_SIZE)
typedef
union
{
xfs_dir2_ino8_t
i8
;
xfs_dir2_ino4_t
i4
;
}
xfs_dir2_inou_t
;
#define XFS_DIR2_MAX_SHORT_INUM ((xfs_ino_t)0xffffffffULL)
/*
...
...
@@ -246,39 +228,38 @@ typedef union {
typedef
struct
xfs_dir2_sf_hdr
{
__uint8_t
count
;
/* count of entries */
__uint8_t
i8count
;
/* count of 8-byte inode #s */
xfs_dir2_inou_t
parent
;
/* parent dir inode number */
}
__
arch_pack
xfs_dir2_sf_hdr_t
;
__uint8_t
parent
[
8
];
/* parent dir inode number */
}
__
packed
xfs_dir2_sf_hdr_t
;
typedef
struct
xfs_dir2_sf_entry
{
__u8
namelen
;
/* actual name length */
xfs_dir2_sf_off_t
offset
;
/* saved offset */
__u8
offset
[
2
];
/* saved offset */
__u8
name
[];
/* name, variable size */
/*
* A single byte containing the file type field follows the inode
* number for version 3 directory entries.
*
* A
xfs_dir2_ino8_t or xfs_dir2_ino4_t follows here, at a
*
variable offset
after the name.
* A
64-bit or 32-bit inode number follows here, at a variable offset
* after the name.
*/
}
__arch_pack
xfs_dir2_sf_entry_t
;
}
xfs_dir2_sf_entry_t
;
static
inline
int
xfs_dir2_sf_hdr_size
(
int
i8count
)
{
return
sizeof
(
struct
xfs_dir2_sf_hdr
)
-
(
i8count
==
0
)
*
(
sizeof
(
xfs_dir2_ino8_t
)
-
sizeof
(
xfs_dir2_ino4_t
));
(
i8count
==
0
)
*
XFS_INO64_DIFF
;
}
static
inline
xfs_dir2_data_aoff_t
xfs_dir2_sf_get_offset
(
xfs_dir2_sf_entry_t
*
sfep
)
{
return
get_unaligned_be16
(
&
sfep
->
offset
.
i
);
return
get_unaligned_be16
(
sfep
->
offset
);
}
static
inline
void
xfs_dir2_sf_put_offset
(
xfs_dir2_sf_entry_t
*
sfep
,
xfs_dir2_data_aoff_t
off
)
{
put_unaligned_be16
(
off
,
&
sfep
->
offset
.
i
);
put_unaligned_be16
(
off
,
sfep
->
offset
);
}
static
inline
struct
xfs_dir2_sf_entry
*
...
...
fs/xfs/libxfs/xfs_dir2_sf.c
View file @
dc4113d2
...
...
@@ -127,12 +127,11 @@ xfs_dir2_block_sfsize(
* Calculate the new size, see if we should give up yet.
*/
size
=
xfs_dir2_sf_hdr_size
(
i8count
)
+
/* header */
count
+
/* namelen */
count
*
(
uint
)
sizeof
(
xfs_dir2_sf_off_t
)
+
/* offset */
count
*
3
*
sizeof
(
u8
)
+
/* namelen + offset */
namelen
+
/* name */
(
i8count
?
/* inumber */
(
uint
)
sizeof
(
xfs_dir2_ino8_t
)
*
count
:
(
uint
)
sizeof
(
xfs_dir2_ino4_t
)
*
count
);
count
*
XFS_INO64_SIZE
:
count
*
XFS_INO32_SIZE
);
if
(
size
>
XFS_IFORK_DSIZE
(
dp
))
return
size
;
/* size value is a failure */
}
...
...
@@ -319,10 +318,7 @@ xfs_dir2_sf_addname(
/*
* Yes, adjust the inode size. old count + (parent + new)
*/
incr_isize
+=
(
sfp
->
count
+
2
)
*
((
uint
)
sizeof
(
xfs_dir2_ino8_t
)
-
(
uint
)
sizeof
(
xfs_dir2_ino4_t
));
incr_isize
+=
(
sfp
->
count
+
2
)
*
XFS_INO64_DIFF
;
objchange
=
1
;
}
...
...
@@ -897,11 +893,7 @@ xfs_dir2_sf_replace(
int
error
;
/* error return value */
int
newsize
;
/* new inode size */
newsize
=
dp
->
i_df
.
if_bytes
+
(
sfp
->
count
+
1
)
*
((
uint
)
sizeof
(
xfs_dir2_ino8_t
)
-
(
uint
)
sizeof
(
xfs_dir2_ino4_t
));
newsize
=
dp
->
i_df
.
if_bytes
+
(
sfp
->
count
+
1
)
*
XFS_INO64_DIFF
;
/*
* Won't fit as shortform, convert to block then do replace.
*/
...
...
@@ -1022,10 +1014,7 @@ xfs_dir2_sf_toino4(
/*
* Compute the new inode size.
*/
newsize
=
oldsize
-
(
oldsfp
->
count
+
1
)
*
((
uint
)
sizeof
(
xfs_dir2_ino8_t
)
-
(
uint
)
sizeof
(
xfs_dir2_ino4_t
));
newsize
=
oldsize
-
(
oldsfp
->
count
+
1
)
*
XFS_INO64_DIFF
;
xfs_idata_realloc
(
dp
,
-
oldsize
,
XFS_DATA_FORK
);
xfs_idata_realloc
(
dp
,
newsize
,
XFS_DATA_FORK
);
/*
...
...
@@ -1048,7 +1037,7 @@ xfs_dir2_sf_toino4(
i
++
,
sfep
=
dp
->
d_ops
->
sf_nextentry
(
sfp
,
sfep
),
oldsfep
=
dp
->
d_ops
->
sf_nextentry
(
oldsfp
,
oldsfep
))
{
sfep
->
namelen
=
oldsfep
->
namelen
;
sfep
->
offset
=
oldsfep
->
offset
;
memcpy
(
sfep
->
offset
,
oldsfep
->
offset
,
sizeof
(
sfep
->
offset
))
;
memcpy
(
sfep
->
name
,
oldsfep
->
name
,
sfep
->
namelen
);
dp
->
d_ops
->
sf_put_ino
(
sfp
,
sfep
,
dp
->
d_ops
->
sf_get_ino
(
oldsfp
,
oldsfep
));
...
...
@@ -1098,10 +1087,7 @@ xfs_dir2_sf_toino8(
/*
* Compute the new inode size (nb: entry count + 1 for parent)
*/
newsize
=
oldsize
+
(
oldsfp
->
count
+
1
)
*
((
uint
)
sizeof
(
xfs_dir2_ino8_t
)
-
(
uint
)
sizeof
(
xfs_dir2_ino4_t
));
newsize
=
oldsize
+
(
oldsfp
->
count
+
1
)
*
XFS_INO64_DIFF
;
xfs_idata_realloc
(
dp
,
-
oldsize
,
XFS_DATA_FORK
);
xfs_idata_realloc
(
dp
,
newsize
,
XFS_DATA_FORK
);
/*
...
...
@@ -1124,7 +1110,7 @@ xfs_dir2_sf_toino8(
i
++
,
sfep
=
dp
->
d_ops
->
sf_nextentry
(
sfp
,
sfep
),
oldsfep
=
dp
->
d_ops
->
sf_nextentry
(
oldsfp
,
oldsfep
))
{
sfep
->
namelen
=
oldsfep
->
namelen
;
sfep
->
offset
=
oldsfep
->
offset
;
memcpy
(
sfep
->
offset
,
oldsfep
->
offset
,
sizeof
(
sfep
->
offset
))
;
memcpy
(
sfep
->
name
,
oldsfep
->
name
,
sfep
->
namelen
);
dp
->
d_ops
->
sf_put_ino
(
sfp
,
sfep
,
dp
->
d_ops
->
sf_get_ino
(
oldsfp
,
oldsfep
));
...
...
fs/xfs/xfs_linux.h
View file @
dc4113d2
...
...
@@ -328,13 +328,6 @@ static inline __uint64_t howmany_64(__uint64_t x, __uint32_t y)
return
x
;
}
/* ARM old ABI has some weird alignment/padding */
#if defined(__arm__) && !defined(__ARM_EABI__)
#define __arch_pack __attribute__((packed))
#else
#define __arch_pack
#endif
#define ASSERT_ALWAYS(expr) \
(unlikely(expr) ? (void)0 : assfail(#expr, __FILE__, __LINE__))
...
...
fs/xfs/xfs_ondisk.h
View file @
dc4113d2
...
...
@@ -106,9 +106,6 @@ xfs_check_ondisk_structs(void)
XFS_CHECK_OFFSET
(
xfs_dir2_data_unused_t
,
length
,
2
);
XFS_CHECK_STRUCT_SIZE
(
xfs_dir2_free_hdr_t
,
16
);
XFS_CHECK_STRUCT_SIZE
(
xfs_dir2_free_t
,
16
);
XFS_CHECK_STRUCT_SIZE
(
xfs_dir2_ino4_t
,
4
);
XFS_CHECK_STRUCT_SIZE
(
xfs_dir2_ino8_t
,
8
);
XFS_CHECK_STRUCT_SIZE
(
xfs_dir2_inou_t
,
8
);
XFS_CHECK_STRUCT_SIZE
(
xfs_dir2_leaf_entry_t
,
8
);
XFS_CHECK_STRUCT_SIZE
(
xfs_dir2_leaf_hdr_t
,
16
);
XFS_CHECK_STRUCT_SIZE
(
xfs_dir2_leaf_t
,
16
);
...
...
@@ -118,7 +115,6 @@ xfs_check_ondisk_structs(void)
XFS_CHECK_OFFSET
(
xfs_dir2_sf_entry_t
,
offset
,
1
);
XFS_CHECK_OFFSET
(
xfs_dir2_sf_entry_t
,
name
,
3
);
XFS_CHECK_STRUCT_SIZE
(
xfs_dir2_sf_hdr_t
,
10
);
XFS_CHECK_STRUCT_SIZE
(
xfs_dir2_sf_off_t
,
2
);
/* log structures */
XFS_CHECK_STRUCT_SIZE
(
struct
xfs_dq_logformat
,
24
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment