| To: | Eric Sandeen <sandeen@xxxxxxxxxxx> |
|---|---|
| Subject: | Re: [PATCH] (and bad attr2 bug) - pack xfs_sb_t for 64-bit arches |
| From: | Eric Sandeen <sandeen@xxxxxxxxxxx> |
| Date: | Mon, 20 Nov 2006 22:02:21 -0600 |
| Cc: | xfs@xxxxxxxxxxx |
| In-reply-to: | <45612621.5010404@sandeen.net> |
| References: | <455CB54F.8080901@sandeen.net> <455CE1E3.7020703@sandeen.net> <45612621.5010404@sandeen.net> |
| Sender: | xfs-bounce@xxxxxxxxxxx |
| User-agent: | Thunderbird 1.5.0.8 (Macintosh/20061025) |
Eric Sandeen wrote: Eric Sandeen wrote:Ok, with expert collaboration from Russell, Barry, Tim, Nathan, David, et al, how about this: For btree dirs, we need a different calculation for the space used in di_u, to set the minimum threshold for the fork offset... This fixes my testcase, but as Tim points out -now- we need to compact the btree ptrs, if we return (and use) an offset < current forkoff... whee.... -Eric Index: linux-2.6.18/fs/xfs.orig/xfs_attr_leaf.c =================================================================== --- linux-2.6.18.orig/fs/xfs.orig/xfs_attr_leaf.c +++ linux-2.6.18/fs/xfs.orig/xfs_attr_leaf.c @@ -116,6 +116,7 @@ xfs_attr_shortform_bytesfit(xfs_inode_t int minforkoff; /* lower limit on valid forkoff locations */ int maxforkoff; /* upper limit on valid forkoff locations */ xfs_mount_t *mp = dp->i_mount; + int dsize = 0; offset = (XFS_LITINO(mp) - bytes) >> 3; /* rounded down */ @@ -134,8 +135,21 @@ xfs_attr_shortform_bytesfit(xfs_inode_t return 0; } + switch (dp->i_d.di_format) {
+ case XFS_DINODE_FMT_LOCAL:
+ case XFS_DINODE_FMT_EXTENTS:
+ dsize = dp->i_df.if_bytes;
+ break;
+ case XFS_DINODE_FMT_BTREE:
+ dsize = XFS_BMDR_SPACE_CALC(
+ XFS_BMAP_BROOT_NUMRECS(dp->i_df.if_broot));
+ break;
+ default:
+ /* should bail, unknown format, .... */
+ }
+
/* data fork btree root can have at least this many key/ptr pairs */
- minforkoff = MAX(dp->i_df.if_bytes, XFS_BMDR_SPACE_CALC(MINDBTPTRS));
+ minforkoff = MAX(dsize, XFS_BMDR_SPACE_CALC(MINDBTPTRS));
minforkoff = roundup(minforkoff, 8) >> 3;/* attr fork btree root can have at least this many key/ptr pairs */ |
| Previous by Date: | Re: XFS CORRUPTION 2.6.17.13?, Justin Piszcz |
|---|---|
| Next by Date: | TAKE 956783 - xfs_dm_getall_dmattr() doesn't check if the user buffer is at valid address, Vlad Apostolov |
| Previous by Thread: | Re: [PATCH] (and bad attr2 bug) - pack xfs_sb_t for 64-bit arches, Eric Sandeen |
| Next by Thread: | Re: [PATCH] (and bad attr2 bug) - pack xfs_sb_t for 64-bit arches, Russell Cattelan |
| Indexes: | [Date] [Thread] [Top] [All Lists] |