Merge branch 'for-linus' of git+ssh://git.melbourne.sgi.com/git/xfs
This commit is contained in:
commit
ce79735c12
|
@ -21,8 +21,6 @@
|
||||||
extern struct workqueue_struct *xfsdatad_workqueue;
|
extern struct workqueue_struct *xfsdatad_workqueue;
|
||||||
extern mempool_t *xfs_ioend_pool;
|
extern mempool_t *xfs_ioend_pool;
|
||||||
|
|
||||||
typedef void (*xfs_ioend_func_t)(void *);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* xfs_ioend struct manages large extent writes for XFS.
|
* xfs_ioend struct manages large extent writes for XFS.
|
||||||
* It can manage several multi-page bio's at once.
|
* It can manage several multi-page bio's at once.
|
||||||
|
|
|
@ -126,11 +126,26 @@ xfs_nfs_get_inode(
|
||||||
if (ino == 0)
|
if (ino == 0)
|
||||||
return ERR_PTR(-ESTALE);
|
return ERR_PTR(-ESTALE);
|
||||||
|
|
||||||
error = xfs_iget(mp, NULL, ino, 0, XFS_ILOCK_SHARED, &ip, 0);
|
/*
|
||||||
if (error)
|
* The XFS_IGET_BULKSTAT means that an invalid inode number is just
|
||||||
|
* fine and not an indication of a corrupted filesystem. Because
|
||||||
|
* clients can send any kind of invalid file handle, e.g. after
|
||||||
|
* a restore on the server we have to deal with this case gracefully.
|
||||||
|
*/
|
||||||
|
error = xfs_iget(mp, NULL, ino, XFS_IGET_BULKSTAT,
|
||||||
|
XFS_ILOCK_SHARED, &ip, 0);
|
||||||
|
if (error) {
|
||||||
|
/*
|
||||||
|
* EINVAL means the inode cluster doesn't exist anymore.
|
||||||
|
* This implies the filehandle is stale, so we should
|
||||||
|
* translate it here.
|
||||||
|
* We don't use ESTALE directly down the chain to not
|
||||||
|
* confuse applications using bulkstat that expect EINVAL.
|
||||||
|
*/
|
||||||
|
if (error == EINVAL)
|
||||||
|
error = ESTALE;
|
||||||
return ERR_PTR(-error);
|
return ERR_PTR(-error);
|
||||||
if (!ip)
|
}
|
||||||
return ERR_PTR(-EIO);
|
|
||||||
|
|
||||||
if (ip->i_d.di_gen != generation) {
|
if (ip->i_d.di_gen != generation) {
|
||||||
xfs_iput_new(ip, XFS_ILOCK_SHARED);
|
xfs_iput_new(ip, XFS_ILOCK_SHARED);
|
||||||
|
|
|
@ -22,7 +22,6 @@
|
||||||
* Access Control Lists
|
* Access Control Lists
|
||||||
*/
|
*/
|
||||||
typedef __uint16_t xfs_acl_perm_t;
|
typedef __uint16_t xfs_acl_perm_t;
|
||||||
typedef __int32_t xfs_acl_type_t;
|
|
||||||
typedef __int32_t xfs_acl_tag_t;
|
typedef __int32_t xfs_acl_tag_t;
|
||||||
typedef __int32_t xfs_acl_id_t;
|
typedef __int32_t xfs_acl_id_t;
|
||||||
|
|
||||||
|
|
|
@ -231,7 +231,7 @@ typedef struct xfs_perag
|
||||||
#define XFS_FSB_TO_AGNO(mp,fsbno) \
|
#define XFS_FSB_TO_AGNO(mp,fsbno) \
|
||||||
((xfs_agnumber_t)((fsbno) >> (mp)->m_sb.sb_agblklog))
|
((xfs_agnumber_t)((fsbno) >> (mp)->m_sb.sb_agblklog))
|
||||||
#define XFS_FSB_TO_AGBNO(mp,fsbno) \
|
#define XFS_FSB_TO_AGBNO(mp,fsbno) \
|
||||||
((xfs_agblock_t)((fsbno) & XFS_MASK32LO((mp)->m_sb.sb_agblklog)))
|
((xfs_agblock_t)((fsbno) & xfs_mask32lo((mp)->m_sb.sb_agblklog)))
|
||||||
#define XFS_AGB_TO_DADDR(mp,agno,agbno) \
|
#define XFS_AGB_TO_DADDR(mp,agno,agbno) \
|
||||||
((xfs_daddr_t)XFS_FSB_TO_BB(mp, \
|
((xfs_daddr_t)XFS_FSB_TO_BB(mp, \
|
||||||
(xfs_fsblock_t)(agno) * (mp)->m_sb.sb_agblocks + (agbno)))
|
(xfs_fsblock_t)(agno) * (mp)->m_sb.sb_agblocks + (agbno)))
|
||||||
|
|
|
@ -736,7 +736,7 @@ xfs_attr_shortform_allfit(xfs_dabuf_t *bp, xfs_inode_t *dp)
|
||||||
continue; /* don't copy partial entries */
|
continue; /* don't copy partial entries */
|
||||||
if (!(entry->flags & XFS_ATTR_LOCAL))
|
if (!(entry->flags & XFS_ATTR_LOCAL))
|
||||||
return(0);
|
return(0);
|
||||||
name_loc = XFS_ATTR_LEAF_NAME_LOCAL(leaf, i);
|
name_loc = xfs_attr_leaf_name_local(leaf, i);
|
||||||
if (name_loc->namelen >= XFS_ATTR_SF_ENTSIZE_MAX)
|
if (name_loc->namelen >= XFS_ATTR_SF_ENTSIZE_MAX)
|
||||||
return(0);
|
return(0);
|
||||||
if (be16_to_cpu(name_loc->valuelen) >= XFS_ATTR_SF_ENTSIZE_MAX)
|
if (be16_to_cpu(name_loc->valuelen) >= XFS_ATTR_SF_ENTSIZE_MAX)
|
||||||
|
@ -823,7 +823,7 @@ xfs_attr_leaf_to_shortform(xfs_dabuf_t *bp, xfs_da_args_t *args, int forkoff)
|
||||||
if (!entry->nameidx)
|
if (!entry->nameidx)
|
||||||
continue;
|
continue;
|
||||||
ASSERT(entry->flags & XFS_ATTR_LOCAL);
|
ASSERT(entry->flags & XFS_ATTR_LOCAL);
|
||||||
name_loc = XFS_ATTR_LEAF_NAME_LOCAL(leaf, i);
|
name_loc = xfs_attr_leaf_name_local(leaf, i);
|
||||||
nargs.name = (char *)name_loc->nameval;
|
nargs.name = (char *)name_loc->nameval;
|
||||||
nargs.namelen = name_loc->namelen;
|
nargs.namelen = name_loc->namelen;
|
||||||
nargs.value = (char *)&name_loc->nameval[nargs.namelen];
|
nargs.value = (char *)&name_loc->nameval[nargs.namelen];
|
||||||
|
@ -1141,14 +1141,14 @@ xfs_attr_leaf_add_work(xfs_dabuf_t *bp, xfs_da_args_t *args, int mapindex)
|
||||||
* as part of this transaction (a split operation for example).
|
* as part of this transaction (a split operation for example).
|
||||||
*/
|
*/
|
||||||
if (entry->flags & XFS_ATTR_LOCAL) {
|
if (entry->flags & XFS_ATTR_LOCAL) {
|
||||||
name_loc = XFS_ATTR_LEAF_NAME_LOCAL(leaf, args->index);
|
name_loc = xfs_attr_leaf_name_local(leaf, args->index);
|
||||||
name_loc->namelen = args->namelen;
|
name_loc->namelen = args->namelen;
|
||||||
name_loc->valuelen = cpu_to_be16(args->valuelen);
|
name_loc->valuelen = cpu_to_be16(args->valuelen);
|
||||||
memcpy((char *)name_loc->nameval, args->name, args->namelen);
|
memcpy((char *)name_loc->nameval, args->name, args->namelen);
|
||||||
memcpy((char *)&name_loc->nameval[args->namelen], args->value,
|
memcpy((char *)&name_loc->nameval[args->namelen], args->value,
|
||||||
be16_to_cpu(name_loc->valuelen));
|
be16_to_cpu(name_loc->valuelen));
|
||||||
} else {
|
} else {
|
||||||
name_rmt = XFS_ATTR_LEAF_NAME_REMOTE(leaf, args->index);
|
name_rmt = xfs_attr_leaf_name_remote(leaf, args->index);
|
||||||
name_rmt->namelen = args->namelen;
|
name_rmt->namelen = args->namelen;
|
||||||
memcpy((char *)name_rmt->name, args->name, args->namelen);
|
memcpy((char *)name_rmt->name, args->name, args->namelen);
|
||||||
entry->flags |= XFS_ATTR_INCOMPLETE;
|
entry->flags |= XFS_ATTR_INCOMPLETE;
|
||||||
|
@ -1159,7 +1159,7 @@ xfs_attr_leaf_add_work(xfs_dabuf_t *bp, xfs_da_args_t *args, int mapindex)
|
||||||
args->rmtblkcnt = XFS_B_TO_FSB(mp, args->valuelen);
|
args->rmtblkcnt = XFS_B_TO_FSB(mp, args->valuelen);
|
||||||
}
|
}
|
||||||
xfs_da_log_buf(args->trans, bp,
|
xfs_da_log_buf(args->trans, bp,
|
||||||
XFS_DA_LOGRANGE(leaf, XFS_ATTR_LEAF_NAME(leaf, args->index),
|
XFS_DA_LOGRANGE(leaf, xfs_attr_leaf_name(leaf, args->index),
|
||||||
xfs_attr_leaf_entsize(leaf, args->index)));
|
xfs_attr_leaf_entsize(leaf, args->index)));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1749,10 +1749,10 @@ xfs_attr_leaf_remove(xfs_dabuf_t *bp, xfs_da_args_t *args)
|
||||||
/*
|
/*
|
||||||
* Compress the remaining entries and zero out the removed stuff.
|
* Compress the remaining entries and zero out the removed stuff.
|
||||||
*/
|
*/
|
||||||
memset(XFS_ATTR_LEAF_NAME(leaf, args->index), 0, entsize);
|
memset(xfs_attr_leaf_name(leaf, args->index), 0, entsize);
|
||||||
be16_add_cpu(&hdr->usedbytes, -entsize);
|
be16_add_cpu(&hdr->usedbytes, -entsize);
|
||||||
xfs_da_log_buf(args->trans, bp,
|
xfs_da_log_buf(args->trans, bp,
|
||||||
XFS_DA_LOGRANGE(leaf, XFS_ATTR_LEAF_NAME(leaf, args->index),
|
XFS_DA_LOGRANGE(leaf, xfs_attr_leaf_name(leaf, args->index),
|
||||||
entsize));
|
entsize));
|
||||||
|
|
||||||
tmp = (be16_to_cpu(hdr->count) - args->index)
|
tmp = (be16_to_cpu(hdr->count) - args->index)
|
||||||
|
@ -1985,7 +1985,7 @@ xfs_attr_leaf_lookup_int(xfs_dabuf_t *bp, xfs_da_args_t *args)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (entry->flags & XFS_ATTR_LOCAL) {
|
if (entry->flags & XFS_ATTR_LOCAL) {
|
||||||
name_loc = XFS_ATTR_LEAF_NAME_LOCAL(leaf, probe);
|
name_loc = xfs_attr_leaf_name_local(leaf, probe);
|
||||||
if (name_loc->namelen != args->namelen)
|
if (name_loc->namelen != args->namelen)
|
||||||
continue;
|
continue;
|
||||||
if (memcmp(args->name, (char *)name_loc->nameval, args->namelen) != 0)
|
if (memcmp(args->name, (char *)name_loc->nameval, args->namelen) != 0)
|
||||||
|
@ -1995,7 +1995,7 @@ xfs_attr_leaf_lookup_int(xfs_dabuf_t *bp, xfs_da_args_t *args)
|
||||||
args->index = probe;
|
args->index = probe;
|
||||||
return(XFS_ERROR(EEXIST));
|
return(XFS_ERROR(EEXIST));
|
||||||
} else {
|
} else {
|
||||||
name_rmt = XFS_ATTR_LEAF_NAME_REMOTE(leaf, probe);
|
name_rmt = xfs_attr_leaf_name_remote(leaf, probe);
|
||||||
if (name_rmt->namelen != args->namelen)
|
if (name_rmt->namelen != args->namelen)
|
||||||
continue;
|
continue;
|
||||||
if (memcmp(args->name, (char *)name_rmt->name,
|
if (memcmp(args->name, (char *)name_rmt->name,
|
||||||
|
@ -2035,7 +2035,7 @@ xfs_attr_leaf_getvalue(xfs_dabuf_t *bp, xfs_da_args_t *args)
|
||||||
|
|
||||||
entry = &leaf->entries[args->index];
|
entry = &leaf->entries[args->index];
|
||||||
if (entry->flags & XFS_ATTR_LOCAL) {
|
if (entry->flags & XFS_ATTR_LOCAL) {
|
||||||
name_loc = XFS_ATTR_LEAF_NAME_LOCAL(leaf, args->index);
|
name_loc = xfs_attr_leaf_name_local(leaf, args->index);
|
||||||
ASSERT(name_loc->namelen == args->namelen);
|
ASSERT(name_loc->namelen == args->namelen);
|
||||||
ASSERT(memcmp(args->name, name_loc->nameval, args->namelen) == 0);
|
ASSERT(memcmp(args->name, name_loc->nameval, args->namelen) == 0);
|
||||||
valuelen = be16_to_cpu(name_loc->valuelen);
|
valuelen = be16_to_cpu(name_loc->valuelen);
|
||||||
|
@ -2050,7 +2050,7 @@ xfs_attr_leaf_getvalue(xfs_dabuf_t *bp, xfs_da_args_t *args)
|
||||||
args->valuelen = valuelen;
|
args->valuelen = valuelen;
|
||||||
memcpy(args->value, &name_loc->nameval[args->namelen], valuelen);
|
memcpy(args->value, &name_loc->nameval[args->namelen], valuelen);
|
||||||
} else {
|
} else {
|
||||||
name_rmt = XFS_ATTR_LEAF_NAME_REMOTE(leaf, args->index);
|
name_rmt = xfs_attr_leaf_name_remote(leaf, args->index);
|
||||||
ASSERT(name_rmt->namelen == args->namelen);
|
ASSERT(name_rmt->namelen == args->namelen);
|
||||||
ASSERT(memcmp(args->name, name_rmt->name, args->namelen) == 0);
|
ASSERT(memcmp(args->name, name_rmt->name, args->namelen) == 0);
|
||||||
valuelen = be32_to_cpu(name_rmt->valuelen);
|
valuelen = be32_to_cpu(name_rmt->valuelen);
|
||||||
|
@ -2143,7 +2143,7 @@ xfs_attr_leaf_moveents(xfs_attr_leafblock_t *leaf_s, int start_s,
|
||||||
* off for 6.2, should be revisited later.
|
* off for 6.2, should be revisited later.
|
||||||
*/
|
*/
|
||||||
if (entry_s->flags & XFS_ATTR_INCOMPLETE) { /* skip partials? */
|
if (entry_s->flags & XFS_ATTR_INCOMPLETE) { /* skip partials? */
|
||||||
memset(XFS_ATTR_LEAF_NAME(leaf_s, start_s + i), 0, tmp);
|
memset(xfs_attr_leaf_name(leaf_s, start_s + i), 0, tmp);
|
||||||
be16_add_cpu(&hdr_s->usedbytes, -tmp);
|
be16_add_cpu(&hdr_s->usedbytes, -tmp);
|
||||||
be16_add_cpu(&hdr_s->count, -1);
|
be16_add_cpu(&hdr_s->count, -1);
|
||||||
entry_d--; /* to compensate for ++ in loop hdr */
|
entry_d--; /* to compensate for ++ in loop hdr */
|
||||||
|
@ -2160,11 +2160,11 @@ xfs_attr_leaf_moveents(xfs_attr_leafblock_t *leaf_s, int start_s,
|
||||||
entry_d->flags = entry_s->flags;
|
entry_d->flags = entry_s->flags;
|
||||||
ASSERT(be16_to_cpu(entry_d->nameidx) + tmp
|
ASSERT(be16_to_cpu(entry_d->nameidx) + tmp
|
||||||
<= XFS_LBSIZE(mp));
|
<= XFS_LBSIZE(mp));
|
||||||
memmove(XFS_ATTR_LEAF_NAME(leaf_d, desti),
|
memmove(xfs_attr_leaf_name(leaf_d, desti),
|
||||||
XFS_ATTR_LEAF_NAME(leaf_s, start_s + i), tmp);
|
xfs_attr_leaf_name(leaf_s, start_s + i), tmp);
|
||||||
ASSERT(be16_to_cpu(entry_s->nameidx) + tmp
|
ASSERT(be16_to_cpu(entry_s->nameidx) + tmp
|
||||||
<= XFS_LBSIZE(mp));
|
<= XFS_LBSIZE(mp));
|
||||||
memset(XFS_ATTR_LEAF_NAME(leaf_s, start_s + i), 0, tmp);
|
memset(xfs_attr_leaf_name(leaf_s, start_s + i), 0, tmp);
|
||||||
be16_add_cpu(&hdr_s->usedbytes, -tmp);
|
be16_add_cpu(&hdr_s->usedbytes, -tmp);
|
||||||
be16_add_cpu(&hdr_d->usedbytes, tmp);
|
be16_add_cpu(&hdr_d->usedbytes, tmp);
|
||||||
be16_add_cpu(&hdr_s->count, -1);
|
be16_add_cpu(&hdr_s->count, -1);
|
||||||
|
@ -2276,12 +2276,12 @@ xfs_attr_leaf_entsize(xfs_attr_leafblock_t *leaf, int index)
|
||||||
|
|
||||||
ASSERT(be16_to_cpu(leaf->hdr.info.magic) == XFS_ATTR_LEAF_MAGIC);
|
ASSERT(be16_to_cpu(leaf->hdr.info.magic) == XFS_ATTR_LEAF_MAGIC);
|
||||||
if (leaf->entries[index].flags & XFS_ATTR_LOCAL) {
|
if (leaf->entries[index].flags & XFS_ATTR_LOCAL) {
|
||||||
name_loc = XFS_ATTR_LEAF_NAME_LOCAL(leaf, index);
|
name_loc = xfs_attr_leaf_name_local(leaf, index);
|
||||||
size = XFS_ATTR_LEAF_ENTSIZE_LOCAL(name_loc->namelen,
|
size = xfs_attr_leaf_entsize_local(name_loc->namelen,
|
||||||
be16_to_cpu(name_loc->valuelen));
|
be16_to_cpu(name_loc->valuelen));
|
||||||
} else {
|
} else {
|
||||||
name_rmt = XFS_ATTR_LEAF_NAME_REMOTE(leaf, index);
|
name_rmt = xfs_attr_leaf_name_remote(leaf, index);
|
||||||
size = XFS_ATTR_LEAF_ENTSIZE_REMOTE(name_rmt->namelen);
|
size = xfs_attr_leaf_entsize_remote(name_rmt->namelen);
|
||||||
}
|
}
|
||||||
return(size);
|
return(size);
|
||||||
}
|
}
|
||||||
|
@ -2297,13 +2297,13 @@ xfs_attr_leaf_newentsize(int namelen, int valuelen, int blocksize, int *local)
|
||||||
{
|
{
|
||||||
int size;
|
int size;
|
||||||
|
|
||||||
size = XFS_ATTR_LEAF_ENTSIZE_LOCAL(namelen, valuelen);
|
size = xfs_attr_leaf_entsize_local(namelen, valuelen);
|
||||||
if (size < XFS_ATTR_LEAF_ENTSIZE_LOCAL_MAX(blocksize)) {
|
if (size < xfs_attr_leaf_entsize_local_max(blocksize)) {
|
||||||
if (local) {
|
if (local) {
|
||||||
*local = 1;
|
*local = 1;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
size = XFS_ATTR_LEAF_ENTSIZE_REMOTE(namelen);
|
size = xfs_attr_leaf_entsize_remote(namelen);
|
||||||
if (local) {
|
if (local) {
|
||||||
*local = 0;
|
*local = 0;
|
||||||
}
|
}
|
||||||
|
@ -2372,7 +2372,7 @@ xfs_attr_leaf_list_int(xfs_dabuf_t *bp, xfs_attr_list_context_t *context)
|
||||||
|
|
||||||
if (entry->flags & XFS_ATTR_LOCAL) {
|
if (entry->flags & XFS_ATTR_LOCAL) {
|
||||||
xfs_attr_leaf_name_local_t *name_loc =
|
xfs_attr_leaf_name_local_t *name_loc =
|
||||||
XFS_ATTR_LEAF_NAME_LOCAL(leaf, i);
|
xfs_attr_leaf_name_local(leaf, i);
|
||||||
|
|
||||||
retval = context->put_listent(context,
|
retval = context->put_listent(context,
|
||||||
entry->flags,
|
entry->flags,
|
||||||
|
@ -2384,7 +2384,7 @@ xfs_attr_leaf_list_int(xfs_dabuf_t *bp, xfs_attr_list_context_t *context)
|
||||||
return retval;
|
return retval;
|
||||||
} else {
|
} else {
|
||||||
xfs_attr_leaf_name_remote_t *name_rmt =
|
xfs_attr_leaf_name_remote_t *name_rmt =
|
||||||
XFS_ATTR_LEAF_NAME_REMOTE(leaf, i);
|
xfs_attr_leaf_name_remote(leaf, i);
|
||||||
|
|
||||||
int valuelen = be32_to_cpu(name_rmt->valuelen);
|
int valuelen = be32_to_cpu(name_rmt->valuelen);
|
||||||
|
|
||||||
|
@ -2468,11 +2468,11 @@ xfs_attr_leaf_clearflag(xfs_da_args_t *args)
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
if (entry->flags & XFS_ATTR_LOCAL) {
|
if (entry->flags & XFS_ATTR_LOCAL) {
|
||||||
name_loc = XFS_ATTR_LEAF_NAME_LOCAL(leaf, args->index);
|
name_loc = xfs_attr_leaf_name_local(leaf, args->index);
|
||||||
namelen = name_loc->namelen;
|
namelen = name_loc->namelen;
|
||||||
name = (char *)name_loc->nameval;
|
name = (char *)name_loc->nameval;
|
||||||
} else {
|
} else {
|
||||||
name_rmt = XFS_ATTR_LEAF_NAME_REMOTE(leaf, args->index);
|
name_rmt = xfs_attr_leaf_name_remote(leaf, args->index);
|
||||||
namelen = name_rmt->namelen;
|
namelen = name_rmt->namelen;
|
||||||
name = (char *)name_rmt->name;
|
name = (char *)name_rmt->name;
|
||||||
}
|
}
|
||||||
|
@ -2487,7 +2487,7 @@ xfs_attr_leaf_clearflag(xfs_da_args_t *args)
|
||||||
|
|
||||||
if (args->rmtblkno) {
|
if (args->rmtblkno) {
|
||||||
ASSERT((entry->flags & XFS_ATTR_LOCAL) == 0);
|
ASSERT((entry->flags & XFS_ATTR_LOCAL) == 0);
|
||||||
name_rmt = XFS_ATTR_LEAF_NAME_REMOTE(leaf, args->index);
|
name_rmt = xfs_attr_leaf_name_remote(leaf, args->index);
|
||||||
name_rmt->valueblk = cpu_to_be32(args->rmtblkno);
|
name_rmt->valueblk = cpu_to_be32(args->rmtblkno);
|
||||||
name_rmt->valuelen = cpu_to_be32(args->valuelen);
|
name_rmt->valuelen = cpu_to_be32(args->valuelen);
|
||||||
xfs_da_log_buf(args->trans, bp,
|
xfs_da_log_buf(args->trans, bp,
|
||||||
|
@ -2534,7 +2534,7 @@ xfs_attr_leaf_setflag(xfs_da_args_t *args)
|
||||||
xfs_da_log_buf(args->trans, bp,
|
xfs_da_log_buf(args->trans, bp,
|
||||||
XFS_DA_LOGRANGE(leaf, entry, sizeof(*entry)));
|
XFS_DA_LOGRANGE(leaf, entry, sizeof(*entry)));
|
||||||
if ((entry->flags & XFS_ATTR_LOCAL) == 0) {
|
if ((entry->flags & XFS_ATTR_LOCAL) == 0) {
|
||||||
name_rmt = XFS_ATTR_LEAF_NAME_REMOTE(leaf, args->index);
|
name_rmt = xfs_attr_leaf_name_remote(leaf, args->index);
|
||||||
name_rmt->valueblk = 0;
|
name_rmt->valueblk = 0;
|
||||||
name_rmt->valuelen = 0;
|
name_rmt->valuelen = 0;
|
||||||
xfs_da_log_buf(args->trans, bp,
|
xfs_da_log_buf(args->trans, bp,
|
||||||
|
@ -2607,20 +2607,20 @@ xfs_attr_leaf_flipflags(xfs_da_args_t *args)
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
if (entry1->flags & XFS_ATTR_LOCAL) {
|
if (entry1->flags & XFS_ATTR_LOCAL) {
|
||||||
name_loc = XFS_ATTR_LEAF_NAME_LOCAL(leaf1, args->index);
|
name_loc = xfs_attr_leaf_name_local(leaf1, args->index);
|
||||||
namelen1 = name_loc->namelen;
|
namelen1 = name_loc->namelen;
|
||||||
name1 = (char *)name_loc->nameval;
|
name1 = (char *)name_loc->nameval;
|
||||||
} else {
|
} else {
|
||||||
name_rmt = XFS_ATTR_LEAF_NAME_REMOTE(leaf1, args->index);
|
name_rmt = xfs_attr_leaf_name_remote(leaf1, args->index);
|
||||||
namelen1 = name_rmt->namelen;
|
namelen1 = name_rmt->namelen;
|
||||||
name1 = (char *)name_rmt->name;
|
name1 = (char *)name_rmt->name;
|
||||||
}
|
}
|
||||||
if (entry2->flags & XFS_ATTR_LOCAL) {
|
if (entry2->flags & XFS_ATTR_LOCAL) {
|
||||||
name_loc = XFS_ATTR_LEAF_NAME_LOCAL(leaf2, args->index2);
|
name_loc = xfs_attr_leaf_name_local(leaf2, args->index2);
|
||||||
namelen2 = name_loc->namelen;
|
namelen2 = name_loc->namelen;
|
||||||
name2 = (char *)name_loc->nameval;
|
name2 = (char *)name_loc->nameval;
|
||||||
} else {
|
} else {
|
||||||
name_rmt = XFS_ATTR_LEAF_NAME_REMOTE(leaf2, args->index2);
|
name_rmt = xfs_attr_leaf_name_remote(leaf2, args->index2);
|
||||||
namelen2 = name_rmt->namelen;
|
namelen2 = name_rmt->namelen;
|
||||||
name2 = (char *)name_rmt->name;
|
name2 = (char *)name_rmt->name;
|
||||||
}
|
}
|
||||||
|
@ -2637,7 +2637,7 @@ xfs_attr_leaf_flipflags(xfs_da_args_t *args)
|
||||||
XFS_DA_LOGRANGE(leaf1, entry1, sizeof(*entry1)));
|
XFS_DA_LOGRANGE(leaf1, entry1, sizeof(*entry1)));
|
||||||
if (args->rmtblkno) {
|
if (args->rmtblkno) {
|
||||||
ASSERT((entry1->flags & XFS_ATTR_LOCAL) == 0);
|
ASSERT((entry1->flags & XFS_ATTR_LOCAL) == 0);
|
||||||
name_rmt = XFS_ATTR_LEAF_NAME_REMOTE(leaf1, args->index);
|
name_rmt = xfs_attr_leaf_name_remote(leaf1, args->index);
|
||||||
name_rmt->valueblk = cpu_to_be32(args->rmtblkno);
|
name_rmt->valueblk = cpu_to_be32(args->rmtblkno);
|
||||||
name_rmt->valuelen = cpu_to_be32(args->valuelen);
|
name_rmt->valuelen = cpu_to_be32(args->valuelen);
|
||||||
xfs_da_log_buf(args->trans, bp1,
|
xfs_da_log_buf(args->trans, bp1,
|
||||||
|
@ -2648,7 +2648,7 @@ xfs_attr_leaf_flipflags(xfs_da_args_t *args)
|
||||||
xfs_da_log_buf(args->trans, bp2,
|
xfs_da_log_buf(args->trans, bp2,
|
||||||
XFS_DA_LOGRANGE(leaf2, entry2, sizeof(*entry2)));
|
XFS_DA_LOGRANGE(leaf2, entry2, sizeof(*entry2)));
|
||||||
if ((entry2->flags & XFS_ATTR_LOCAL) == 0) {
|
if ((entry2->flags & XFS_ATTR_LOCAL) == 0) {
|
||||||
name_rmt = XFS_ATTR_LEAF_NAME_REMOTE(leaf2, args->index2);
|
name_rmt = xfs_attr_leaf_name_remote(leaf2, args->index2);
|
||||||
name_rmt->valueblk = 0;
|
name_rmt->valueblk = 0;
|
||||||
name_rmt->valuelen = 0;
|
name_rmt->valuelen = 0;
|
||||||
xfs_da_log_buf(args->trans, bp2,
|
xfs_da_log_buf(args->trans, bp2,
|
||||||
|
@ -2855,7 +2855,7 @@ xfs_attr_leaf_inactive(xfs_trans_t **trans, xfs_inode_t *dp, xfs_dabuf_t *bp)
|
||||||
for (i = 0; i < be16_to_cpu(leaf->hdr.count); entry++, i++) {
|
for (i = 0; i < be16_to_cpu(leaf->hdr.count); entry++, i++) {
|
||||||
if (be16_to_cpu(entry->nameidx) &&
|
if (be16_to_cpu(entry->nameidx) &&
|
||||||
((entry->flags & XFS_ATTR_LOCAL) == 0)) {
|
((entry->flags & XFS_ATTR_LOCAL) == 0)) {
|
||||||
name_rmt = XFS_ATTR_LEAF_NAME_REMOTE(leaf, i);
|
name_rmt = xfs_attr_leaf_name_remote(leaf, i);
|
||||||
if (name_rmt->valueblk)
|
if (name_rmt->valueblk)
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
|
@ -2883,7 +2883,7 @@ xfs_attr_leaf_inactive(xfs_trans_t **trans, xfs_inode_t *dp, xfs_dabuf_t *bp)
|
||||||
for (i = 0; i < be16_to_cpu(leaf->hdr.count); entry++, i++) {
|
for (i = 0; i < be16_to_cpu(leaf->hdr.count); entry++, i++) {
|
||||||
if (be16_to_cpu(entry->nameidx) &&
|
if (be16_to_cpu(entry->nameidx) &&
|
||||||
((entry->flags & XFS_ATTR_LOCAL) == 0)) {
|
((entry->flags & XFS_ATTR_LOCAL) == 0)) {
|
||||||
name_rmt = XFS_ATTR_LEAF_NAME_REMOTE(leaf, i);
|
name_rmt = xfs_attr_leaf_name_remote(leaf, i);
|
||||||
if (name_rmt->valueblk) {
|
if (name_rmt->valueblk) {
|
||||||
lp->valueblk = be32_to_cpu(name_rmt->valueblk);
|
lp->valueblk = be32_to_cpu(name_rmt->valueblk);
|
||||||
lp->valuelen = XFS_B_TO_FSB(dp->i_mount,
|
lp->valuelen = XFS_B_TO_FSB(dp->i_mount,
|
||||||
|
|
|
@ -151,8 +151,6 @@ typedef struct xfs_attr_leafblock {
|
||||||
/*
|
/*
|
||||||
* Cast typed pointers for "local" and "remote" name/value structs.
|
* Cast typed pointers for "local" and "remote" name/value structs.
|
||||||
*/
|
*/
|
||||||
#define XFS_ATTR_LEAF_NAME_REMOTE(leafp,idx) \
|
|
||||||
xfs_attr_leaf_name_remote(leafp,idx)
|
|
||||||
static inline xfs_attr_leaf_name_remote_t *
|
static inline xfs_attr_leaf_name_remote_t *
|
||||||
xfs_attr_leaf_name_remote(xfs_attr_leafblock_t *leafp, int idx)
|
xfs_attr_leaf_name_remote(xfs_attr_leafblock_t *leafp, int idx)
|
||||||
{
|
{
|
||||||
|
@ -160,8 +158,6 @@ xfs_attr_leaf_name_remote(xfs_attr_leafblock_t *leafp, int idx)
|
||||||
&((char *)leafp)[be16_to_cpu(leafp->entries[idx].nameidx)];
|
&((char *)leafp)[be16_to_cpu(leafp->entries[idx].nameidx)];
|
||||||
}
|
}
|
||||||
|
|
||||||
#define XFS_ATTR_LEAF_NAME_LOCAL(leafp,idx) \
|
|
||||||
xfs_attr_leaf_name_local(leafp,idx)
|
|
||||||
static inline xfs_attr_leaf_name_local_t *
|
static inline xfs_attr_leaf_name_local_t *
|
||||||
xfs_attr_leaf_name_local(xfs_attr_leafblock_t *leafp, int idx)
|
xfs_attr_leaf_name_local(xfs_attr_leafblock_t *leafp, int idx)
|
||||||
{
|
{
|
||||||
|
@ -169,8 +165,6 @@ xfs_attr_leaf_name_local(xfs_attr_leafblock_t *leafp, int idx)
|
||||||
&((char *)leafp)[be16_to_cpu(leafp->entries[idx].nameidx)];
|
&((char *)leafp)[be16_to_cpu(leafp->entries[idx].nameidx)];
|
||||||
}
|
}
|
||||||
|
|
||||||
#define XFS_ATTR_LEAF_NAME(leafp,idx) \
|
|
||||||
xfs_attr_leaf_name(leafp,idx)
|
|
||||||
static inline char *xfs_attr_leaf_name(xfs_attr_leafblock_t *leafp, int idx)
|
static inline char *xfs_attr_leaf_name(xfs_attr_leafblock_t *leafp, int idx)
|
||||||
{
|
{
|
||||||
return &((char *)leafp)[be16_to_cpu(leafp->entries[idx].nameidx)];
|
return &((char *)leafp)[be16_to_cpu(leafp->entries[idx].nameidx)];
|
||||||
|
@ -181,24 +175,18 @@ static inline char *xfs_attr_leaf_name(xfs_attr_leafblock_t *leafp, int idx)
|
||||||
* a "local" name/value structure, a "remote" name/value structure, and
|
* a "local" name/value structure, a "remote" name/value structure, and
|
||||||
* a pointer which might be either.
|
* a pointer which might be either.
|
||||||
*/
|
*/
|
||||||
#define XFS_ATTR_LEAF_ENTSIZE_REMOTE(nlen) \
|
|
||||||
xfs_attr_leaf_entsize_remote(nlen)
|
|
||||||
static inline int xfs_attr_leaf_entsize_remote(int nlen)
|
static inline int xfs_attr_leaf_entsize_remote(int nlen)
|
||||||
{
|
{
|
||||||
return ((uint)sizeof(xfs_attr_leaf_name_remote_t) - 1 + (nlen) + \
|
return ((uint)sizeof(xfs_attr_leaf_name_remote_t) - 1 + (nlen) + \
|
||||||
XFS_ATTR_LEAF_NAME_ALIGN - 1) & ~(XFS_ATTR_LEAF_NAME_ALIGN - 1);
|
XFS_ATTR_LEAF_NAME_ALIGN - 1) & ~(XFS_ATTR_LEAF_NAME_ALIGN - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define XFS_ATTR_LEAF_ENTSIZE_LOCAL(nlen,vlen) \
|
|
||||||
xfs_attr_leaf_entsize_local(nlen,vlen)
|
|
||||||
static inline int xfs_attr_leaf_entsize_local(int nlen, int vlen)
|
static inline int xfs_attr_leaf_entsize_local(int nlen, int vlen)
|
||||||
{
|
{
|
||||||
return ((uint)sizeof(xfs_attr_leaf_name_local_t) - 1 + (nlen) + (vlen) +
|
return ((uint)sizeof(xfs_attr_leaf_name_local_t) - 1 + (nlen) + (vlen) +
|
||||||
XFS_ATTR_LEAF_NAME_ALIGN - 1) & ~(XFS_ATTR_LEAF_NAME_ALIGN - 1);
|
XFS_ATTR_LEAF_NAME_ALIGN - 1) & ~(XFS_ATTR_LEAF_NAME_ALIGN - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define XFS_ATTR_LEAF_ENTSIZE_LOCAL_MAX(bsize) \
|
|
||||||
xfs_attr_leaf_entsize_local_max(bsize)
|
|
||||||
static inline int xfs_attr_leaf_entsize_local_max(int bsize)
|
static inline int xfs_attr_leaf_entsize_local_max(int bsize)
|
||||||
{
|
{
|
||||||
return (((bsize) >> 1) + ((bsize) >> 2));
|
return (((bsize) >> 1) + ((bsize) >> 2));
|
||||||
|
|
|
@ -23,24 +23,16 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* masks with n high/low bits set, 32-bit values & 64-bit values
|
* masks with n high/low bits set, 64-bit values
|
||||||
*/
|
*/
|
||||||
#define XFS_MASK32HI(n) xfs_mask32hi(n)
|
|
||||||
static inline __uint32_t xfs_mask32hi(int n)
|
|
||||||
{
|
|
||||||
return (__uint32_t)-1 << (32 - (n));
|
|
||||||
}
|
|
||||||
#define XFS_MASK64HI(n) xfs_mask64hi(n)
|
|
||||||
static inline __uint64_t xfs_mask64hi(int n)
|
static inline __uint64_t xfs_mask64hi(int n)
|
||||||
{
|
{
|
||||||
return (__uint64_t)-1 << (64 - (n));
|
return (__uint64_t)-1 << (64 - (n));
|
||||||
}
|
}
|
||||||
#define XFS_MASK32LO(n) xfs_mask32lo(n)
|
|
||||||
static inline __uint32_t xfs_mask32lo(int n)
|
static inline __uint32_t xfs_mask32lo(int n)
|
||||||
{
|
{
|
||||||
return ((__uint32_t)1 << (n)) - 1;
|
return ((__uint32_t)1 << (n)) - 1;
|
||||||
}
|
}
|
||||||
#define XFS_MASK64LO(n) xfs_mask64lo(n)
|
|
||||||
static inline __uint64_t xfs_mask64lo(int n)
|
static inline __uint64_t xfs_mask64lo(int n)
|
||||||
{
|
{
|
||||||
return ((__uint64_t)1 << (n)) - 1;
|
return ((__uint64_t)1 << (n)) - 1;
|
||||||
|
|
|
@ -110,16 +110,16 @@ __xfs_bmbt_get_all(
|
||||||
|
|
||||||
ext_flag = (int)(l0 >> (64 - BMBT_EXNTFLAG_BITLEN));
|
ext_flag = (int)(l0 >> (64 - BMBT_EXNTFLAG_BITLEN));
|
||||||
s->br_startoff = ((xfs_fileoff_t)l0 &
|
s->br_startoff = ((xfs_fileoff_t)l0 &
|
||||||
XFS_MASK64LO(64 - BMBT_EXNTFLAG_BITLEN)) >> 9;
|
xfs_mask64lo(64 - BMBT_EXNTFLAG_BITLEN)) >> 9;
|
||||||
#if XFS_BIG_BLKNOS
|
#if XFS_BIG_BLKNOS
|
||||||
s->br_startblock = (((xfs_fsblock_t)l0 & XFS_MASK64LO(9)) << 43) |
|
s->br_startblock = (((xfs_fsblock_t)l0 & xfs_mask64lo(9)) << 43) |
|
||||||
(((xfs_fsblock_t)l1) >> 21);
|
(((xfs_fsblock_t)l1) >> 21);
|
||||||
#else
|
#else
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
{
|
{
|
||||||
xfs_dfsbno_t b;
|
xfs_dfsbno_t b;
|
||||||
|
|
||||||
b = (((xfs_dfsbno_t)l0 & XFS_MASK64LO(9)) << 43) |
|
b = (((xfs_dfsbno_t)l0 & xfs_mask64lo(9)) << 43) |
|
||||||
(((xfs_dfsbno_t)l1) >> 21);
|
(((xfs_dfsbno_t)l1) >> 21);
|
||||||
ASSERT((b >> 32) == 0 || ISNULLDSTARTBLOCK(b));
|
ASSERT((b >> 32) == 0 || ISNULLDSTARTBLOCK(b));
|
||||||
s->br_startblock = (xfs_fsblock_t)b;
|
s->br_startblock = (xfs_fsblock_t)b;
|
||||||
|
@ -128,7 +128,7 @@ __xfs_bmbt_get_all(
|
||||||
s->br_startblock = (xfs_fsblock_t)(((xfs_dfsbno_t)l1) >> 21);
|
s->br_startblock = (xfs_fsblock_t)(((xfs_dfsbno_t)l1) >> 21);
|
||||||
#endif /* DEBUG */
|
#endif /* DEBUG */
|
||||||
#endif /* XFS_BIG_BLKNOS */
|
#endif /* XFS_BIG_BLKNOS */
|
||||||
s->br_blockcount = (xfs_filblks_t)(l1 & XFS_MASK64LO(21));
|
s->br_blockcount = (xfs_filblks_t)(l1 & xfs_mask64lo(21));
|
||||||
/* This is xfs_extent_state() in-line */
|
/* This is xfs_extent_state() in-line */
|
||||||
if (ext_flag) {
|
if (ext_flag) {
|
||||||
ASSERT(s->br_blockcount != 0); /* saved for DMIG */
|
ASSERT(s->br_blockcount != 0); /* saved for DMIG */
|
||||||
|
@ -153,7 +153,7 @@ xfs_filblks_t
|
||||||
xfs_bmbt_get_blockcount(
|
xfs_bmbt_get_blockcount(
|
||||||
xfs_bmbt_rec_host_t *r)
|
xfs_bmbt_rec_host_t *r)
|
||||||
{
|
{
|
||||||
return (xfs_filblks_t)(r->l1 & XFS_MASK64LO(21));
|
return (xfs_filblks_t)(r->l1 & xfs_mask64lo(21));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -164,13 +164,13 @@ xfs_bmbt_get_startblock(
|
||||||
xfs_bmbt_rec_host_t *r)
|
xfs_bmbt_rec_host_t *r)
|
||||||
{
|
{
|
||||||
#if XFS_BIG_BLKNOS
|
#if XFS_BIG_BLKNOS
|
||||||
return (((xfs_fsblock_t)r->l0 & XFS_MASK64LO(9)) << 43) |
|
return (((xfs_fsblock_t)r->l0 & xfs_mask64lo(9)) << 43) |
|
||||||
(((xfs_fsblock_t)r->l1) >> 21);
|
(((xfs_fsblock_t)r->l1) >> 21);
|
||||||
#else
|
#else
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
xfs_dfsbno_t b;
|
xfs_dfsbno_t b;
|
||||||
|
|
||||||
b = (((xfs_dfsbno_t)r->l0 & XFS_MASK64LO(9)) << 43) |
|
b = (((xfs_dfsbno_t)r->l0 & xfs_mask64lo(9)) << 43) |
|
||||||
(((xfs_dfsbno_t)r->l1) >> 21);
|
(((xfs_dfsbno_t)r->l1) >> 21);
|
||||||
ASSERT((b >> 32) == 0 || ISNULLDSTARTBLOCK(b));
|
ASSERT((b >> 32) == 0 || ISNULLDSTARTBLOCK(b));
|
||||||
return (xfs_fsblock_t)b;
|
return (xfs_fsblock_t)b;
|
||||||
|
@ -188,7 +188,7 @@ xfs_bmbt_get_startoff(
|
||||||
xfs_bmbt_rec_host_t *r)
|
xfs_bmbt_rec_host_t *r)
|
||||||
{
|
{
|
||||||
return ((xfs_fileoff_t)r->l0 &
|
return ((xfs_fileoff_t)r->l0 &
|
||||||
XFS_MASK64LO(64 - BMBT_EXNTFLAG_BITLEN)) >> 9;
|
xfs_mask64lo(64 - BMBT_EXNTFLAG_BITLEN)) >> 9;
|
||||||
}
|
}
|
||||||
|
|
||||||
xfs_exntst_t
|
xfs_exntst_t
|
||||||
|
@ -219,7 +219,7 @@ xfs_filblks_t
|
||||||
xfs_bmbt_disk_get_blockcount(
|
xfs_bmbt_disk_get_blockcount(
|
||||||
xfs_bmbt_rec_t *r)
|
xfs_bmbt_rec_t *r)
|
||||||
{
|
{
|
||||||
return (xfs_filblks_t)(be64_to_cpu(r->l1) & XFS_MASK64LO(21));
|
return (xfs_filblks_t)(be64_to_cpu(r->l1) & xfs_mask64lo(21));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -230,7 +230,7 @@ xfs_bmbt_disk_get_startoff(
|
||||||
xfs_bmbt_rec_t *r)
|
xfs_bmbt_rec_t *r)
|
||||||
{
|
{
|
||||||
return ((xfs_fileoff_t)be64_to_cpu(r->l0) &
|
return ((xfs_fileoff_t)be64_to_cpu(r->l0) &
|
||||||
XFS_MASK64LO(64 - BMBT_EXNTFLAG_BITLEN)) >> 9;
|
xfs_mask64lo(64 - BMBT_EXNTFLAG_BITLEN)) >> 9;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -248,33 +248,33 @@ xfs_bmbt_set_allf(
|
||||||
int extent_flag = (state == XFS_EXT_NORM) ? 0 : 1;
|
int extent_flag = (state == XFS_EXT_NORM) ? 0 : 1;
|
||||||
|
|
||||||
ASSERT(state == XFS_EXT_NORM || state == XFS_EXT_UNWRITTEN);
|
ASSERT(state == XFS_EXT_NORM || state == XFS_EXT_UNWRITTEN);
|
||||||
ASSERT((startoff & XFS_MASK64HI(64-BMBT_STARTOFF_BITLEN)) == 0);
|
ASSERT((startoff & xfs_mask64hi(64-BMBT_STARTOFF_BITLEN)) == 0);
|
||||||
ASSERT((blockcount & XFS_MASK64HI(64-BMBT_BLOCKCOUNT_BITLEN)) == 0);
|
ASSERT((blockcount & xfs_mask64hi(64-BMBT_BLOCKCOUNT_BITLEN)) == 0);
|
||||||
|
|
||||||
#if XFS_BIG_BLKNOS
|
#if XFS_BIG_BLKNOS
|
||||||
ASSERT((startblock & XFS_MASK64HI(64-BMBT_STARTBLOCK_BITLEN)) == 0);
|
ASSERT((startblock & xfs_mask64hi(64-BMBT_STARTBLOCK_BITLEN)) == 0);
|
||||||
|
|
||||||
r->l0 = ((xfs_bmbt_rec_base_t)extent_flag << 63) |
|
r->l0 = ((xfs_bmbt_rec_base_t)extent_flag << 63) |
|
||||||
((xfs_bmbt_rec_base_t)startoff << 9) |
|
((xfs_bmbt_rec_base_t)startoff << 9) |
|
||||||
((xfs_bmbt_rec_base_t)startblock >> 43);
|
((xfs_bmbt_rec_base_t)startblock >> 43);
|
||||||
r->l1 = ((xfs_bmbt_rec_base_t)startblock << 21) |
|
r->l1 = ((xfs_bmbt_rec_base_t)startblock << 21) |
|
||||||
((xfs_bmbt_rec_base_t)blockcount &
|
((xfs_bmbt_rec_base_t)blockcount &
|
||||||
(xfs_bmbt_rec_base_t)XFS_MASK64LO(21));
|
(xfs_bmbt_rec_base_t)xfs_mask64lo(21));
|
||||||
#else /* !XFS_BIG_BLKNOS */
|
#else /* !XFS_BIG_BLKNOS */
|
||||||
if (ISNULLSTARTBLOCK(startblock)) {
|
if (ISNULLSTARTBLOCK(startblock)) {
|
||||||
r->l0 = ((xfs_bmbt_rec_base_t)extent_flag << 63) |
|
r->l0 = ((xfs_bmbt_rec_base_t)extent_flag << 63) |
|
||||||
((xfs_bmbt_rec_base_t)startoff << 9) |
|
((xfs_bmbt_rec_base_t)startoff << 9) |
|
||||||
(xfs_bmbt_rec_base_t)XFS_MASK64LO(9);
|
(xfs_bmbt_rec_base_t)xfs_mask64lo(9);
|
||||||
r->l1 = XFS_MASK64HI(11) |
|
r->l1 = xfs_mask64hi(11) |
|
||||||
((xfs_bmbt_rec_base_t)startblock << 21) |
|
((xfs_bmbt_rec_base_t)startblock << 21) |
|
||||||
((xfs_bmbt_rec_base_t)blockcount &
|
((xfs_bmbt_rec_base_t)blockcount &
|
||||||
(xfs_bmbt_rec_base_t)XFS_MASK64LO(21));
|
(xfs_bmbt_rec_base_t)xfs_mask64lo(21));
|
||||||
} else {
|
} else {
|
||||||
r->l0 = ((xfs_bmbt_rec_base_t)extent_flag << 63) |
|
r->l0 = ((xfs_bmbt_rec_base_t)extent_flag << 63) |
|
||||||
((xfs_bmbt_rec_base_t)startoff << 9);
|
((xfs_bmbt_rec_base_t)startoff << 9);
|
||||||
r->l1 = ((xfs_bmbt_rec_base_t)startblock << 21) |
|
r->l1 = ((xfs_bmbt_rec_base_t)startblock << 21) |
|
||||||
((xfs_bmbt_rec_base_t)blockcount &
|
((xfs_bmbt_rec_base_t)blockcount &
|
||||||
(xfs_bmbt_rec_base_t)XFS_MASK64LO(21));
|
(xfs_bmbt_rec_base_t)xfs_mask64lo(21));
|
||||||
}
|
}
|
||||||
#endif /* XFS_BIG_BLKNOS */
|
#endif /* XFS_BIG_BLKNOS */
|
||||||
}
|
}
|
||||||
|
@ -306,11 +306,11 @@ xfs_bmbt_disk_set_allf(
|
||||||
int extent_flag = (state == XFS_EXT_NORM) ? 0 : 1;
|
int extent_flag = (state == XFS_EXT_NORM) ? 0 : 1;
|
||||||
|
|
||||||
ASSERT(state == XFS_EXT_NORM || state == XFS_EXT_UNWRITTEN);
|
ASSERT(state == XFS_EXT_NORM || state == XFS_EXT_UNWRITTEN);
|
||||||
ASSERT((startoff & XFS_MASK64HI(64-BMBT_STARTOFF_BITLEN)) == 0);
|
ASSERT((startoff & xfs_mask64hi(64-BMBT_STARTOFF_BITLEN)) == 0);
|
||||||
ASSERT((blockcount & XFS_MASK64HI(64-BMBT_BLOCKCOUNT_BITLEN)) == 0);
|
ASSERT((blockcount & xfs_mask64hi(64-BMBT_BLOCKCOUNT_BITLEN)) == 0);
|
||||||
|
|
||||||
#if XFS_BIG_BLKNOS
|
#if XFS_BIG_BLKNOS
|
||||||
ASSERT((startblock & XFS_MASK64HI(64-BMBT_STARTBLOCK_BITLEN)) == 0);
|
ASSERT((startblock & xfs_mask64hi(64-BMBT_STARTBLOCK_BITLEN)) == 0);
|
||||||
|
|
||||||
r->l0 = cpu_to_be64(
|
r->l0 = cpu_to_be64(
|
||||||
((xfs_bmbt_rec_base_t)extent_flag << 63) |
|
((xfs_bmbt_rec_base_t)extent_flag << 63) |
|
||||||
|
@ -319,17 +319,17 @@ xfs_bmbt_disk_set_allf(
|
||||||
r->l1 = cpu_to_be64(
|
r->l1 = cpu_to_be64(
|
||||||
((xfs_bmbt_rec_base_t)startblock << 21) |
|
((xfs_bmbt_rec_base_t)startblock << 21) |
|
||||||
((xfs_bmbt_rec_base_t)blockcount &
|
((xfs_bmbt_rec_base_t)blockcount &
|
||||||
(xfs_bmbt_rec_base_t)XFS_MASK64LO(21)));
|
(xfs_bmbt_rec_base_t)xfs_mask64lo(21)));
|
||||||
#else /* !XFS_BIG_BLKNOS */
|
#else /* !XFS_BIG_BLKNOS */
|
||||||
if (ISNULLSTARTBLOCK(startblock)) {
|
if (ISNULLSTARTBLOCK(startblock)) {
|
||||||
r->l0 = cpu_to_be64(
|
r->l0 = cpu_to_be64(
|
||||||
((xfs_bmbt_rec_base_t)extent_flag << 63) |
|
((xfs_bmbt_rec_base_t)extent_flag << 63) |
|
||||||
((xfs_bmbt_rec_base_t)startoff << 9) |
|
((xfs_bmbt_rec_base_t)startoff << 9) |
|
||||||
(xfs_bmbt_rec_base_t)XFS_MASK64LO(9));
|
(xfs_bmbt_rec_base_t)xfs_mask64lo(9));
|
||||||
r->l1 = cpu_to_be64(XFS_MASK64HI(11) |
|
r->l1 = cpu_to_be64(xfs_mask64hi(11) |
|
||||||
((xfs_bmbt_rec_base_t)startblock << 21) |
|
((xfs_bmbt_rec_base_t)startblock << 21) |
|
||||||
((xfs_bmbt_rec_base_t)blockcount &
|
((xfs_bmbt_rec_base_t)blockcount &
|
||||||
(xfs_bmbt_rec_base_t)XFS_MASK64LO(21)));
|
(xfs_bmbt_rec_base_t)xfs_mask64lo(21)));
|
||||||
} else {
|
} else {
|
||||||
r->l0 = cpu_to_be64(
|
r->l0 = cpu_to_be64(
|
||||||
((xfs_bmbt_rec_base_t)extent_flag << 63) |
|
((xfs_bmbt_rec_base_t)extent_flag << 63) |
|
||||||
|
@ -337,7 +337,7 @@ xfs_bmbt_disk_set_allf(
|
||||||
r->l1 = cpu_to_be64(
|
r->l1 = cpu_to_be64(
|
||||||
((xfs_bmbt_rec_base_t)startblock << 21) |
|
((xfs_bmbt_rec_base_t)startblock << 21) |
|
||||||
((xfs_bmbt_rec_base_t)blockcount &
|
((xfs_bmbt_rec_base_t)blockcount &
|
||||||
(xfs_bmbt_rec_base_t)XFS_MASK64LO(21)));
|
(xfs_bmbt_rec_base_t)xfs_mask64lo(21)));
|
||||||
}
|
}
|
||||||
#endif /* XFS_BIG_BLKNOS */
|
#endif /* XFS_BIG_BLKNOS */
|
||||||
}
|
}
|
||||||
|
@ -362,9 +362,9 @@ xfs_bmbt_set_blockcount(
|
||||||
xfs_bmbt_rec_host_t *r,
|
xfs_bmbt_rec_host_t *r,
|
||||||
xfs_filblks_t v)
|
xfs_filblks_t v)
|
||||||
{
|
{
|
||||||
ASSERT((v & XFS_MASK64HI(43)) == 0);
|
ASSERT((v & xfs_mask64hi(43)) == 0);
|
||||||
r->l1 = (r->l1 & (xfs_bmbt_rec_base_t)XFS_MASK64HI(43)) |
|
r->l1 = (r->l1 & (xfs_bmbt_rec_base_t)xfs_mask64hi(43)) |
|
||||||
(xfs_bmbt_rec_base_t)(v & XFS_MASK64LO(21));
|
(xfs_bmbt_rec_base_t)(v & xfs_mask64lo(21));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -376,21 +376,21 @@ xfs_bmbt_set_startblock(
|
||||||
xfs_fsblock_t v)
|
xfs_fsblock_t v)
|
||||||
{
|
{
|
||||||
#if XFS_BIG_BLKNOS
|
#if XFS_BIG_BLKNOS
|
||||||
ASSERT((v & XFS_MASK64HI(12)) == 0);
|
ASSERT((v & xfs_mask64hi(12)) == 0);
|
||||||
r->l0 = (r->l0 & (xfs_bmbt_rec_base_t)XFS_MASK64HI(55)) |
|
r->l0 = (r->l0 & (xfs_bmbt_rec_base_t)xfs_mask64hi(55)) |
|
||||||
(xfs_bmbt_rec_base_t)(v >> 43);
|
(xfs_bmbt_rec_base_t)(v >> 43);
|
||||||
r->l1 = (r->l1 & (xfs_bmbt_rec_base_t)XFS_MASK64LO(21)) |
|
r->l1 = (r->l1 & (xfs_bmbt_rec_base_t)xfs_mask64lo(21)) |
|
||||||
(xfs_bmbt_rec_base_t)(v << 21);
|
(xfs_bmbt_rec_base_t)(v << 21);
|
||||||
#else /* !XFS_BIG_BLKNOS */
|
#else /* !XFS_BIG_BLKNOS */
|
||||||
if (ISNULLSTARTBLOCK(v)) {
|
if (ISNULLSTARTBLOCK(v)) {
|
||||||
r->l0 |= (xfs_bmbt_rec_base_t)XFS_MASK64LO(9);
|
r->l0 |= (xfs_bmbt_rec_base_t)xfs_mask64lo(9);
|
||||||
r->l1 = (xfs_bmbt_rec_base_t)XFS_MASK64HI(11) |
|
r->l1 = (xfs_bmbt_rec_base_t)xfs_mask64hi(11) |
|
||||||
((xfs_bmbt_rec_base_t)v << 21) |
|
((xfs_bmbt_rec_base_t)v << 21) |
|
||||||
(r->l1 & (xfs_bmbt_rec_base_t)XFS_MASK64LO(21));
|
(r->l1 & (xfs_bmbt_rec_base_t)xfs_mask64lo(21));
|
||||||
} else {
|
} else {
|
||||||
r->l0 &= ~(xfs_bmbt_rec_base_t)XFS_MASK64LO(9);
|
r->l0 &= ~(xfs_bmbt_rec_base_t)xfs_mask64lo(9);
|
||||||
r->l1 = ((xfs_bmbt_rec_base_t)v << 21) |
|
r->l1 = ((xfs_bmbt_rec_base_t)v << 21) |
|
||||||
(r->l1 & (xfs_bmbt_rec_base_t)XFS_MASK64LO(21));
|
(r->l1 & (xfs_bmbt_rec_base_t)xfs_mask64lo(21));
|
||||||
}
|
}
|
||||||
#endif /* XFS_BIG_BLKNOS */
|
#endif /* XFS_BIG_BLKNOS */
|
||||||
}
|
}
|
||||||
|
@ -403,10 +403,10 @@ xfs_bmbt_set_startoff(
|
||||||
xfs_bmbt_rec_host_t *r,
|
xfs_bmbt_rec_host_t *r,
|
||||||
xfs_fileoff_t v)
|
xfs_fileoff_t v)
|
||||||
{
|
{
|
||||||
ASSERT((v & XFS_MASK64HI(9)) == 0);
|
ASSERT((v & xfs_mask64hi(9)) == 0);
|
||||||
r->l0 = (r->l0 & (xfs_bmbt_rec_base_t) XFS_MASK64HI(1)) |
|
r->l0 = (r->l0 & (xfs_bmbt_rec_base_t) xfs_mask64hi(1)) |
|
||||||
((xfs_bmbt_rec_base_t)v << 9) |
|
((xfs_bmbt_rec_base_t)v << 9) |
|
||||||
(r->l0 & (xfs_bmbt_rec_base_t)XFS_MASK64LO(9));
|
(r->l0 & (xfs_bmbt_rec_base_t)xfs_mask64lo(9));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -419,9 +419,9 @@ xfs_bmbt_set_state(
|
||||||
{
|
{
|
||||||
ASSERT(v == XFS_EXT_NORM || v == XFS_EXT_UNWRITTEN);
|
ASSERT(v == XFS_EXT_NORM || v == XFS_EXT_UNWRITTEN);
|
||||||
if (v == XFS_EXT_NORM)
|
if (v == XFS_EXT_NORM)
|
||||||
r->l0 &= XFS_MASK64LO(64 - BMBT_EXNTFLAG_BITLEN);
|
r->l0 &= xfs_mask64lo(64 - BMBT_EXNTFLAG_BITLEN);
|
||||||
else
|
else
|
||||||
r->l0 |= XFS_MASK64HI(BMBT_EXNTFLAG_BITLEN);
|
r->l0 |= xfs_mask64hi(BMBT_EXNTFLAG_BITLEN);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -730,8 +730,8 @@ xfs_btree_readahead_lblock(
|
||||||
struct xfs_btree_block *block)
|
struct xfs_btree_block *block)
|
||||||
{
|
{
|
||||||
int rval = 0;
|
int rval = 0;
|
||||||
xfs_fsblock_t left = be64_to_cpu(block->bb_u.l.bb_leftsib);
|
xfs_dfsbno_t left = be64_to_cpu(block->bb_u.l.bb_leftsib);
|
||||||
xfs_fsblock_t right = be64_to_cpu(block->bb_u.l.bb_rightsib);
|
xfs_dfsbno_t right = be64_to_cpu(block->bb_u.l.bb_rightsib);
|
||||||
|
|
||||||
if ((lr & XFS_BTCUR_LEFTRA) && left != NULLDFSBNO) {
|
if ((lr & XFS_BTCUR_LEFTRA) && left != NULLDFSBNO) {
|
||||||
xfs_btree_reada_bufl(cur->bc_mp, left, 1);
|
xfs_btree_reada_bufl(cur->bc_mp, left, 1);
|
||||||
|
|
|
@ -517,9 +517,9 @@ xfs_dir2_block_getdents(
|
||||||
/*
|
/*
|
||||||
* If it didn't fit, set the final offset to here & return.
|
* If it didn't fit, set the final offset to here & return.
|
||||||
*/
|
*/
|
||||||
if (filldir(dirent, dep->name, dep->namelen, cook,
|
if (filldir(dirent, dep->name, dep->namelen, cook & 0x7fffffff,
|
||||||
ino, DT_UNKNOWN)) {
|
ino, DT_UNKNOWN)) {
|
||||||
*offset = cook;
|
*offset = cook & 0x7fffffff;
|
||||||
xfs_da_brelse(NULL, bp);
|
xfs_da_brelse(NULL, bp);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -529,7 +529,8 @@ xfs_dir2_block_getdents(
|
||||||
* Reached the end of the block.
|
* Reached the end of the block.
|
||||||
* Set the offset to a non-existent block 1 and return.
|
* Set the offset to a non-existent block 1 and return.
|
||||||
*/
|
*/
|
||||||
*offset = xfs_dir2_db_off_to_dataptr(mp, mp->m_dirdatablk + 1, 0);
|
*offset = xfs_dir2_db_off_to_dataptr(mp, mp->m_dirdatablk + 1, 0) &
|
||||||
|
0x7fffffff;
|
||||||
xfs_da_brelse(NULL, bp);
|
xfs_da_brelse(NULL, bp);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1092,7 +1092,7 @@ xfs_dir2_leaf_getdents(
|
||||||
* Won't fit. Return to caller.
|
* Won't fit. Return to caller.
|
||||||
*/
|
*/
|
||||||
if (filldir(dirent, dep->name, dep->namelen,
|
if (filldir(dirent, dep->name, dep->namelen,
|
||||||
xfs_dir2_byte_to_dataptr(mp, curoff),
|
xfs_dir2_byte_to_dataptr(mp, curoff) & 0x7fffffff,
|
||||||
ino, DT_UNKNOWN))
|
ino, DT_UNKNOWN))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1108,9 +1108,9 @@ xfs_dir2_leaf_getdents(
|
||||||
* All done. Set output offset value to current offset.
|
* All done. Set output offset value to current offset.
|
||||||
*/
|
*/
|
||||||
if (curoff > xfs_dir2_dataptr_to_byte(mp, XFS_DIR2_MAX_DATAPTR))
|
if (curoff > xfs_dir2_dataptr_to_byte(mp, XFS_DIR2_MAX_DATAPTR))
|
||||||
*offset = XFS_DIR2_MAX_DATAPTR;
|
*offset = XFS_DIR2_MAX_DATAPTR & 0x7fffffff;
|
||||||
else
|
else
|
||||||
*offset = xfs_dir2_byte_to_dataptr(mp, curoff);
|
*offset = xfs_dir2_byte_to_dataptr(mp, curoff) & 0x7fffffff;
|
||||||
kmem_free(map);
|
kmem_free(map);
|
||||||
if (bp)
|
if (bp)
|
||||||
xfs_da_brelse(NULL, bp);
|
xfs_da_brelse(NULL, bp);
|
||||||
|
|
|
@ -752,8 +752,8 @@ xfs_dir2_sf_getdents(
|
||||||
#if XFS_BIG_INUMS
|
#if XFS_BIG_INUMS
|
||||||
ino += mp->m_inoadd;
|
ino += mp->m_inoadd;
|
||||||
#endif
|
#endif
|
||||||
if (filldir(dirent, ".", 1, dot_offset, ino, DT_DIR)) {
|
if (filldir(dirent, ".", 1, dot_offset & 0x7fffffff, ino, DT_DIR)) {
|
||||||
*offset = dot_offset;
|
*offset = dot_offset & 0x7fffffff;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -766,8 +766,8 @@ xfs_dir2_sf_getdents(
|
||||||
#if XFS_BIG_INUMS
|
#if XFS_BIG_INUMS
|
||||||
ino += mp->m_inoadd;
|
ino += mp->m_inoadd;
|
||||||
#endif
|
#endif
|
||||||
if (filldir(dirent, "..", 2, dotdot_offset, ino, DT_DIR)) {
|
if (filldir(dirent, "..", 2, dotdot_offset & 0x7fffffff, ino, DT_DIR)) {
|
||||||
*offset = dotdot_offset;
|
*offset = dotdot_offset & 0x7fffffff;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -791,14 +791,15 @@ xfs_dir2_sf_getdents(
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (filldir(dirent, sfep->name, sfep->namelen,
|
if (filldir(dirent, sfep->name, sfep->namelen,
|
||||||
off, ino, DT_UNKNOWN)) {
|
off & 0x7fffffff, ino, DT_UNKNOWN)) {
|
||||||
*offset = off;
|
*offset = off & 0x7fffffff;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
sfep = xfs_dir2_sf_nextentry(sfp, sfep);
|
sfep = xfs_dir2_sf_nextentry(sfp, sfep);
|
||||||
}
|
}
|
||||||
|
|
||||||
*offset = xfs_dir2_db_off_to_dataptr(mp, mp->m_dirdatablk + 1, 0);
|
*offset = xfs_dir2_db_off_to_dataptr(mp, mp->m_dirdatablk + 1, 0) &
|
||||||
|
0x7fffffff;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -45,7 +45,7 @@ typedef __uint32_t prid_t; /* project ID */
|
||||||
typedef __uint32_t inst_t; /* an instruction */
|
typedef __uint32_t inst_t; /* an instruction */
|
||||||
|
|
||||||
typedef __s64 xfs_off_t; /* <file offset> type */
|
typedef __s64 xfs_off_t; /* <file offset> type */
|
||||||
typedef __u64 xfs_ino_t; /* <inode> type */
|
typedef unsigned long long xfs_ino_t; /* <inode> type */
|
||||||
typedef __s64 xfs_daddr_t; /* <disk address> type */
|
typedef __s64 xfs_daddr_t; /* <disk address> type */
|
||||||
typedef char * xfs_caddr_t; /* <core address> type */
|
typedef char * xfs_caddr_t; /* <core address> type */
|
||||||
typedef __u32 xfs_dev_t;
|
typedef __u32 xfs_dev_t;
|
||||||
|
@ -111,8 +111,6 @@ typedef __uint64_t xfs_fileoff_t; /* block number in a file */
|
||||||
typedef __int64_t xfs_sfiloff_t; /* signed block number in a file */
|
typedef __int64_t xfs_sfiloff_t; /* signed block number in a file */
|
||||||
typedef __uint64_t xfs_filblks_t; /* number of blocks in a file */
|
typedef __uint64_t xfs_filblks_t; /* number of blocks in a file */
|
||||||
|
|
||||||
typedef __uint8_t xfs_arch_t; /* architecture of an xfs fs */
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Null values for the types.
|
* Null values for the types.
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue