提交 dc1cc851 编写于 作者: L Linus Torvalds

Merge tag 'xfs-for-linus-3.17-rc1' of git://oss.sgi.com/xfs/xfs

Pull xfs update from Dave Chinner:
 "This update contains:
   - conversion of the XFS core to pass negative error numbers
   - restructing of core XFS code that is shared with userspace to
     fs/xfs/libxfs
   - introduction of sysfs interface for XFS
   - bulkstat refactoring
   - demand driven speculative preallocation removal
   - XFS now always requires 64 bit sectors to be configured
   - metadata verifier changes to ensure CRCs are calculated during log
     recovery
   - various minor code cleanups
   - miscellaneous bug fixes

  The diffstat is kind of noisy because of the restructuring of the code
  to make kernel/userspace code sharing simpler, along with the XFS wide
  change to use the standard negative error return convention (at last!)"

* tag 'xfs-for-linus-3.17-rc1' of git://oss.sgi.com/xfs/xfs: (45 commits)
  xfs: fix coccinelle warnings
  xfs: flush both inodes in xfs_swap_extents
  xfs: fix swapext ilock deadlock
  xfs: kill xfs_vnode.h
  xfs: kill VN_MAPPED
  xfs: kill VN_CACHED
  xfs: kill VN_DIRTY()
  xfs: dquot recovery needs verifiers
  xfs: quotacheck leaves dquot buffers without verifiers
  xfs: ensure verifiers are attached to recovered buffers
  xfs: catch buffers written without verifiers attached
  xfs: avoid false quotacheck after unclean shutdown
  xfs: fix rounding error of fiemap length parameter
  xfs: introduce xfs_bulkstat_ag_ichunk
  xfs: require 64-bit sector_t
  xfs: fix uflags detection at xfs_fs_rm_xquota
  xfs: remove XFS_IS_OQUOTA_ON macros
  xfs: tidy up xfs_set_inode32
  xfs: allow inode allocations in post-growfs disk space
  xfs: mark xfs_qm_quotacheck as static
  ...
What: /sys/fs/xfs/<disk>/log/log_head_lsn
Date: July 2014
KernelVersion: 3.17
Contact: xfs@oss.sgi.com
Description:
The log sequence number (LSN) of the current head of the
log. The LSN is exported in "cycle:basic block" format.
Users: xfstests
What: /sys/fs/xfs/<disk>/log/log_tail_lsn
Date: July 2014
KernelVersion: 3.17
Contact: xfs@oss.sgi.com
Description:
The log sequence number (LSN) of the current tail of the
log. The LSN is exported in "cycle:basic block" format.
What: /sys/fs/xfs/<disk>/log/reserve_grant_head
Date: July 2014
KernelVersion: 3.17
Contact: xfs@oss.sgi.com
Description:
The current state of the log reserve grant head. It
represents the total log reservation of all currently
outstanding transactions. The grant head is exported in
"cycle:bytes" format.
Users: xfstests
What: /sys/fs/xfs/<disk>/log/write_grant_head
Date: July 2014
KernelVersion: 3.17
Contact: xfs@oss.sgi.com
Description:
The current state of the log write grant head. It
represents the total log reservation of all currently
oustanding transactions, including regrants due to
rolling transactions. The grant head is exported in
"cycle:bytes" format.
Users: xfstests
config XFS_FS config XFS_FS
tristate "XFS filesystem support" tristate "XFS filesystem support"
depends on BLOCK depends on BLOCK
depends on (64BIT || LBDAF)
select EXPORTFS select EXPORTFS
select LIBCRC32C select LIBCRC32C
help help
......
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
# #
ccflags-y += -I$(src) # needed for trace events ccflags-y += -I$(src) # needed for trace events
ccflags-y += -I$(src)/libxfs
ccflags-$(CONFIG_XFS_DEBUG) += -g ccflags-$(CONFIG_XFS_DEBUG) += -g
...@@ -25,6 +26,39 @@ obj-$(CONFIG_XFS_FS) += xfs.o ...@@ -25,6 +26,39 @@ obj-$(CONFIG_XFS_FS) += xfs.o
# this one should be compiled first, as the tracing macros can easily blow up # this one should be compiled first, as the tracing macros can easily blow up
xfs-y += xfs_trace.o xfs-y += xfs_trace.o
# build the libxfs code first
xfs-y += $(addprefix libxfs/, \
xfs_alloc.o \
xfs_alloc_btree.o \
xfs_attr.o \
xfs_attr_leaf.o \
xfs_attr_remote.o \
xfs_bmap.o \
xfs_bmap_btree.o \
xfs_btree.o \
xfs_da_btree.o \
xfs_da_format.o \
xfs_dir2.o \
xfs_dir2_block.o \
xfs_dir2_data.o \
xfs_dir2_leaf.o \
xfs_dir2_node.o \
xfs_dir2_sf.o \
xfs_dquot_buf.o \
xfs_ialloc.o \
xfs_ialloc_btree.o \
xfs_inode_fork.o \
xfs_inode_buf.o \
xfs_log_rlimit.o \
xfs_sb.o \
xfs_symlink_remote.o \
xfs_trans_resv.o \
)
# xfs_rtbitmap is shared with libxfs
xfs-$(CONFIG_XFS_RT) += $(addprefix libxfs/, \
xfs_rtbitmap.o \
)
# highlevel code # highlevel code
xfs-y += xfs_aops.o \ xfs-y += xfs_aops.o \
xfs_attr_inactive.o \ xfs_attr_inactive.o \
...@@ -45,53 +79,27 @@ xfs-y += xfs_aops.o \ ...@@ -45,53 +79,27 @@ xfs-y += xfs_aops.o \
xfs_ioctl.o \ xfs_ioctl.o \
xfs_iomap.o \ xfs_iomap.o \
xfs_iops.o \ xfs_iops.o \
xfs_inode.o \
xfs_itable.o \ xfs_itable.o \
xfs_message.o \ xfs_message.o \
xfs_mount.o \ xfs_mount.o \
xfs_mru_cache.o \ xfs_mru_cache.o \
xfs_super.o \ xfs_super.o \
xfs_symlink.o \ xfs_symlink.o \
xfs_sysfs.o \
xfs_trans.o \ xfs_trans.o \
xfs_xattr.o \ xfs_xattr.o \
kmem.o \ kmem.o \
uuid.o uuid.o
# code shared with libxfs
xfs-y += xfs_alloc.o \
xfs_alloc_btree.o \
xfs_attr.o \
xfs_attr_leaf.o \
xfs_attr_remote.o \
xfs_bmap.o \
xfs_bmap_btree.o \
xfs_btree.o \
xfs_da_btree.o \
xfs_da_format.o \
xfs_dir2.o \
xfs_dir2_block.o \
xfs_dir2_data.o \
xfs_dir2_leaf.o \
xfs_dir2_node.o \
xfs_dir2_sf.o \
xfs_dquot_buf.o \
xfs_ialloc.o \
xfs_ialloc_btree.o \
xfs_icreate_item.o \
xfs_inode.o \
xfs_inode_fork.o \
xfs_inode_buf.o \
xfs_log_recover.o \
xfs_log_rlimit.o \
xfs_sb.o \
xfs_symlink_remote.o \
xfs_trans_resv.o
# low-level transaction/log code # low-level transaction/log code
xfs-y += xfs_log.o \ xfs-y += xfs_log.o \
xfs_log_cil.o \ xfs_log_cil.o \
xfs_buf_item.o \ xfs_buf_item.o \
xfs_extfree_item.o \ xfs_extfree_item.o \
xfs_icreate_item.o \
xfs_inode_item.o \ xfs_inode_item.o \
xfs_log_recover.o \
xfs_trans_ail.o \ xfs_trans_ail.o \
xfs_trans_buf.o \ xfs_trans_buf.o \
xfs_trans_extfree.o \ xfs_trans_extfree.o \
...@@ -107,8 +115,7 @@ xfs-$(CONFIG_XFS_QUOTA) += xfs_dquot.o \ ...@@ -107,8 +115,7 @@ xfs-$(CONFIG_XFS_QUOTA) += xfs_dquot.o \
xfs_quotaops.o xfs_quotaops.o
# xfs_rtbitmap is shared with libxfs # xfs_rtbitmap is shared with libxfs
xfs-$(CONFIG_XFS_RT) += xfs_rtalloc.o \ xfs-$(CONFIG_XFS_RT) += xfs_rtalloc.o
xfs_rtbitmap.o
xfs-$(CONFIG_XFS_POSIX_ACL) += xfs_acl.o xfs-$(CONFIG_XFS_POSIX_ACL) += xfs_acl.o
xfs-$(CONFIG_PROC_FS) += xfs_stats.o xfs-$(CONFIG_PROC_FS) += xfs_stats.o
......
...@@ -483,9 +483,9 @@ xfs_agfl_read_verify( ...@@ -483,9 +483,9 @@ xfs_agfl_read_verify(
return; return;
if (!xfs_buf_verify_cksum(bp, XFS_AGFL_CRC_OFF)) if (!xfs_buf_verify_cksum(bp, XFS_AGFL_CRC_OFF))
xfs_buf_ioerror(bp, EFSBADCRC); xfs_buf_ioerror(bp, -EFSBADCRC);
else if (!xfs_agfl_verify(bp)) else if (!xfs_agfl_verify(bp))
xfs_buf_ioerror(bp, EFSCORRUPTED); xfs_buf_ioerror(bp, -EFSCORRUPTED);
if (bp->b_error) if (bp->b_error)
xfs_verifier_error(bp); xfs_verifier_error(bp);
...@@ -503,7 +503,7 @@ xfs_agfl_write_verify( ...@@ -503,7 +503,7 @@ xfs_agfl_write_verify(
return; return;
if (!xfs_agfl_verify(bp)) { if (!xfs_agfl_verify(bp)) {
xfs_buf_ioerror(bp, EFSCORRUPTED); xfs_buf_ioerror(bp, -EFSCORRUPTED);
xfs_verifier_error(bp); xfs_verifier_error(bp);
return; return;
} }
...@@ -559,7 +559,7 @@ xfs_alloc_update_counters( ...@@ -559,7 +559,7 @@ xfs_alloc_update_counters(
xfs_trans_agblocks_delta(tp, len); xfs_trans_agblocks_delta(tp, len);
if (unlikely(be32_to_cpu(agf->agf_freeblks) > if (unlikely(be32_to_cpu(agf->agf_freeblks) >
be32_to_cpu(agf->agf_length))) be32_to_cpu(agf->agf_length)))
return EFSCORRUPTED; return -EFSCORRUPTED;
xfs_alloc_log_agf(tp, agbp, XFS_AGF_FREEBLKS); xfs_alloc_log_agf(tp, agbp, XFS_AGF_FREEBLKS);
return 0; return 0;
...@@ -2234,11 +2234,11 @@ xfs_agf_read_verify( ...@@ -2234,11 +2234,11 @@ xfs_agf_read_verify(
if (xfs_sb_version_hascrc(&mp->m_sb) && if (xfs_sb_version_hascrc(&mp->m_sb) &&
!xfs_buf_verify_cksum(bp, XFS_AGF_CRC_OFF)) !xfs_buf_verify_cksum(bp, XFS_AGF_CRC_OFF))
xfs_buf_ioerror(bp, EFSBADCRC); xfs_buf_ioerror(bp, -EFSBADCRC);
else if (XFS_TEST_ERROR(!xfs_agf_verify(mp, bp), mp, else if (XFS_TEST_ERROR(!xfs_agf_verify(mp, bp), mp,
XFS_ERRTAG_ALLOC_READ_AGF, XFS_ERRTAG_ALLOC_READ_AGF,
XFS_RANDOM_ALLOC_READ_AGF)) XFS_RANDOM_ALLOC_READ_AGF))
xfs_buf_ioerror(bp, EFSCORRUPTED); xfs_buf_ioerror(bp, -EFSCORRUPTED);
if (bp->b_error) if (bp->b_error)
xfs_verifier_error(bp); xfs_verifier_error(bp);
...@@ -2252,7 +2252,7 @@ xfs_agf_write_verify( ...@@ -2252,7 +2252,7 @@ xfs_agf_write_verify(
struct xfs_buf_log_item *bip = bp->b_fspriv; struct xfs_buf_log_item *bip = bp->b_fspriv;
if (!xfs_agf_verify(mp, bp)) { if (!xfs_agf_verify(mp, bp)) {
xfs_buf_ioerror(bp, EFSCORRUPTED); xfs_buf_ioerror(bp, -EFSCORRUPTED);
xfs_verifier_error(bp); xfs_verifier_error(bp);
return; return;
} }
...@@ -2601,11 +2601,11 @@ xfs_free_extent( ...@@ -2601,11 +2601,11 @@ xfs_free_extent(
*/ */
args.agno = XFS_FSB_TO_AGNO(args.mp, bno); args.agno = XFS_FSB_TO_AGNO(args.mp, bno);
if (args.agno >= args.mp->m_sb.sb_agcount) if (args.agno >= args.mp->m_sb.sb_agcount)
return EFSCORRUPTED; return -EFSCORRUPTED;
args.agbno = XFS_FSB_TO_AGBNO(args.mp, bno); args.agbno = XFS_FSB_TO_AGBNO(args.mp, bno);
if (args.agbno >= args.mp->m_sb.sb_agblocks) if (args.agbno >= args.mp->m_sb.sb_agblocks)
return EFSCORRUPTED; return -EFSCORRUPTED;
args.pag = xfs_perag_get(args.mp, args.agno); args.pag = xfs_perag_get(args.mp, args.agno);
ASSERT(args.pag); ASSERT(args.pag);
...@@ -2617,7 +2617,7 @@ xfs_free_extent( ...@@ -2617,7 +2617,7 @@ xfs_free_extent(
/* validate the extent size is legal now we have the agf locked */ /* validate the extent size is legal now we have the agf locked */
if (args.agbno + len > if (args.agbno + len >
be32_to_cpu(XFS_BUF_TO_AGF(args.agbp)->agf_length)) { be32_to_cpu(XFS_BUF_TO_AGF(args.agbp)->agf_length)) {
error = EFSCORRUPTED; error = -EFSCORRUPTED;
goto error0; goto error0;
} }
......
...@@ -355,9 +355,9 @@ xfs_allocbt_read_verify( ...@@ -355,9 +355,9 @@ xfs_allocbt_read_verify(
struct xfs_buf *bp) struct xfs_buf *bp)
{ {
if (!xfs_btree_sblock_verify_crc(bp)) if (!xfs_btree_sblock_verify_crc(bp))
xfs_buf_ioerror(bp, EFSBADCRC); xfs_buf_ioerror(bp, -EFSBADCRC);
else if (!xfs_allocbt_verify(bp)) else if (!xfs_allocbt_verify(bp))
xfs_buf_ioerror(bp, EFSCORRUPTED); xfs_buf_ioerror(bp, -EFSCORRUPTED);
if (bp->b_error) { if (bp->b_error) {
trace_xfs_btree_corrupt(bp, _RET_IP_); trace_xfs_btree_corrupt(bp, _RET_IP_);
...@@ -371,7 +371,7 @@ xfs_allocbt_write_verify( ...@@ -371,7 +371,7 @@ xfs_allocbt_write_verify(
{ {
if (!xfs_allocbt_verify(bp)) { if (!xfs_allocbt_verify(bp)) {
trace_xfs_btree_corrupt(bp, _RET_IP_); trace_xfs_btree_corrupt(bp, _RET_IP_);
xfs_buf_ioerror(bp, EFSCORRUPTED); xfs_buf_ioerror(bp, -EFSCORRUPTED);
xfs_verifier_error(bp); xfs_verifier_error(bp);
return; return;
} }
......
...@@ -85,7 +85,7 @@ xfs_attr_args_init( ...@@ -85,7 +85,7 @@ xfs_attr_args_init(
{ {
if (!name) if (!name)
return EINVAL; return -EINVAL;
memset(args, 0, sizeof(*args)); memset(args, 0, sizeof(*args));
args->geo = dp->i_mount->m_attr_geo; args->geo = dp->i_mount->m_attr_geo;
...@@ -95,7 +95,7 @@ xfs_attr_args_init( ...@@ -95,7 +95,7 @@ xfs_attr_args_init(
args->name = name; args->name = name;
args->namelen = strlen((const char *)name); args->namelen = strlen((const char *)name);
if (args->namelen >= MAXNAMELEN) if (args->namelen >= MAXNAMELEN)
return EFAULT; /* match IRIX behaviour */ return -EFAULT; /* match IRIX behaviour */
args->hashval = xfs_da_hashname(args->name, args->namelen); args->hashval = xfs_da_hashname(args->name, args->namelen);
return 0; return 0;
...@@ -131,10 +131,10 @@ xfs_attr_get( ...@@ -131,10 +131,10 @@ xfs_attr_get(
XFS_STATS_INC(xs_attr_get); XFS_STATS_INC(xs_attr_get);
if (XFS_FORCED_SHUTDOWN(ip->i_mount)) if (XFS_FORCED_SHUTDOWN(ip->i_mount))
return EIO; return -EIO;
if (!xfs_inode_hasattr(ip)) if (!xfs_inode_hasattr(ip))
return ENOATTR; return -ENOATTR;
error = xfs_attr_args_init(&args, ip, name, flags); error = xfs_attr_args_init(&args, ip, name, flags);
if (error) if (error)
...@@ -145,7 +145,7 @@ xfs_attr_get( ...@@ -145,7 +145,7 @@ xfs_attr_get(
lock_mode = xfs_ilock_attr_map_shared(ip); lock_mode = xfs_ilock_attr_map_shared(ip);
if (!xfs_inode_hasattr(ip)) if (!xfs_inode_hasattr(ip))
error = ENOATTR; error = -ENOATTR;
else if (ip->i_d.di_aformat == XFS_DINODE_FMT_LOCAL) else if (ip->i_d.di_aformat == XFS_DINODE_FMT_LOCAL)
error = xfs_attr_shortform_getvalue(&args); error = xfs_attr_shortform_getvalue(&args);
else if (xfs_bmap_one_block(ip, XFS_ATTR_FORK)) else if (xfs_bmap_one_block(ip, XFS_ATTR_FORK))
...@@ -155,7 +155,7 @@ xfs_attr_get( ...@@ -155,7 +155,7 @@ xfs_attr_get(
xfs_iunlock(ip, lock_mode); xfs_iunlock(ip, lock_mode);
*valuelenp = args.valuelen; *valuelenp = args.valuelen;
return error == EEXIST ? 0 : error; return error == -EEXIST ? 0 : error;
} }
/* /*
...@@ -213,7 +213,7 @@ xfs_attr_set( ...@@ -213,7 +213,7 @@ xfs_attr_set(
XFS_STATS_INC(xs_attr_set); XFS_STATS_INC(xs_attr_set);
if (XFS_FORCED_SHUTDOWN(dp->i_mount)) if (XFS_FORCED_SHUTDOWN(dp->i_mount))
return EIO; return -EIO;
error = xfs_attr_args_init(&args, dp, name, flags); error = xfs_attr_args_init(&args, dp, name, flags);
if (error) if (error)
...@@ -304,7 +304,7 @@ xfs_attr_set( ...@@ -304,7 +304,7 @@ xfs_attr_set(
* the inode. * the inode.
*/ */
error = xfs_attr_shortform_addname(&args); error = xfs_attr_shortform_addname(&args);
if (error != ENOSPC) { if (error != -ENOSPC) {
/* /*
* Commit the shortform mods, and we're done. * Commit the shortform mods, and we're done.
* NOTE: this is also the error path (EEXIST, etc). * NOTE: this is also the error path (EEXIST, etc).
...@@ -419,10 +419,10 @@ xfs_attr_remove( ...@@ -419,10 +419,10 @@ xfs_attr_remove(
XFS_STATS_INC(xs_attr_remove); XFS_STATS_INC(xs_attr_remove);
if (XFS_FORCED_SHUTDOWN(dp->i_mount)) if (XFS_FORCED_SHUTDOWN(dp->i_mount))
return EIO; return -EIO;
if (!xfs_inode_hasattr(dp)) if (!xfs_inode_hasattr(dp))
return ENOATTR; return -ENOATTR;
error = xfs_attr_args_init(&args, dp, name, flags); error = xfs_attr_args_init(&args, dp, name, flags);
if (error) if (error)
...@@ -477,7 +477,7 @@ xfs_attr_remove( ...@@ -477,7 +477,7 @@ xfs_attr_remove(
xfs_trans_ijoin(args.trans, dp, 0); xfs_trans_ijoin(args.trans, dp, 0);
if (!xfs_inode_hasattr(dp)) { if (!xfs_inode_hasattr(dp)) {
error = XFS_ERROR(ENOATTR); error = -ENOATTR;
} else if (dp->i_d.di_aformat == XFS_DINODE_FMT_LOCAL) { } else if (dp->i_d.di_aformat == XFS_DINODE_FMT_LOCAL) {
ASSERT(dp->i_afp->if_flags & XFS_IFINLINE); ASSERT(dp->i_afp->if_flags & XFS_IFINLINE);
error = xfs_attr_shortform_remove(&args); error = xfs_attr_shortform_remove(&args);
...@@ -534,28 +534,28 @@ xfs_attr_shortform_addname(xfs_da_args_t *args) ...@@ -534,28 +534,28 @@ xfs_attr_shortform_addname(xfs_da_args_t *args)
trace_xfs_attr_sf_addname(args); trace_xfs_attr_sf_addname(args);
retval = xfs_attr_shortform_lookup(args); retval = xfs_attr_shortform_lookup(args);
if ((args->flags & ATTR_REPLACE) && (retval == ENOATTR)) { if ((args->flags & ATTR_REPLACE) && (retval == -ENOATTR)) {
return(retval); return retval;
} else if (retval == EEXIST) { } else if (retval == -EEXIST) {
if (args->flags & ATTR_CREATE) if (args->flags & ATTR_CREATE)
return(retval); return retval;
retval = xfs_attr_shortform_remove(args); retval = xfs_attr_shortform_remove(args);
ASSERT(retval == 0); ASSERT(retval == 0);
} }
if (args->namelen >= XFS_ATTR_SF_ENTSIZE_MAX || if (args->namelen >= XFS_ATTR_SF_ENTSIZE_MAX ||
args->valuelen >= XFS_ATTR_SF_ENTSIZE_MAX) args->valuelen >= XFS_ATTR_SF_ENTSIZE_MAX)
return(XFS_ERROR(ENOSPC)); return -ENOSPC;
newsize = XFS_ATTR_SF_TOTSIZE(args->dp); newsize = XFS_ATTR_SF_TOTSIZE(args->dp);
newsize += XFS_ATTR_SF_ENTSIZE_BYNAME(args->namelen, args->valuelen); newsize += XFS_ATTR_SF_ENTSIZE_BYNAME(args->namelen, args->valuelen);
forkoff = xfs_attr_shortform_bytesfit(args->dp, newsize); forkoff = xfs_attr_shortform_bytesfit(args->dp, newsize);
if (!forkoff) if (!forkoff)
return(XFS_ERROR(ENOSPC)); return -ENOSPC;
xfs_attr_shortform_add(args, forkoff); xfs_attr_shortform_add(args, forkoff);
return(0); return 0;
} }
...@@ -592,10 +592,10 @@ xfs_attr_leaf_addname(xfs_da_args_t *args) ...@@ -592,10 +592,10 @@ xfs_attr_leaf_addname(xfs_da_args_t *args)
* the given flags produce an error or call for an atomic rename. * the given flags produce an error or call for an atomic rename.
*/ */
retval = xfs_attr3_leaf_lookup_int(bp, args); retval = xfs_attr3_leaf_lookup_int(bp, args);
if ((args->flags & ATTR_REPLACE) && (retval == ENOATTR)) { if ((args->flags & ATTR_REPLACE) && (retval == -ENOATTR)) {
xfs_trans_brelse(args->trans, bp); xfs_trans_brelse(args->trans, bp);
return retval; return retval;
} else if (retval == EEXIST) { } else if (retval == -EEXIST) {
if (args->flags & ATTR_CREATE) { /* pure create op */ if (args->flags & ATTR_CREATE) { /* pure create op */
xfs_trans_brelse(args->trans, bp); xfs_trans_brelse(args->trans, bp);
return retval; return retval;
...@@ -626,7 +626,7 @@ xfs_attr_leaf_addname(xfs_da_args_t *args) ...@@ -626,7 +626,7 @@ xfs_attr_leaf_addname(xfs_da_args_t *args)
* if required. * if required.
*/ */
retval = xfs_attr3_leaf_add(bp, args); retval = xfs_attr3_leaf_add(bp, args);
if (retval == ENOSPC) { if (retval == -ENOSPC) {
/* /*
* Promote the attribute list to the Btree format, then * Promote the attribute list to the Btree format, then
* Commit that transaction so that the node_addname() call * Commit that transaction so that the node_addname() call
...@@ -642,7 +642,7 @@ xfs_attr_leaf_addname(xfs_da_args_t *args) ...@@ -642,7 +642,7 @@ xfs_attr_leaf_addname(xfs_da_args_t *args)
ASSERT(committed); ASSERT(committed);
args->trans = NULL; args->trans = NULL;
xfs_bmap_cancel(args->flist); xfs_bmap_cancel(args->flist);
return(error); return error;
} }
/* /*
...@@ -658,13 +658,13 @@ xfs_attr_leaf_addname(xfs_da_args_t *args) ...@@ -658,13 +658,13 @@ xfs_attr_leaf_addname(xfs_da_args_t *args)
*/ */
error = xfs_trans_roll(&args->trans, dp); error = xfs_trans_roll(&args->trans, dp);
if (error) if (error)
return (error); return error;
/* /*
* Fob the whole rest of the problem off on the Btree code. * Fob the whole rest of the problem off on the Btree code.
*/ */
error = xfs_attr_node_addname(args); error = xfs_attr_node_addname(args);
return(error); return error;
} }
/* /*
...@@ -673,7 +673,7 @@ xfs_attr_leaf_addname(xfs_da_args_t *args) ...@@ -673,7 +673,7 @@ xfs_attr_leaf_addname(xfs_da_args_t *args)
*/ */
error = xfs_trans_roll(&args->trans, dp); error = xfs_trans_roll(&args->trans, dp);
if (error) if (error)
return (error); return error;
/* /*
* If there was an out-of-line value, allocate the blocks we * If there was an out-of-line value, allocate the blocks we
...@@ -684,7 +684,7 @@ xfs_attr_leaf_addname(xfs_da_args_t *args) ...@@ -684,7 +684,7 @@ xfs_attr_leaf_addname(xfs_da_args_t *args)
if (args->rmtblkno > 0) { if (args->rmtblkno > 0) {
error = xfs_attr_rmtval_set(args); error = xfs_attr_rmtval_set(args);
if (error) if (error)
return(error); return error;
} }
/* /*
...@@ -700,7 +700,7 @@ xfs_attr_leaf_addname(xfs_da_args_t *args) ...@@ -700,7 +700,7 @@ xfs_attr_leaf_addname(xfs_da_args_t *args)
*/ */
error = xfs_attr3_leaf_flipflags(args); error = xfs_attr3_leaf_flipflags(args);
if (error) if (error)
return(error); return error;
/* /*
* Dismantle the "old" attribute/value pair by removing * Dismantle the "old" attribute/value pair by removing
...@@ -714,7 +714,7 @@ xfs_attr_leaf_addname(xfs_da_args_t *args) ...@@ -714,7 +714,7 @@ xfs_attr_leaf_addname(xfs_da_args_t *args)
if (args->rmtblkno) { if (args->rmtblkno) {
error = xfs_attr_rmtval_remove(args); error = xfs_attr_rmtval_remove(args);
if (error) if (error)
return(error); return error;
} }
/* /*
...@@ -744,7 +744,7 @@ xfs_attr_leaf_addname(xfs_da_args_t *args) ...@@ -744,7 +744,7 @@ xfs_attr_leaf_addname(xfs_da_args_t *args)
ASSERT(committed); ASSERT(committed);
args->trans = NULL; args->trans = NULL;
xfs_bmap_cancel(args->flist); xfs_bmap_cancel(args->flist);
return(error); return error;
} }
/* /*
...@@ -795,7 +795,7 @@ xfs_attr_leaf_removename(xfs_da_args_t *args) ...@@ -795,7 +795,7 @@ xfs_attr_leaf_removename(xfs_da_args_t *args)
return error; return error;
error = xfs_attr3_leaf_lookup_int(bp, args); error = xfs_attr3_leaf_lookup_int(bp, args);
if (error == ENOATTR) { if (error == -ENOATTR) {
xfs_trans_brelse(args->trans, bp); xfs_trans_brelse(args->trans, bp);
return error; return error;
} }
...@@ -850,7 +850,7 @@ xfs_attr_leaf_get(xfs_da_args_t *args) ...@@ -850,7 +850,7 @@ xfs_attr_leaf_get(xfs_da_args_t *args)
return error; return error;
error = xfs_attr3_leaf_lookup_int(bp, args); error = xfs_attr3_leaf_lookup_int(bp, args);
if (error != EEXIST) { if (error != -EEXIST) {
xfs_trans_brelse(args->trans, bp); xfs_trans_brelse(args->trans, bp);
return error; return error;
} }
...@@ -906,9 +906,9 @@ xfs_attr_node_addname(xfs_da_args_t *args) ...@@ -906,9 +906,9 @@ xfs_attr_node_addname(xfs_da_args_t *args)
goto out; goto out;
blk = &state->path.blk[ state->path.active-1 ]; blk = &state->path.blk[ state->path.active-1 ];
ASSERT(blk->magic == XFS_ATTR_LEAF_MAGIC); ASSERT(blk->magic == XFS_ATTR_LEAF_MAGIC);
if ((args->flags & ATTR_REPLACE) && (retval == ENOATTR)) { if ((args->flags & ATTR_REPLACE) && (retval == -ENOATTR)) {
goto out; goto out;
} else if (retval == EEXIST) { } else if (retval == -EEXIST) {
if (args->flags & ATTR_CREATE) if (args->flags & ATTR_CREATE)
goto out; goto out;
...@@ -933,7 +933,7 @@ xfs_attr_node_addname(xfs_da_args_t *args) ...@@ -933,7 +933,7 @@ xfs_attr_node_addname(xfs_da_args_t *args)
} }
retval = xfs_attr3_leaf_add(blk->bp, state->args); retval = xfs_attr3_leaf_add(blk->bp, state->args);
if (retval == ENOSPC) { if (retval == -ENOSPC) {
if (state->path.active == 1) { if (state->path.active == 1) {
/* /*
* Its really a single leaf node, but it had * Its really a single leaf node, but it had
...@@ -1031,7 +1031,7 @@ xfs_attr_node_addname(xfs_da_args_t *args) ...@@ -1031,7 +1031,7 @@ xfs_attr_node_addname(xfs_da_args_t *args)
if (args->rmtblkno > 0) { if (args->rmtblkno > 0) {
error = xfs_attr_rmtval_set(args); error = xfs_attr_rmtval_set(args);
if (error) if (error)
return(error); return error;
} }
/* /*
...@@ -1061,7 +1061,7 @@ xfs_attr_node_addname(xfs_da_args_t *args) ...@@ -1061,7 +1061,7 @@ xfs_attr_node_addname(xfs_da_args_t *args)
if (args->rmtblkno) { if (args->rmtblkno) {
error = xfs_attr_rmtval_remove(args); error = xfs_attr_rmtval_remove(args);
if (error) if (error)
return(error); return error;
} }
/* /*
...@@ -1134,8 +1134,8 @@ xfs_attr_node_addname(xfs_da_args_t *args) ...@@ -1134,8 +1134,8 @@ xfs_attr_node_addname(xfs_da_args_t *args)
if (state) if (state)
xfs_da_state_free(state); xfs_da_state_free(state);
if (error) if (error)
return(error); return error;
return(retval); return retval;
} }
/* /*
...@@ -1168,7 +1168,7 @@ xfs_attr_node_removename(xfs_da_args_t *args) ...@@ -1168,7 +1168,7 @@ xfs_attr_node_removename(xfs_da_args_t *args)
* Search to see if name exists, and get back a pointer to it. * Search to see if name exists, and get back a pointer to it.
*/ */
error = xfs_da3_node_lookup_int(state, &retval); error = xfs_da3_node_lookup_int(state, &retval);
if (error || (retval != EEXIST)) { if (error || (retval != -EEXIST)) {
if (error == 0) if (error == 0)
error = retval; error = retval;
goto out; goto out;
...@@ -1297,7 +1297,7 @@ xfs_attr_node_removename(xfs_da_args_t *args) ...@@ -1297,7 +1297,7 @@ xfs_attr_node_removename(xfs_da_args_t *args)
out: out:
xfs_da_state_free(state); xfs_da_state_free(state);
return(error); return error;
} }
/* /*
...@@ -1345,7 +1345,7 @@ xfs_attr_fillstate(xfs_da_state_t *state) ...@@ -1345,7 +1345,7 @@ xfs_attr_fillstate(xfs_da_state_t *state)
} }
} }
return(0); return 0;
} }
/* /*
...@@ -1376,7 +1376,7 @@ xfs_attr_refillstate(xfs_da_state_t *state) ...@@ -1376,7 +1376,7 @@ xfs_attr_refillstate(xfs_da_state_t *state)
blk->blkno, blk->disk_blkno, blk->blkno, blk->disk_blkno,
&blk->bp, XFS_ATTR_FORK); &blk->bp, XFS_ATTR_FORK);
if (error) if (error)
return(error); return error;
} else { } else {
blk->bp = NULL; blk->bp = NULL;
} }
...@@ -1395,13 +1395,13 @@ xfs_attr_refillstate(xfs_da_state_t *state) ...@@ -1395,13 +1395,13 @@ xfs_attr_refillstate(xfs_da_state_t *state)
blk->blkno, blk->disk_blkno, blk->blkno, blk->disk_blkno,
&blk->bp, XFS_ATTR_FORK); &blk->bp, XFS_ATTR_FORK);
if (error) if (error)
return(error); return error;
} else { } else {
blk->bp = NULL; blk->bp = NULL;
} }
} }
return(0); return 0;
} }
/* /*
...@@ -1431,7 +1431,7 @@ xfs_attr_node_get(xfs_da_args_t *args) ...@@ -1431,7 +1431,7 @@ xfs_attr_node_get(xfs_da_args_t *args)
error = xfs_da3_node_lookup_int(state, &retval); error = xfs_da3_node_lookup_int(state, &retval);
if (error) { if (error) {
retval = error; retval = error;
} else if (retval == EEXIST) { } else if (retval == -EEXIST) {
blk = &state->path.blk[ state->path.active-1 ]; blk = &state->path.blk[ state->path.active-1 ];
ASSERT(blk->bp != NULL); ASSERT(blk->bp != NULL);
ASSERT(blk->magic == XFS_ATTR_LEAF_MAGIC); ASSERT(blk->magic == XFS_ATTR_LEAF_MAGIC);
...@@ -1455,5 +1455,5 @@ xfs_attr_node_get(xfs_da_args_t *args) ...@@ -1455,5 +1455,5 @@ xfs_attr_node_get(xfs_da_args_t *args)
} }
xfs_da_state_free(state); xfs_da_state_free(state);
return(retval); return retval;
} }
...@@ -214,7 +214,7 @@ xfs_attr3_leaf_write_verify( ...@@ -214,7 +214,7 @@ xfs_attr3_leaf_write_verify(
struct xfs_attr3_leaf_hdr *hdr3 = bp->b_addr; struct xfs_attr3_leaf_hdr *hdr3 = bp->b_addr;
if (!xfs_attr3_leaf_verify(bp)) { if (!xfs_attr3_leaf_verify(bp)) {
xfs_buf_ioerror(bp, EFSCORRUPTED); xfs_buf_ioerror(bp, -EFSCORRUPTED);
xfs_verifier_error(bp); xfs_verifier_error(bp);
return; return;
} }
...@@ -242,9 +242,9 @@ xfs_attr3_leaf_read_verify( ...@@ -242,9 +242,9 @@ xfs_attr3_leaf_read_verify(
if (xfs_sb_version_hascrc(&mp->m_sb) && if (xfs_sb_version_hascrc(&mp->m_sb) &&
!xfs_buf_verify_cksum(bp, XFS_ATTR3_LEAF_CRC_OFF)) !xfs_buf_verify_cksum(bp, XFS_ATTR3_LEAF_CRC_OFF))
xfs_buf_ioerror(bp, EFSBADCRC); xfs_buf_ioerror(bp, -EFSBADCRC);
else if (!xfs_attr3_leaf_verify(bp)) else if (!xfs_attr3_leaf_verify(bp))
xfs_buf_ioerror(bp, EFSCORRUPTED); xfs_buf_ioerror(bp, -EFSCORRUPTED);
if (bp->b_error) if (bp->b_error)
xfs_verifier_error(bp); xfs_verifier_error(bp);
...@@ -547,7 +547,7 @@ xfs_attr_shortform_remove(xfs_da_args_t *args) ...@@ -547,7 +547,7 @@ xfs_attr_shortform_remove(xfs_da_args_t *args)
break; break;
} }
if (i == end) if (i == end)
return(XFS_ERROR(ENOATTR)); return -ENOATTR;
/* /*
* Fix up the attribute fork data, covering the hole * Fix up the attribute fork data, covering the hole
...@@ -582,7 +582,7 @@ xfs_attr_shortform_remove(xfs_da_args_t *args) ...@@ -582,7 +582,7 @@ xfs_attr_shortform_remove(xfs_da_args_t *args)
xfs_sbversion_add_attr2(mp, args->trans); xfs_sbversion_add_attr2(mp, args->trans);
return(0); return 0;
} }
/* /*
...@@ -611,9 +611,9 @@ xfs_attr_shortform_lookup(xfs_da_args_t *args) ...@@ -611,9 +611,9 @@ xfs_attr_shortform_lookup(xfs_da_args_t *args)
continue; continue;
if (!xfs_attr_namesp_match(args->flags, sfe->flags)) if (!xfs_attr_namesp_match(args->flags, sfe->flags))
continue; continue;
return(XFS_ERROR(EEXIST)); return -EEXIST;
} }
return(XFS_ERROR(ENOATTR)); return -ENOATTR;
} }
/* /*
...@@ -640,18 +640,18 @@ xfs_attr_shortform_getvalue(xfs_da_args_t *args) ...@@ -640,18 +640,18 @@ xfs_attr_shortform_getvalue(xfs_da_args_t *args)
continue; continue;
if (args->flags & ATTR_KERNOVAL) { if (args->flags & ATTR_KERNOVAL) {
args->valuelen = sfe->valuelen; args->valuelen = sfe->valuelen;
return(XFS_ERROR(EEXIST)); return -EEXIST;
} }
if (args->valuelen < sfe->valuelen) { if (args->valuelen < sfe->valuelen) {
args->valuelen = sfe->valuelen; args->valuelen = sfe->valuelen;
return(XFS_ERROR(ERANGE)); return -ERANGE;
} }
args->valuelen = sfe->valuelen; args->valuelen = sfe->valuelen;
memcpy(args->value, &sfe->nameval[args->namelen], memcpy(args->value, &sfe->nameval[args->namelen],
args->valuelen); args->valuelen);
return(XFS_ERROR(EEXIST)); return -EEXIST;
} }
return(XFS_ERROR(ENOATTR)); return -ENOATTR;
} }
/* /*
...@@ -691,7 +691,7 @@ xfs_attr_shortform_to_leaf(xfs_da_args_t *args) ...@@ -691,7 +691,7 @@ xfs_attr_shortform_to_leaf(xfs_da_args_t *args)
* If we hit an IO error middle of the transaction inside * If we hit an IO error middle of the transaction inside
* grow_inode(), we may have inconsistent data. Bail out. * grow_inode(), we may have inconsistent data. Bail out.
*/ */
if (error == EIO) if (error == -EIO)
goto out; goto out;
xfs_idata_realloc(dp, size, XFS_ATTR_FORK); /* try to put */ xfs_idata_realloc(dp, size, XFS_ATTR_FORK); /* try to put */
memcpy(ifp->if_u1.if_data, tmpbuffer, size); /* it back */ memcpy(ifp->if_u1.if_data, tmpbuffer, size); /* it back */
...@@ -730,9 +730,9 @@ xfs_attr_shortform_to_leaf(xfs_da_args_t *args) ...@@ -730,9 +730,9 @@ xfs_attr_shortform_to_leaf(xfs_da_args_t *args)
sfe->namelen); sfe->namelen);
nargs.flags = XFS_ATTR_NSP_ONDISK_TO_ARGS(sfe->flags); nargs.flags = XFS_ATTR_NSP_ONDISK_TO_ARGS(sfe->flags);
error = xfs_attr3_leaf_lookup_int(bp, &nargs); /* set a->index */ error = xfs_attr3_leaf_lookup_int(bp, &nargs); /* set a->index */
ASSERT(error == ENOATTR); ASSERT(error == -ENOATTR);
error = xfs_attr3_leaf_add(bp, &nargs); error = xfs_attr3_leaf_add(bp, &nargs);
ASSERT(error != ENOSPC); ASSERT(error != -ENOSPC);
if (error) if (error)
goto out; goto out;
sfe = XFS_ATTR_SF_NEXTENTRY(sfe); sfe = XFS_ATTR_SF_NEXTENTRY(sfe);
...@@ -741,7 +741,7 @@ xfs_attr_shortform_to_leaf(xfs_da_args_t *args) ...@@ -741,7 +741,7 @@ xfs_attr_shortform_to_leaf(xfs_da_args_t *args)
out: out:
kmem_free(tmpbuffer); kmem_free(tmpbuffer);
return(error); return error;
} }
/* /*
...@@ -769,12 +769,12 @@ xfs_attr_shortform_allfit( ...@@ -769,12 +769,12 @@ xfs_attr_shortform_allfit(
if (entry->flags & XFS_ATTR_INCOMPLETE) if (entry->flags & XFS_ATTR_INCOMPLETE)
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_attr3_leaf_name_local(leaf, i); name_loc = xfs_attr3_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)
return(0); return 0;
bytes += sizeof(struct xfs_attr_sf_entry) - 1 bytes += sizeof(struct xfs_attr_sf_entry) - 1
+ name_loc->namelen + name_loc->namelen
+ be16_to_cpu(name_loc->valuelen); + be16_to_cpu(name_loc->valuelen);
...@@ -809,7 +809,7 @@ xfs_attr3_leaf_to_shortform( ...@@ -809,7 +809,7 @@ xfs_attr3_leaf_to_shortform(
tmpbuffer = kmem_alloc(args->geo->blksize, KM_SLEEP); tmpbuffer = kmem_alloc(args->geo->blksize, KM_SLEEP);
if (!tmpbuffer) if (!tmpbuffer)
return ENOMEM; return -ENOMEM;
memcpy(tmpbuffer, bp->b_addr, args->geo->blksize); memcpy(tmpbuffer, bp->b_addr, args->geo->blksize);
...@@ -1017,10 +1017,10 @@ xfs_attr3_leaf_split( ...@@ -1017,10 +1017,10 @@ xfs_attr3_leaf_split(
ASSERT(oldblk->magic == XFS_ATTR_LEAF_MAGIC); ASSERT(oldblk->magic == XFS_ATTR_LEAF_MAGIC);
error = xfs_da_grow_inode(state->args, &blkno); error = xfs_da_grow_inode(state->args, &blkno);
if (error) if (error)
return(error); return error;
error = xfs_attr3_leaf_create(state->args, blkno, &newblk->bp); error = xfs_attr3_leaf_create(state->args, blkno, &newblk->bp);
if (error) if (error)
return(error); return error;
newblk->blkno = blkno; newblk->blkno = blkno;
newblk->magic = XFS_ATTR_LEAF_MAGIC; newblk->magic = XFS_ATTR_LEAF_MAGIC;
...@@ -1031,7 +1031,7 @@ xfs_attr3_leaf_split( ...@@ -1031,7 +1031,7 @@ xfs_attr3_leaf_split(
xfs_attr3_leaf_rebalance(state, oldblk, newblk); xfs_attr3_leaf_rebalance(state, oldblk, newblk);
error = xfs_da3_blk_link(state, oldblk, newblk); error = xfs_da3_blk_link(state, oldblk, newblk);
if (error) if (error)
return(error); return error;
/* /*
* Save info on "old" attribute for "atomic rename" ops, leaf_add() * Save info on "old" attribute for "atomic rename" ops, leaf_add()
...@@ -1053,7 +1053,7 @@ xfs_attr3_leaf_split( ...@@ -1053,7 +1053,7 @@ xfs_attr3_leaf_split(
*/ */
oldblk->hashval = xfs_attr_leaf_lasthash(oldblk->bp, NULL); oldblk->hashval = xfs_attr_leaf_lasthash(oldblk->bp, NULL);
newblk->hashval = xfs_attr_leaf_lasthash(newblk->bp, NULL); newblk->hashval = xfs_attr_leaf_lasthash(newblk->bp, NULL);
return(error); return error;
} }
/* /*
...@@ -1108,7 +1108,7 @@ xfs_attr3_leaf_add( ...@@ -1108,7 +1108,7 @@ xfs_attr3_leaf_add(
* no good and we should just give up. * no good and we should just give up.
*/ */
if (!ichdr.holes && sum < entsize) if (!ichdr.holes && sum < entsize)
return XFS_ERROR(ENOSPC); return -ENOSPC;
/* /*
* Compact the entries to coalesce free space. * Compact the entries to coalesce free space.
...@@ -1121,7 +1121,7 @@ xfs_attr3_leaf_add( ...@@ -1121,7 +1121,7 @@ xfs_attr3_leaf_add(
* free region, in freemap[0]. If it is not big enough, give up. * free region, in freemap[0]. If it is not big enough, give up.
*/ */
if (ichdr.freemap[0].size < (entsize + sizeof(xfs_attr_leaf_entry_t))) { if (ichdr.freemap[0].size < (entsize + sizeof(xfs_attr_leaf_entry_t))) {
tmp = ENOSPC; tmp = -ENOSPC;
goto out_log_hdr; goto out_log_hdr;
} }
...@@ -1692,7 +1692,7 @@ xfs_attr3_leaf_toosmall( ...@@ -1692,7 +1692,7 @@ xfs_attr3_leaf_toosmall(
ichdr.usedbytes; ichdr.usedbytes;
if (bytes > (state->args->geo->blksize >> 1)) { if (bytes > (state->args->geo->blksize >> 1)) {
*action = 0; /* blk over 50%, don't try to join */ *action = 0; /* blk over 50%, don't try to join */
return(0); return 0;
} }
/* /*
...@@ -1711,7 +1711,7 @@ xfs_attr3_leaf_toosmall( ...@@ -1711,7 +1711,7 @@ xfs_attr3_leaf_toosmall(
error = xfs_da3_path_shift(state, &state->altpath, forward, error = xfs_da3_path_shift(state, &state->altpath, forward,
0, &retval); 0, &retval);
if (error) if (error)
return(error); return error;
if (retval) { if (retval) {
*action = 0; *action = 0;
} else { } else {
...@@ -1740,7 +1740,7 @@ xfs_attr3_leaf_toosmall( ...@@ -1740,7 +1740,7 @@ xfs_attr3_leaf_toosmall(
error = xfs_attr3_leaf_read(state->args->trans, state->args->dp, error = xfs_attr3_leaf_read(state->args->trans, state->args->dp,
blkno, -1, &bp); blkno, -1, &bp);
if (error) if (error)
return(error); return error;
xfs_attr3_leaf_hdr_from_disk(&ichdr2, bp->b_addr); xfs_attr3_leaf_hdr_from_disk(&ichdr2, bp->b_addr);
...@@ -1757,7 +1757,7 @@ xfs_attr3_leaf_toosmall( ...@@ -1757,7 +1757,7 @@ xfs_attr3_leaf_toosmall(
} }
if (i >= 2) { if (i >= 2) {
*action = 0; *action = 0;
return(0); return 0;
} }
/* /*
...@@ -1773,13 +1773,13 @@ xfs_attr3_leaf_toosmall( ...@@ -1773,13 +1773,13 @@ xfs_attr3_leaf_toosmall(
0, &retval); 0, &retval);
} }
if (error) if (error)
return(error); return error;
if (retval) { if (retval) {
*action = 0; *action = 0;
} else { } else {
*action = 1; *action = 1;
} }
return(0); return 0;
} }
/* /*
...@@ -2123,7 +2123,7 @@ xfs_attr3_leaf_lookup_int( ...@@ -2123,7 +2123,7 @@ xfs_attr3_leaf_lookup_int(
} }
if (probe == ichdr.count || be32_to_cpu(entry->hashval) != hashval) { if (probe == ichdr.count || be32_to_cpu(entry->hashval) != hashval) {
args->index = probe; args->index = probe;
return XFS_ERROR(ENOATTR); return -ENOATTR;
} }
/* /*
...@@ -2152,7 +2152,7 @@ xfs_attr3_leaf_lookup_int( ...@@ -2152,7 +2152,7 @@ xfs_attr3_leaf_lookup_int(
if (!xfs_attr_namesp_match(args->flags, entry->flags)) if (!xfs_attr_namesp_match(args->flags, entry->flags))
continue; continue;
args->index = probe; args->index = probe;
return XFS_ERROR(EEXIST); return -EEXIST;
} else { } else {
name_rmt = xfs_attr3_leaf_name_remote(leaf, probe); name_rmt = xfs_attr3_leaf_name_remote(leaf, probe);
if (name_rmt->namelen != args->namelen) if (name_rmt->namelen != args->namelen)
...@@ -2168,11 +2168,11 @@ xfs_attr3_leaf_lookup_int( ...@@ -2168,11 +2168,11 @@ xfs_attr3_leaf_lookup_int(
args->rmtblkcnt = xfs_attr3_rmt_blocks( args->rmtblkcnt = xfs_attr3_rmt_blocks(
args->dp->i_mount, args->dp->i_mount,
args->rmtvaluelen); args->rmtvaluelen);
return XFS_ERROR(EEXIST); return -EEXIST;
} }
} }
args->index = probe; args->index = probe;
return XFS_ERROR(ENOATTR); return -ENOATTR;
} }
/* /*
...@@ -2208,7 +2208,7 @@ xfs_attr3_leaf_getvalue( ...@@ -2208,7 +2208,7 @@ xfs_attr3_leaf_getvalue(
} }
if (args->valuelen < valuelen) { if (args->valuelen < valuelen) {
args->valuelen = valuelen; args->valuelen = valuelen;
return XFS_ERROR(ERANGE); return -ERANGE;
} }
args->valuelen = valuelen; args->valuelen = valuelen;
memcpy(args->value, &name_loc->nameval[args->namelen], valuelen); memcpy(args->value, &name_loc->nameval[args->namelen], valuelen);
...@@ -2226,7 +2226,7 @@ xfs_attr3_leaf_getvalue( ...@@ -2226,7 +2226,7 @@ xfs_attr3_leaf_getvalue(
} }
if (args->valuelen < args->rmtvaluelen) { if (args->valuelen < args->rmtvaluelen) {
args->valuelen = args->rmtvaluelen; args->valuelen = args->rmtvaluelen;
return XFS_ERROR(ERANGE); return -ERANGE;
} }
args->valuelen = args->rmtvaluelen; args->valuelen = args->rmtvaluelen;
} }
...@@ -2481,7 +2481,7 @@ xfs_attr3_leaf_clearflag( ...@@ -2481,7 +2481,7 @@ xfs_attr3_leaf_clearflag(
*/ */
error = xfs_attr3_leaf_read(args->trans, args->dp, args->blkno, -1, &bp); error = xfs_attr3_leaf_read(args->trans, args->dp, args->blkno, -1, &bp);
if (error) if (error)
return(error); return error;
leaf = bp->b_addr; leaf = bp->b_addr;
entry = &xfs_attr3_leaf_entryp(leaf)[args->index]; entry = &xfs_attr3_leaf_entryp(leaf)[args->index];
...@@ -2548,7 +2548,7 @@ xfs_attr3_leaf_setflag( ...@@ -2548,7 +2548,7 @@ xfs_attr3_leaf_setflag(
*/ */
error = xfs_attr3_leaf_read(args->trans, args->dp, args->blkno, -1, &bp); error = xfs_attr3_leaf_read(args->trans, args->dp, args->blkno, -1, &bp);
if (error) if (error)
return(error); return error;
leaf = bp->b_addr; leaf = bp->b_addr;
#ifdef DEBUG #ifdef DEBUG
......
...@@ -138,11 +138,11 @@ xfs_attr3_rmt_read_verify( ...@@ -138,11 +138,11 @@ xfs_attr3_rmt_read_verify(
while (len > 0) { while (len > 0) {
if (!xfs_verify_cksum(ptr, blksize, XFS_ATTR3_RMT_CRC_OFF)) { if (!xfs_verify_cksum(ptr, blksize, XFS_ATTR3_RMT_CRC_OFF)) {
xfs_buf_ioerror(bp, EFSBADCRC); xfs_buf_ioerror(bp, -EFSBADCRC);
break; break;
} }
if (!xfs_attr3_rmt_verify(mp, ptr, blksize, bno)) { if (!xfs_attr3_rmt_verify(mp, ptr, blksize, bno)) {
xfs_buf_ioerror(bp, EFSCORRUPTED); xfs_buf_ioerror(bp, -EFSCORRUPTED);
break; break;
} }
len -= blksize; len -= blksize;
...@@ -178,7 +178,7 @@ xfs_attr3_rmt_write_verify( ...@@ -178,7 +178,7 @@ xfs_attr3_rmt_write_verify(
while (len > 0) { while (len > 0) {
if (!xfs_attr3_rmt_verify(mp, ptr, blksize, bno)) { if (!xfs_attr3_rmt_verify(mp, ptr, blksize, bno)) {
xfs_buf_ioerror(bp, EFSCORRUPTED); xfs_buf_ioerror(bp, -EFSCORRUPTED);
xfs_verifier_error(bp); xfs_verifier_error(bp);
return; return;
} }
...@@ -257,7 +257,7 @@ xfs_attr_rmtval_copyout( ...@@ -257,7 +257,7 @@ xfs_attr_rmtval_copyout(
xfs_alert(mp, xfs_alert(mp,
"remote attribute header mismatch bno/off/len/owner (0x%llx/0x%x/Ox%x/0x%llx)", "remote attribute header mismatch bno/off/len/owner (0x%llx/0x%x/Ox%x/0x%llx)",
bno, *offset, byte_cnt, ino); bno, *offset, byte_cnt, ino);
return EFSCORRUPTED; return -EFSCORRUPTED;
} }
hdr_size = sizeof(struct xfs_attr3_rmt_hdr); hdr_size = sizeof(struct xfs_attr3_rmt_hdr);
} }
...@@ -452,7 +452,7 @@ xfs_attr_rmtval_set( ...@@ -452,7 +452,7 @@ xfs_attr_rmtval_set(
ASSERT(committed); ASSERT(committed);
args->trans = NULL; args->trans = NULL;
xfs_bmap_cancel(args->flist); xfs_bmap_cancel(args->flist);
return(error); return error;
} }
/* /*
...@@ -473,7 +473,7 @@ xfs_attr_rmtval_set( ...@@ -473,7 +473,7 @@ xfs_attr_rmtval_set(
*/ */
error = xfs_trans_roll(&args->trans, dp); error = xfs_trans_roll(&args->trans, dp);
if (error) if (error)
return (error); return error;
} }
/* /*
...@@ -498,7 +498,7 @@ xfs_attr_rmtval_set( ...@@ -498,7 +498,7 @@ xfs_attr_rmtval_set(
blkcnt, &map, &nmap, blkcnt, &map, &nmap,
XFS_BMAPI_ATTRFORK); XFS_BMAPI_ATTRFORK);
if (error) if (error)
return(error); return error;
ASSERT(nmap == 1); ASSERT(nmap == 1);
ASSERT((map.br_startblock != DELAYSTARTBLOCK) && ASSERT((map.br_startblock != DELAYSTARTBLOCK) &&
(map.br_startblock != HOLESTARTBLOCK)); (map.br_startblock != HOLESTARTBLOCK));
...@@ -508,7 +508,7 @@ xfs_attr_rmtval_set( ...@@ -508,7 +508,7 @@ xfs_attr_rmtval_set(
bp = xfs_buf_get(mp->m_ddev_targp, dblkno, dblkcnt, 0); bp = xfs_buf_get(mp->m_ddev_targp, dblkno, dblkcnt, 0);
if (!bp) if (!bp)
return ENOMEM; return -ENOMEM;
bp->b_ops = &xfs_attr3_rmt_buf_ops; bp->b_ops = &xfs_attr3_rmt_buf_ops;
xfs_attr_rmtval_copyin(mp, bp, args->dp->i_ino, &offset, xfs_attr_rmtval_copyin(mp, bp, args->dp->i_ino, &offset,
...@@ -563,7 +563,7 @@ xfs_attr_rmtval_remove( ...@@ -563,7 +563,7 @@ xfs_attr_rmtval_remove(
error = xfs_bmapi_read(args->dp, (xfs_fileoff_t)lblkno, error = xfs_bmapi_read(args->dp, (xfs_fileoff_t)lblkno,
blkcnt, &map, &nmap, XFS_BMAPI_ATTRFORK); blkcnt, &map, &nmap, XFS_BMAPI_ATTRFORK);
if (error) if (error)
return(error); return error;
ASSERT(nmap == 1); ASSERT(nmap == 1);
ASSERT((map.br_startblock != DELAYSTARTBLOCK) && ASSERT((map.br_startblock != DELAYSTARTBLOCK) &&
(map.br_startblock != HOLESTARTBLOCK)); (map.br_startblock != HOLESTARTBLOCK));
...@@ -622,7 +622,7 @@ xfs_attr_rmtval_remove( ...@@ -622,7 +622,7 @@ xfs_attr_rmtval_remove(
*/ */
error = xfs_trans_roll(&args->trans, args->dp); error = xfs_trans_roll(&args->trans, args->dp);
if (error) if (error)
return (error); return error;
} }
return(0); return 0;
} }
...@@ -392,7 +392,7 @@ xfs_bmap_check_leaf_extents( ...@@ -392,7 +392,7 @@ xfs_bmap_check_leaf_extents(
pp = XFS_BMAP_BROOT_PTR_ADDR(mp, block, 1, ifp->if_broot_bytes); pp = XFS_BMAP_BROOT_PTR_ADDR(mp, block, 1, ifp->if_broot_bytes);
bno = be64_to_cpu(*pp); bno = be64_to_cpu(*pp);
ASSERT(bno != NULLDFSBNO); ASSERT(bno != NULLFSBLOCK);
ASSERT(XFS_FSB_TO_AGNO(mp, bno) < mp->m_sb.sb_agcount); ASSERT(XFS_FSB_TO_AGNO(mp, bno) < mp->m_sb.sb_agcount);
ASSERT(XFS_FSB_TO_AGBNO(mp, bno) < mp->m_sb.sb_agblocks); ASSERT(XFS_FSB_TO_AGBNO(mp, bno) < mp->m_sb.sb_agblocks);
...@@ -1033,7 +1033,7 @@ xfs_bmap_add_attrfork_btree( ...@@ -1033,7 +1033,7 @@ xfs_bmap_add_attrfork_btree(
goto error0; goto error0;
if (stat == 0) { if (stat == 0) {
xfs_btree_del_cursor(cur, XFS_BTREE_NOERROR); xfs_btree_del_cursor(cur, XFS_BTREE_NOERROR);
return XFS_ERROR(ENOSPC); return -ENOSPC;
} }
*firstblock = cur->bc_private.b.firstblock; *firstblock = cur->bc_private.b.firstblock;
cur->bc_private.b.allocated = 0; cur->bc_private.b.allocated = 0;
...@@ -1115,7 +1115,7 @@ xfs_bmap_add_attrfork_local( ...@@ -1115,7 +1115,7 @@ xfs_bmap_add_attrfork_local(
/* should only be called for types that support local format data */ /* should only be called for types that support local format data */
ASSERT(0); ASSERT(0);
return EFSCORRUPTED; return -EFSCORRUPTED;
} }
/* /*
...@@ -1192,7 +1192,7 @@ xfs_bmap_add_attrfork( ...@@ -1192,7 +1192,7 @@ xfs_bmap_add_attrfork(
break; break;
default: default:
ASSERT(0); ASSERT(0);
error = XFS_ERROR(EINVAL); error = -EINVAL;
goto trans_cancel; goto trans_cancel;
} }
...@@ -1299,7 +1299,7 @@ xfs_bmap_read_extents( ...@@ -1299,7 +1299,7 @@ xfs_bmap_read_extents(
ASSERT(level > 0); ASSERT(level > 0);
pp = XFS_BMAP_BROOT_PTR_ADDR(mp, block, 1, ifp->if_broot_bytes); pp = XFS_BMAP_BROOT_PTR_ADDR(mp, block, 1, ifp->if_broot_bytes);
bno = be64_to_cpu(*pp); bno = be64_to_cpu(*pp);
ASSERT(bno != NULLDFSBNO); ASSERT(bno != NULLFSBLOCK);
ASSERT(XFS_FSB_TO_AGNO(mp, bno) < mp->m_sb.sb_agcount); ASSERT(XFS_FSB_TO_AGNO(mp, bno) < mp->m_sb.sb_agcount);
ASSERT(XFS_FSB_TO_AGBNO(mp, bno) < mp->m_sb.sb_agblocks); ASSERT(XFS_FSB_TO_AGBNO(mp, bno) < mp->m_sb.sb_agblocks);
/* /*
...@@ -1399,7 +1399,7 @@ xfs_bmap_read_extents( ...@@ -1399,7 +1399,7 @@ xfs_bmap_read_extents(
return 0; return 0;
error0: error0:
xfs_trans_brelse(tp, bp); xfs_trans_brelse(tp, bp);
return XFS_ERROR(EFSCORRUPTED); return -EFSCORRUPTED;
} }
...@@ -1429,11 +1429,7 @@ xfs_bmap_search_multi_extents( ...@@ -1429,11 +1429,7 @@ xfs_bmap_search_multi_extents(
gotp->br_startoff = 0xffa5a5a5a5a5a5a5LL; gotp->br_startoff = 0xffa5a5a5a5a5a5a5LL;
gotp->br_blockcount = 0xa55a5a5a5a5a5a5aLL; gotp->br_blockcount = 0xa55a5a5a5a5a5a5aLL;
gotp->br_state = XFS_EXT_INVALID; gotp->br_state = XFS_EXT_INVALID;
#if XFS_BIG_BLKNOS
gotp->br_startblock = 0xffffa5a5a5a5a5a5LL; gotp->br_startblock = 0xffffa5a5a5a5a5a5LL;
#else
gotp->br_startblock = 0xffffa5a5;
#endif
prevp->br_startoff = NULLFILEOFF; prevp->br_startoff = NULLFILEOFF;
ep = xfs_iext_bno_to_ext(ifp, bno, &lastx); ep = xfs_iext_bno_to_ext(ifp, bno, &lastx);
...@@ -1576,7 +1572,7 @@ xfs_bmap_last_before( ...@@ -1576,7 +1572,7 @@ xfs_bmap_last_before(
if (XFS_IFORK_FORMAT(ip, whichfork) != XFS_DINODE_FMT_BTREE && if (XFS_IFORK_FORMAT(ip, whichfork) != XFS_DINODE_FMT_BTREE &&
XFS_IFORK_FORMAT(ip, whichfork) != XFS_DINODE_FMT_EXTENTS && XFS_IFORK_FORMAT(ip, whichfork) != XFS_DINODE_FMT_EXTENTS &&
XFS_IFORK_FORMAT(ip, whichfork) != XFS_DINODE_FMT_LOCAL) XFS_IFORK_FORMAT(ip, whichfork) != XFS_DINODE_FMT_LOCAL)
return XFS_ERROR(EIO); return -EIO;
if (XFS_IFORK_FORMAT(ip, whichfork) == XFS_DINODE_FMT_LOCAL) { if (XFS_IFORK_FORMAT(ip, whichfork) == XFS_DINODE_FMT_LOCAL) {
*last_block = 0; *last_block = 0;
return 0; return 0;
...@@ -1690,7 +1686,7 @@ xfs_bmap_last_offset( ...@@ -1690,7 +1686,7 @@ xfs_bmap_last_offset(
if (XFS_IFORK_FORMAT(ip, whichfork) != XFS_DINODE_FMT_BTREE && if (XFS_IFORK_FORMAT(ip, whichfork) != XFS_DINODE_FMT_BTREE &&
XFS_IFORK_FORMAT(ip, whichfork) != XFS_DINODE_FMT_EXTENTS) XFS_IFORK_FORMAT(ip, whichfork) != XFS_DINODE_FMT_EXTENTS)
return XFS_ERROR(EIO); return -EIO;
error = xfs_bmap_last_extent(NULL, ip, whichfork, &rec, &is_empty); error = xfs_bmap_last_extent(NULL, ip, whichfork, &rec, &is_empty);
if (error || is_empty) if (error || is_empty)
...@@ -3323,7 +3319,7 @@ xfs_bmap_extsize_align( ...@@ -3323,7 +3319,7 @@ xfs_bmap_extsize_align(
if (orig_off < align_off || if (orig_off < align_off ||
orig_end > align_off + align_alen || orig_end > align_off + align_alen ||
align_alen - temp < orig_alen) align_alen - temp < orig_alen)
return XFS_ERROR(EINVAL); return -EINVAL;
/* /*
* Try to fix it by moving the start up. * Try to fix it by moving the start up.
*/ */
...@@ -3348,7 +3344,7 @@ xfs_bmap_extsize_align( ...@@ -3348,7 +3344,7 @@ xfs_bmap_extsize_align(
* Result doesn't cover the request, fail it. * Result doesn't cover the request, fail it.
*/ */
if (orig_off < align_off || orig_end > align_off + align_alen) if (orig_off < align_off || orig_end > align_off + align_alen)
return XFS_ERROR(EINVAL); return -EINVAL;
} else { } else {
ASSERT(orig_off >= align_off); ASSERT(orig_off >= align_off);
ASSERT(orig_end <= align_off + align_alen); ASSERT(orig_end <= align_off + align_alen);
...@@ -4051,11 +4047,11 @@ xfs_bmapi_read( ...@@ -4051,11 +4047,11 @@ xfs_bmapi_read(
XFS_IFORK_FORMAT(ip, whichfork) != XFS_DINODE_FMT_BTREE), XFS_IFORK_FORMAT(ip, whichfork) != XFS_DINODE_FMT_BTREE),
mp, XFS_ERRTAG_BMAPIFORMAT, XFS_RANDOM_BMAPIFORMAT))) { mp, XFS_ERRTAG_BMAPIFORMAT, XFS_RANDOM_BMAPIFORMAT))) {
XFS_ERROR_REPORT("xfs_bmapi_read", XFS_ERRLEVEL_LOW, mp); XFS_ERROR_REPORT("xfs_bmapi_read", XFS_ERRLEVEL_LOW, mp);
return XFS_ERROR(EFSCORRUPTED); return -EFSCORRUPTED;
} }
if (XFS_FORCED_SHUTDOWN(mp)) if (XFS_FORCED_SHUTDOWN(mp))
return XFS_ERROR(EIO); return -EIO;
XFS_STATS_INC(xs_blk_mapr); XFS_STATS_INC(xs_blk_mapr);
...@@ -4246,11 +4242,11 @@ xfs_bmapi_delay( ...@@ -4246,11 +4242,11 @@ xfs_bmapi_delay(
XFS_IFORK_FORMAT(ip, XFS_DATA_FORK) != XFS_DINODE_FMT_BTREE), XFS_IFORK_FORMAT(ip, XFS_DATA_FORK) != XFS_DINODE_FMT_BTREE),
mp, XFS_ERRTAG_BMAPIFORMAT, XFS_RANDOM_BMAPIFORMAT))) { mp, XFS_ERRTAG_BMAPIFORMAT, XFS_RANDOM_BMAPIFORMAT))) {
XFS_ERROR_REPORT("xfs_bmapi_delay", XFS_ERRLEVEL_LOW, mp); XFS_ERROR_REPORT("xfs_bmapi_delay", XFS_ERRLEVEL_LOW, mp);
return XFS_ERROR(EFSCORRUPTED); return -EFSCORRUPTED;
} }
if (XFS_FORCED_SHUTDOWN(mp)) if (XFS_FORCED_SHUTDOWN(mp))
return XFS_ERROR(EIO); return -EIO;
XFS_STATS_INC(xs_blk_mapw); XFS_STATS_INC(xs_blk_mapw);
...@@ -4469,7 +4465,7 @@ xfs_bmapi_convert_unwritten( ...@@ -4469,7 +4465,7 @@ xfs_bmapi_convert_unwritten(
* so generate another request. * so generate another request.
*/ */
if (mval->br_blockcount < len) if (mval->br_blockcount < len)
return EAGAIN; return -EAGAIN;
return 0; return 0;
} }
...@@ -4540,11 +4536,11 @@ xfs_bmapi_write( ...@@ -4540,11 +4536,11 @@ xfs_bmapi_write(
XFS_IFORK_FORMAT(ip, whichfork) != XFS_DINODE_FMT_BTREE), XFS_IFORK_FORMAT(ip, whichfork) != XFS_DINODE_FMT_BTREE),
mp, XFS_ERRTAG_BMAPIFORMAT, XFS_RANDOM_BMAPIFORMAT))) { mp, XFS_ERRTAG_BMAPIFORMAT, XFS_RANDOM_BMAPIFORMAT))) {
XFS_ERROR_REPORT("xfs_bmapi_write", XFS_ERRLEVEL_LOW, mp); XFS_ERROR_REPORT("xfs_bmapi_write", XFS_ERRLEVEL_LOW, mp);
return XFS_ERROR(EFSCORRUPTED); return -EFSCORRUPTED;
} }
if (XFS_FORCED_SHUTDOWN(mp)) if (XFS_FORCED_SHUTDOWN(mp))
return XFS_ERROR(EIO); return -EIO;
ifp = XFS_IFORK_PTR(ip, whichfork); ifp = XFS_IFORK_PTR(ip, whichfork);
...@@ -4620,7 +4616,7 @@ xfs_bmapi_write( ...@@ -4620,7 +4616,7 @@ xfs_bmapi_write(
/* Execute unwritten extent conversion if necessary */ /* Execute unwritten extent conversion if necessary */
error = xfs_bmapi_convert_unwritten(&bma, mval, len, flags); error = xfs_bmapi_convert_unwritten(&bma, mval, len, flags);
if (error == EAGAIN) if (error == -EAGAIN)
continue; continue;
if (error) if (error)
goto error0; goto error0;
...@@ -4922,7 +4918,7 @@ xfs_bmap_del_extent( ...@@ -4922,7 +4918,7 @@ xfs_bmap_del_extent(
goto done; goto done;
cur->bc_rec.b = new; cur->bc_rec.b = new;
error = xfs_btree_insert(cur, &i); error = xfs_btree_insert(cur, &i);
if (error && error != ENOSPC) if (error && error != -ENOSPC)
goto done; goto done;
/* /*
* If get no-space back from btree insert, * If get no-space back from btree insert,
...@@ -4930,7 +4926,7 @@ xfs_bmap_del_extent( ...@@ -4930,7 +4926,7 @@ xfs_bmap_del_extent(
* block reservation. * block reservation.
* Fix up our state and return the error. * Fix up our state and return the error.
*/ */
if (error == ENOSPC) { if (error == -ENOSPC) {
/* /*
* Reset the cursor, don't trust * Reset the cursor, don't trust
* it after any insert operation. * it after any insert operation.
...@@ -4958,7 +4954,7 @@ xfs_bmap_del_extent( ...@@ -4958,7 +4954,7 @@ xfs_bmap_del_extent(
xfs_bmbt_set_blockcount(ep, xfs_bmbt_set_blockcount(ep,
got.br_blockcount); got.br_blockcount);
flags = 0; flags = 0;
error = XFS_ERROR(ENOSPC); error = -ENOSPC;
goto done; goto done;
} }
XFS_WANT_CORRUPTED_GOTO(i == 1, done); XFS_WANT_CORRUPTED_GOTO(i == 1, done);
...@@ -5076,11 +5072,11 @@ xfs_bunmapi( ...@@ -5076,11 +5072,11 @@ xfs_bunmapi(
XFS_IFORK_FORMAT(ip, whichfork) != XFS_DINODE_FMT_BTREE)) { XFS_IFORK_FORMAT(ip, whichfork) != XFS_DINODE_FMT_BTREE)) {
XFS_ERROR_REPORT("xfs_bunmapi", XFS_ERRLEVEL_LOW, XFS_ERROR_REPORT("xfs_bunmapi", XFS_ERRLEVEL_LOW,
ip->i_mount); ip->i_mount);
return XFS_ERROR(EFSCORRUPTED); return -EFSCORRUPTED;
} }
mp = ip->i_mount; mp = ip->i_mount;
if (XFS_FORCED_SHUTDOWN(mp)) if (XFS_FORCED_SHUTDOWN(mp))
return XFS_ERROR(EIO); return -EIO;
ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL));
ASSERT(len > 0); ASSERT(len > 0);
...@@ -5325,7 +5321,7 @@ xfs_bunmapi( ...@@ -5325,7 +5321,7 @@ xfs_bunmapi(
del.br_startoff > got.br_startoff && del.br_startoff > got.br_startoff &&
del.br_startoff + del.br_blockcount < del.br_startoff + del.br_blockcount <
got.br_startoff + got.br_blockcount) { got.br_startoff + got.br_blockcount) {
error = XFS_ERROR(ENOSPC); error = -ENOSPC;
goto error0; goto error0;
} }
error = xfs_bmap_del_extent(ip, tp, &lastx, flist, cur, &del, error = xfs_bmap_del_extent(ip, tp, &lastx, flist, cur, &del,
...@@ -5449,11 +5445,11 @@ xfs_bmap_shift_extents( ...@@ -5449,11 +5445,11 @@ xfs_bmap_shift_extents(
mp, XFS_ERRTAG_BMAPIFORMAT, XFS_RANDOM_BMAPIFORMAT))) { mp, XFS_ERRTAG_BMAPIFORMAT, XFS_RANDOM_BMAPIFORMAT))) {
XFS_ERROR_REPORT("xfs_bmap_shift_extents", XFS_ERROR_REPORT("xfs_bmap_shift_extents",
XFS_ERRLEVEL_LOW, mp); XFS_ERRLEVEL_LOW, mp);
return XFS_ERROR(EFSCORRUPTED); return -EFSCORRUPTED;
} }
if (XFS_FORCED_SHUTDOWN(mp)) if (XFS_FORCED_SHUTDOWN(mp))
return XFS_ERROR(EIO); return -EIO;
ASSERT(current_ext != NULL); ASSERT(current_ext != NULL);
...@@ -5516,14 +5512,14 @@ xfs_bmap_shift_extents( ...@@ -5516,14 +5512,14 @@ xfs_bmap_shift_extents(
*current_ext - 1), &left); *current_ext - 1), &left);
if (startoff < left.br_startoff + left.br_blockcount) if (startoff < left.br_startoff + left.br_blockcount)
error = XFS_ERROR(EINVAL); error = -EINVAL;
} else if (offset_shift_fsb > got.br_startoff) { } else if (offset_shift_fsb > got.br_startoff) {
/* /*
* When first extent is shifted, offset_shift_fsb * When first extent is shifted, offset_shift_fsb
* should be less than the stating offset of * should be less than the stating offset of
* the first extent. * the first extent.
*/ */
error = XFS_ERROR(EINVAL); error = -EINVAL;
} }
if (error) if (error)
......
...@@ -111,23 +111,8 @@ __xfs_bmbt_get_all( ...@@ -111,23 +111,8 @@ __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
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
#ifdef DEBUG
{
xfs_dfsbno_t b;
b = (((xfs_dfsbno_t)l0 & xfs_mask64lo(9)) << 43) |
(((xfs_dfsbno_t)l1) >> 21);
ASSERT((b >> 32) == 0 || isnulldstartblock(b));
s->br_startblock = (xfs_fsblock_t)b;
}
#else /* !DEBUG */
s->br_startblock = (xfs_fsblock_t)(((xfs_dfsbno_t)l1) >> 21);
#endif /* DEBUG */
#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) {
...@@ -163,21 +148,8 @@ xfs_fsblock_t ...@@ -163,21 +148,8 @@ xfs_fsblock_t
xfs_bmbt_get_startblock( xfs_bmbt_get_startblock(
xfs_bmbt_rec_host_t *r) xfs_bmbt_rec_host_t *r)
{ {
#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
#ifdef DEBUG
xfs_dfsbno_t b;
b = (((xfs_dfsbno_t)r->l0 & xfs_mask64lo(9)) << 43) |
(((xfs_dfsbno_t)r->l1) >> 21);
ASSERT((b >> 32) == 0 || isnulldstartblock(b));
return (xfs_fsblock_t)b;
#else /* !DEBUG */
return (xfs_fsblock_t)(((xfs_dfsbno_t)r->l1) >> 21);
#endif /* DEBUG */
#endif /* XFS_BIG_BLKNOS */
} }
/* /*
...@@ -241,7 +213,6 @@ xfs_bmbt_set_allf( ...@@ -241,7 +213,6 @@ xfs_bmbt_set_allf(
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
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) |
...@@ -250,23 +221,6 @@ xfs_bmbt_set_allf( ...@@ -250,23 +221,6 @@ xfs_bmbt_set_allf(
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 */
if (isnullstartblock(startblock)) {
r->l0 = ((xfs_bmbt_rec_base_t)extent_flag << 63) |
((xfs_bmbt_rec_base_t)startoff << 9) |
(xfs_bmbt_rec_base_t)xfs_mask64lo(9);
r->l1 = xfs_mask64hi(11) |
((xfs_bmbt_rec_base_t)startblock << 21) |
((xfs_bmbt_rec_base_t)blockcount &
(xfs_bmbt_rec_base_t)xfs_mask64lo(21));
} else {
r->l0 = ((xfs_bmbt_rec_base_t)extent_flag << 63) |
((xfs_bmbt_rec_base_t)startoff << 9);
r->l1 = ((xfs_bmbt_rec_base_t)startblock << 21) |
((xfs_bmbt_rec_base_t)blockcount &
(xfs_bmbt_rec_base_t)xfs_mask64lo(21));
}
#endif /* XFS_BIG_BLKNOS */
} }
/* /*
...@@ -298,8 +252,6 @@ xfs_bmbt_disk_set_allf( ...@@ -298,8 +252,6 @@ xfs_bmbt_disk_set_allf(
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
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(
...@@ -310,26 +262,6 @@ xfs_bmbt_disk_set_allf( ...@@ -310,26 +262,6 @@ xfs_bmbt_disk_set_allf(
((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 */
if (isnullstartblock(startblock)) {
r->l0 = cpu_to_be64(
((xfs_bmbt_rec_base_t)extent_flag << 63) |
((xfs_bmbt_rec_base_t)startoff << 9) |
(xfs_bmbt_rec_base_t)xfs_mask64lo(9));
r->l1 = cpu_to_be64(xfs_mask64hi(11) |
((xfs_bmbt_rec_base_t)startblock << 21) |
((xfs_bmbt_rec_base_t)blockcount &
(xfs_bmbt_rec_base_t)xfs_mask64lo(21)));
} else {
r->l0 = cpu_to_be64(
((xfs_bmbt_rec_base_t)extent_flag << 63) |
((xfs_bmbt_rec_base_t)startoff << 9));
r->l1 = cpu_to_be64(
((xfs_bmbt_rec_base_t)startblock << 21) |
((xfs_bmbt_rec_base_t)blockcount &
(xfs_bmbt_rec_base_t)xfs_mask64lo(21)));
}
#endif /* XFS_BIG_BLKNOS */
} }
/* /*
...@@ -365,24 +297,11 @@ xfs_bmbt_set_startblock( ...@@ -365,24 +297,11 @@ xfs_bmbt_set_startblock(
xfs_bmbt_rec_host_t *r, xfs_bmbt_rec_host_t *r,
xfs_fsblock_t v) xfs_fsblock_t v)
{ {
#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 */
if (isnullstartblock(v)) {
r->l0 |= (xfs_bmbt_rec_base_t)xfs_mask64lo(9);
r->l1 = (xfs_bmbt_rec_base_t)xfs_mask64hi(11) |
((xfs_bmbt_rec_base_t)v << 21) |
(r->l1 & (xfs_bmbt_rec_base_t)xfs_mask64lo(21));
} else {
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)xfs_mask64lo(21));
}
#endif /* XFS_BIG_BLKNOS */
} }
/* /*
...@@ -438,8 +357,8 @@ xfs_bmbt_to_bmdr( ...@@ -438,8 +357,8 @@ xfs_bmbt_to_bmdr(
cpu_to_be64(XFS_BUF_DADDR_NULL)); cpu_to_be64(XFS_BUF_DADDR_NULL));
} else } else
ASSERT(rblock->bb_magic == cpu_to_be32(XFS_BMAP_MAGIC)); ASSERT(rblock->bb_magic == cpu_to_be32(XFS_BMAP_MAGIC));
ASSERT(rblock->bb_u.l.bb_leftsib == cpu_to_be64(NULLDFSBNO)); ASSERT(rblock->bb_u.l.bb_leftsib == cpu_to_be64(NULLFSBLOCK));
ASSERT(rblock->bb_u.l.bb_rightsib == cpu_to_be64(NULLDFSBNO)); ASSERT(rblock->bb_u.l.bb_rightsib == cpu_to_be64(NULLFSBLOCK));
ASSERT(rblock->bb_level != 0); ASSERT(rblock->bb_level != 0);
dblock->bb_level = rblock->bb_level; dblock->bb_level = rblock->bb_level;
dblock->bb_numrecs = rblock->bb_numrecs; dblock->bb_numrecs = rblock->bb_numrecs;
...@@ -554,7 +473,7 @@ xfs_bmbt_alloc_block( ...@@ -554,7 +473,7 @@ xfs_bmbt_alloc_block(
args.minlen = args.maxlen = args.prod = 1; args.minlen = args.maxlen = args.prod = 1;
args.wasdel = cur->bc_private.b.flags & XFS_BTCUR_BPRV_WASDEL; args.wasdel = cur->bc_private.b.flags & XFS_BTCUR_BPRV_WASDEL;
if (!args.wasdel && xfs_trans_get_block_res(args.tp) == 0) { if (!args.wasdel && xfs_trans_get_block_res(args.tp) == 0) {
error = XFS_ERROR(ENOSPC); error = -ENOSPC;
goto error0; goto error0;
} }
error = xfs_alloc_vextent(&args); error = xfs_alloc_vextent(&args);
...@@ -763,11 +682,11 @@ xfs_bmbt_verify( ...@@ -763,11 +682,11 @@ xfs_bmbt_verify(
/* sibling pointer verification */ /* sibling pointer verification */
if (!block->bb_u.l.bb_leftsib || if (!block->bb_u.l.bb_leftsib ||
(block->bb_u.l.bb_leftsib != cpu_to_be64(NULLDFSBNO) && (block->bb_u.l.bb_leftsib != cpu_to_be64(NULLFSBLOCK) &&
!XFS_FSB_SANITY_CHECK(mp, be64_to_cpu(block->bb_u.l.bb_leftsib)))) !XFS_FSB_SANITY_CHECK(mp, be64_to_cpu(block->bb_u.l.bb_leftsib))))
return false; return false;
if (!block->bb_u.l.bb_rightsib || if (!block->bb_u.l.bb_rightsib ||
(block->bb_u.l.bb_rightsib != cpu_to_be64(NULLDFSBNO) && (block->bb_u.l.bb_rightsib != cpu_to_be64(NULLFSBLOCK) &&
!XFS_FSB_SANITY_CHECK(mp, be64_to_cpu(block->bb_u.l.bb_rightsib)))) !XFS_FSB_SANITY_CHECK(mp, be64_to_cpu(block->bb_u.l.bb_rightsib))))
return false; return false;
...@@ -779,9 +698,9 @@ xfs_bmbt_read_verify( ...@@ -779,9 +698,9 @@ xfs_bmbt_read_verify(
struct xfs_buf *bp) struct xfs_buf *bp)
{ {
if (!xfs_btree_lblock_verify_crc(bp)) if (!xfs_btree_lblock_verify_crc(bp))
xfs_buf_ioerror(bp, EFSBADCRC); xfs_buf_ioerror(bp, -EFSBADCRC);
else if (!xfs_bmbt_verify(bp)) else if (!xfs_bmbt_verify(bp))
xfs_buf_ioerror(bp, EFSCORRUPTED); xfs_buf_ioerror(bp, -EFSCORRUPTED);
if (bp->b_error) { if (bp->b_error) {
trace_xfs_btree_corrupt(bp, _RET_IP_); trace_xfs_btree_corrupt(bp, _RET_IP_);
...@@ -795,7 +714,7 @@ xfs_bmbt_write_verify( ...@@ -795,7 +714,7 @@ xfs_bmbt_write_verify(
{ {
if (!xfs_bmbt_verify(bp)) { if (!xfs_bmbt_verify(bp)) {
trace_xfs_btree_corrupt(bp, _RET_IP_); trace_xfs_btree_corrupt(bp, _RET_IP_);
xfs_buf_ioerror(bp, EFSCORRUPTED); xfs_buf_ioerror(bp, -EFSCORRUPTED);
xfs_verifier_error(bp); xfs_verifier_error(bp);
return; return;
} }
...@@ -959,7 +878,7 @@ xfs_bmbt_change_owner( ...@@ -959,7 +878,7 @@ xfs_bmbt_change_owner(
cur = xfs_bmbt_init_cursor(ip->i_mount, tp, ip, whichfork); cur = xfs_bmbt_init_cursor(ip->i_mount, tp, ip, whichfork);
if (!cur) if (!cur)
return ENOMEM; return -ENOMEM;
error = xfs_btree_change_owner(cur, new_owner, buffer_list); error = xfs_btree_change_owner(cur, new_owner, buffer_list);
xfs_btree_del_cursor(cur, error ? XFS_BTREE_ERROR : XFS_BTREE_NOERROR); xfs_btree_del_cursor(cur, error ? XFS_BTREE_ERROR : XFS_BTREE_NOERROR);
......
...@@ -78,11 +78,11 @@ xfs_btree_check_lblock( ...@@ -78,11 +78,11 @@ xfs_btree_check_lblock(
be16_to_cpu(block->bb_numrecs) <= be16_to_cpu(block->bb_numrecs) <=
cur->bc_ops->get_maxrecs(cur, level) && cur->bc_ops->get_maxrecs(cur, level) &&
block->bb_u.l.bb_leftsib && block->bb_u.l.bb_leftsib &&
(block->bb_u.l.bb_leftsib == cpu_to_be64(NULLDFSBNO) || (block->bb_u.l.bb_leftsib == cpu_to_be64(NULLFSBLOCK) ||
XFS_FSB_SANITY_CHECK(mp, XFS_FSB_SANITY_CHECK(mp,
be64_to_cpu(block->bb_u.l.bb_leftsib))) && be64_to_cpu(block->bb_u.l.bb_leftsib))) &&
block->bb_u.l.bb_rightsib && block->bb_u.l.bb_rightsib &&
(block->bb_u.l.bb_rightsib == cpu_to_be64(NULLDFSBNO) || (block->bb_u.l.bb_rightsib == cpu_to_be64(NULLFSBLOCK) ||
XFS_FSB_SANITY_CHECK(mp, XFS_FSB_SANITY_CHECK(mp,
be64_to_cpu(block->bb_u.l.bb_rightsib))); be64_to_cpu(block->bb_u.l.bb_rightsib)));
...@@ -92,7 +92,7 @@ xfs_btree_check_lblock( ...@@ -92,7 +92,7 @@ xfs_btree_check_lblock(
if (bp) if (bp)
trace_xfs_btree_corrupt(bp, _RET_IP_); trace_xfs_btree_corrupt(bp, _RET_IP_);
XFS_ERROR_REPORT(__func__, XFS_ERRLEVEL_LOW, mp); XFS_ERROR_REPORT(__func__, XFS_ERRLEVEL_LOW, mp);
return XFS_ERROR(EFSCORRUPTED); return -EFSCORRUPTED;
} }
return 0; return 0;
} }
...@@ -140,7 +140,7 @@ xfs_btree_check_sblock( ...@@ -140,7 +140,7 @@ xfs_btree_check_sblock(
if (bp) if (bp)
trace_xfs_btree_corrupt(bp, _RET_IP_); trace_xfs_btree_corrupt(bp, _RET_IP_);
XFS_ERROR_REPORT(__func__, XFS_ERRLEVEL_LOW, mp); XFS_ERROR_REPORT(__func__, XFS_ERRLEVEL_LOW, mp);
return XFS_ERROR(EFSCORRUPTED); return -EFSCORRUPTED;
} }
return 0; return 0;
} }
...@@ -167,12 +167,12 @@ xfs_btree_check_block( ...@@ -167,12 +167,12 @@ xfs_btree_check_block(
int /* error (0 or EFSCORRUPTED) */ int /* error (0 or EFSCORRUPTED) */
xfs_btree_check_lptr( xfs_btree_check_lptr(
struct xfs_btree_cur *cur, /* btree cursor */ struct xfs_btree_cur *cur, /* btree cursor */
xfs_dfsbno_t bno, /* btree block disk address */ xfs_fsblock_t bno, /* btree block disk address */
int level) /* btree block level */ int level) /* btree block level */
{ {
XFS_WANT_CORRUPTED_RETURN( XFS_WANT_CORRUPTED_RETURN(
level > 0 && level > 0 &&
bno != NULLDFSBNO && bno != NULLFSBLOCK &&
XFS_FSB_SANITY_CHECK(cur->bc_mp, bno)); XFS_FSB_SANITY_CHECK(cur->bc_mp, bno));
return 0; return 0;
} }
...@@ -595,7 +595,7 @@ xfs_btree_islastblock( ...@@ -595,7 +595,7 @@ xfs_btree_islastblock(
block = xfs_btree_get_block(cur, level, &bp); block = xfs_btree_get_block(cur, level, &bp);
xfs_btree_check_block(cur, block, level, bp); xfs_btree_check_block(cur, block, level, bp);
if (cur->bc_flags & XFS_BTREE_LONG_PTRS) if (cur->bc_flags & XFS_BTREE_LONG_PTRS)
return block->bb_u.l.bb_rightsib == cpu_to_be64(NULLDFSBNO); return block->bb_u.l.bb_rightsib == cpu_to_be64(NULLFSBLOCK);
else else
return block->bb_u.s.bb_rightsib == cpu_to_be32(NULLAGBLOCK); return block->bb_u.s.bb_rightsib == cpu_to_be32(NULLAGBLOCK);
} }
...@@ -771,16 +771,16 @@ xfs_btree_readahead_lblock( ...@@ -771,16 +771,16 @@ xfs_btree_readahead_lblock(
struct xfs_btree_block *block) struct xfs_btree_block *block)
{ {
int rval = 0; int rval = 0;
xfs_dfsbno_t left = be64_to_cpu(block->bb_u.l.bb_leftsib); xfs_fsblock_t left = be64_to_cpu(block->bb_u.l.bb_leftsib);
xfs_dfsbno_t right = be64_to_cpu(block->bb_u.l.bb_rightsib); xfs_fsblock_t right = be64_to_cpu(block->bb_u.l.bb_rightsib);
if ((lr & XFS_BTCUR_LEFTRA) && left != NULLDFSBNO) { if ((lr & XFS_BTCUR_LEFTRA) && left != NULLFSBLOCK) {
xfs_btree_reada_bufl(cur->bc_mp, left, 1, xfs_btree_reada_bufl(cur->bc_mp, left, 1,
cur->bc_ops->buf_ops); cur->bc_ops->buf_ops);
rval++; rval++;
} }
if ((lr & XFS_BTCUR_RIGHTRA) && right != NULLDFSBNO) { if ((lr & XFS_BTCUR_RIGHTRA) && right != NULLFSBLOCK) {
xfs_btree_reada_bufl(cur->bc_mp, right, 1, xfs_btree_reada_bufl(cur->bc_mp, right, 1,
cur->bc_ops->buf_ops); cur->bc_ops->buf_ops);
rval++; rval++;
...@@ -852,7 +852,7 @@ xfs_btree_ptr_to_daddr( ...@@ -852,7 +852,7 @@ xfs_btree_ptr_to_daddr(
union xfs_btree_ptr *ptr) union xfs_btree_ptr *ptr)
{ {
if (cur->bc_flags & XFS_BTREE_LONG_PTRS) { if (cur->bc_flags & XFS_BTREE_LONG_PTRS) {
ASSERT(ptr->l != cpu_to_be64(NULLDFSBNO)); ASSERT(ptr->l != cpu_to_be64(NULLFSBLOCK));
return XFS_FSB_TO_DADDR(cur->bc_mp, be64_to_cpu(ptr->l)); return XFS_FSB_TO_DADDR(cur->bc_mp, be64_to_cpu(ptr->l));
} else { } else {
...@@ -900,9 +900,9 @@ xfs_btree_setbuf( ...@@ -900,9 +900,9 @@ xfs_btree_setbuf(
b = XFS_BUF_TO_BLOCK(bp); b = XFS_BUF_TO_BLOCK(bp);
if (cur->bc_flags & XFS_BTREE_LONG_PTRS) { if (cur->bc_flags & XFS_BTREE_LONG_PTRS) {
if (b->bb_u.l.bb_leftsib == cpu_to_be64(NULLDFSBNO)) if (b->bb_u.l.bb_leftsib == cpu_to_be64(NULLFSBLOCK))
cur->bc_ra[lev] |= XFS_BTCUR_LEFTRA; cur->bc_ra[lev] |= XFS_BTCUR_LEFTRA;
if (b->bb_u.l.bb_rightsib == cpu_to_be64(NULLDFSBNO)) if (b->bb_u.l.bb_rightsib == cpu_to_be64(NULLFSBLOCK))
cur->bc_ra[lev] |= XFS_BTCUR_RIGHTRA; cur->bc_ra[lev] |= XFS_BTCUR_RIGHTRA;
} else { } else {
if (b->bb_u.s.bb_leftsib == cpu_to_be32(NULLAGBLOCK)) if (b->bb_u.s.bb_leftsib == cpu_to_be32(NULLAGBLOCK))
...@@ -918,7 +918,7 @@ xfs_btree_ptr_is_null( ...@@ -918,7 +918,7 @@ xfs_btree_ptr_is_null(
union xfs_btree_ptr *ptr) union xfs_btree_ptr *ptr)
{ {
if (cur->bc_flags & XFS_BTREE_LONG_PTRS) if (cur->bc_flags & XFS_BTREE_LONG_PTRS)
return ptr->l == cpu_to_be64(NULLDFSBNO); return ptr->l == cpu_to_be64(NULLFSBLOCK);
else else
return ptr->s == cpu_to_be32(NULLAGBLOCK); return ptr->s == cpu_to_be32(NULLAGBLOCK);
} }
...@@ -929,7 +929,7 @@ xfs_btree_set_ptr_null( ...@@ -929,7 +929,7 @@ xfs_btree_set_ptr_null(
union xfs_btree_ptr *ptr) union xfs_btree_ptr *ptr)
{ {
if (cur->bc_flags & XFS_BTREE_LONG_PTRS) if (cur->bc_flags & XFS_BTREE_LONG_PTRS)
ptr->l = cpu_to_be64(NULLDFSBNO); ptr->l = cpu_to_be64(NULLFSBLOCK);
else else
ptr->s = cpu_to_be32(NULLAGBLOCK); ptr->s = cpu_to_be32(NULLAGBLOCK);
} }
...@@ -997,8 +997,8 @@ xfs_btree_init_block_int( ...@@ -997,8 +997,8 @@ xfs_btree_init_block_int(
buf->bb_numrecs = cpu_to_be16(numrecs); buf->bb_numrecs = cpu_to_be16(numrecs);
if (flags & XFS_BTREE_LONG_PTRS) { if (flags & XFS_BTREE_LONG_PTRS) {
buf->bb_u.l.bb_leftsib = cpu_to_be64(NULLDFSBNO); buf->bb_u.l.bb_leftsib = cpu_to_be64(NULLFSBLOCK);
buf->bb_u.l.bb_rightsib = cpu_to_be64(NULLDFSBNO); buf->bb_u.l.bb_rightsib = cpu_to_be64(NULLFSBLOCK);
if (flags & XFS_BTREE_CRC_BLOCKS) { if (flags & XFS_BTREE_CRC_BLOCKS) {
buf->bb_u.l.bb_blkno = cpu_to_be64(blkno); buf->bb_u.l.bb_blkno = cpu_to_be64(blkno);
buf->bb_u.l.bb_owner = cpu_to_be64(owner); buf->bb_u.l.bb_owner = cpu_to_be64(owner);
...@@ -1140,7 +1140,7 @@ xfs_btree_get_buf_block( ...@@ -1140,7 +1140,7 @@ xfs_btree_get_buf_block(
mp->m_bsize, flags); mp->m_bsize, flags);
if (!*bpp) if (!*bpp)
return ENOMEM; return -ENOMEM;
(*bpp)->b_ops = cur->bc_ops->buf_ops; (*bpp)->b_ops = cur->bc_ops->buf_ops;
*block = XFS_BUF_TO_BLOCK(*bpp); *block = XFS_BUF_TO_BLOCK(*bpp);
...@@ -1498,7 +1498,7 @@ xfs_btree_increment( ...@@ -1498,7 +1498,7 @@ xfs_btree_increment(
if (cur->bc_flags & XFS_BTREE_ROOT_IN_INODE) if (cur->bc_flags & XFS_BTREE_ROOT_IN_INODE)
goto out0; goto out0;
ASSERT(0); ASSERT(0);
error = EFSCORRUPTED; error = -EFSCORRUPTED;
goto error0; goto error0;
} }
ASSERT(lev < cur->bc_nlevels); ASSERT(lev < cur->bc_nlevels);
...@@ -1597,7 +1597,7 @@ xfs_btree_decrement( ...@@ -1597,7 +1597,7 @@ xfs_btree_decrement(
if (cur->bc_flags & XFS_BTREE_ROOT_IN_INODE) if (cur->bc_flags & XFS_BTREE_ROOT_IN_INODE)
goto out0; goto out0;
ASSERT(0); ASSERT(0);
error = EFSCORRUPTED; error = -EFSCORRUPTED;
goto error0; goto error0;
} }
ASSERT(lev < cur->bc_nlevels); ASSERT(lev < cur->bc_nlevels);
...@@ -4018,7 +4018,7 @@ xfs_btree_block_change_owner( ...@@ -4018,7 +4018,7 @@ xfs_btree_block_change_owner(
/* now read rh sibling block for next iteration */ /* now read rh sibling block for next iteration */
xfs_btree_get_sibling(cur, block, &rptr, XFS_BB_RIGHTSIB); xfs_btree_get_sibling(cur, block, &rptr, XFS_BB_RIGHTSIB);
if (xfs_btree_ptr_is_null(cur, &rptr)) if (xfs_btree_ptr_is_null(cur, &rptr))
return ENOENT; return -ENOENT;
return xfs_btree_lookup_get_block(cur, level, &rptr, &block); return xfs_btree_lookup_get_block(cur, level, &rptr, &block);
} }
...@@ -4061,7 +4061,7 @@ xfs_btree_change_owner( ...@@ -4061,7 +4061,7 @@ xfs_btree_change_owner(
buffer_list); buffer_list);
} while (!error); } while (!error);
if (error != ENOENT) if (error != -ENOENT)
return error; return error;
} }
......
...@@ -258,7 +258,7 @@ xfs_btree_check_block( ...@@ -258,7 +258,7 @@ xfs_btree_check_block(
int /* error (0 or EFSCORRUPTED) */ int /* error (0 or EFSCORRUPTED) */
xfs_btree_check_lptr( xfs_btree_check_lptr(
struct xfs_btree_cur *cur, /* btree cursor */ struct xfs_btree_cur *cur, /* btree cursor */
xfs_dfsbno_t ptr, /* btree block disk address */ xfs_fsblock_t ptr, /* btree block disk address */
int level); /* btree block level */ int level); /* btree block level */
/* /*
......
...@@ -185,7 +185,7 @@ xfs_da3_node_write_verify( ...@@ -185,7 +185,7 @@ xfs_da3_node_write_verify(
struct xfs_da3_node_hdr *hdr3 = bp->b_addr; struct xfs_da3_node_hdr *hdr3 = bp->b_addr;
if (!xfs_da3_node_verify(bp)) { if (!xfs_da3_node_verify(bp)) {
xfs_buf_ioerror(bp, EFSCORRUPTED); xfs_buf_ioerror(bp, -EFSCORRUPTED);
xfs_verifier_error(bp); xfs_verifier_error(bp);
return; return;
} }
...@@ -214,13 +214,13 @@ xfs_da3_node_read_verify( ...@@ -214,13 +214,13 @@ xfs_da3_node_read_verify(
switch (be16_to_cpu(info->magic)) { switch (be16_to_cpu(info->magic)) {
case XFS_DA3_NODE_MAGIC: case XFS_DA3_NODE_MAGIC:
if (!xfs_buf_verify_cksum(bp, XFS_DA3_NODE_CRC_OFF)) { if (!xfs_buf_verify_cksum(bp, XFS_DA3_NODE_CRC_OFF)) {
xfs_buf_ioerror(bp, EFSBADCRC); xfs_buf_ioerror(bp, -EFSBADCRC);
break; break;
} }
/* fall through */ /* fall through */
case XFS_DA_NODE_MAGIC: case XFS_DA_NODE_MAGIC:
if (!xfs_da3_node_verify(bp)) { if (!xfs_da3_node_verify(bp)) {
xfs_buf_ioerror(bp, EFSCORRUPTED); xfs_buf_ioerror(bp, -EFSCORRUPTED);
break; break;
} }
return; return;
...@@ -315,7 +315,7 @@ xfs_da3_node_create( ...@@ -315,7 +315,7 @@ xfs_da3_node_create(
error = xfs_da_get_buf(tp, dp, blkno, -1, &bp, whichfork); error = xfs_da_get_buf(tp, dp, blkno, -1, &bp, whichfork);
if (error) if (error)
return(error); return error;
bp->b_ops = &xfs_da3_node_buf_ops; bp->b_ops = &xfs_da3_node_buf_ops;
xfs_trans_buf_set_type(tp, bp, XFS_BLFT_DA_NODE_BUF); xfs_trans_buf_set_type(tp, bp, XFS_BLFT_DA_NODE_BUF);
node = bp->b_addr; node = bp->b_addr;
...@@ -337,7 +337,7 @@ xfs_da3_node_create( ...@@ -337,7 +337,7 @@ xfs_da3_node_create(
XFS_DA_LOGRANGE(node, &node->hdr, dp->d_ops->node_hdr_size)); XFS_DA_LOGRANGE(node, &node->hdr, dp->d_ops->node_hdr_size));
*bpp = bp; *bpp = bp;
return(0); return 0;
} }
/* /*
...@@ -385,8 +385,8 @@ xfs_da3_split( ...@@ -385,8 +385,8 @@ xfs_da3_split(
switch (oldblk->magic) { switch (oldblk->magic) {
case XFS_ATTR_LEAF_MAGIC: case XFS_ATTR_LEAF_MAGIC:
error = xfs_attr3_leaf_split(state, oldblk, newblk); error = xfs_attr3_leaf_split(state, oldblk, newblk);
if ((error != 0) && (error != ENOSPC)) { if ((error != 0) && (error != -ENOSPC)) {
return(error); /* GROT: attr is inconsistent */ return error; /* GROT: attr is inconsistent */
} }
if (!error) { if (!error) {
addblk = newblk; addblk = newblk;
...@@ -408,7 +408,7 @@ xfs_da3_split( ...@@ -408,7 +408,7 @@ xfs_da3_split(
&state->extrablk); &state->extrablk);
} }
if (error) if (error)
return(error); /* GROT: attr inconsistent */ return error; /* GROT: attr inconsistent */
addblk = newblk; addblk = newblk;
break; break;
case XFS_DIR2_LEAFN_MAGIC: case XFS_DIR2_LEAFN_MAGIC:
...@@ -422,7 +422,7 @@ xfs_da3_split( ...@@ -422,7 +422,7 @@ xfs_da3_split(
max - i, &action); max - i, &action);
addblk->bp = NULL; addblk->bp = NULL;
if (error) if (error)
return(error); /* GROT: dir is inconsistent */ return error; /* GROT: dir is inconsistent */
/* /*
* Record the newly split block for the next time thru? * Record the newly split block for the next time thru?
*/ */
...@@ -439,7 +439,7 @@ xfs_da3_split( ...@@ -439,7 +439,7 @@ xfs_da3_split(
xfs_da3_fixhashpath(state, &state->path); xfs_da3_fixhashpath(state, &state->path);
} }
if (!addblk) if (!addblk)
return(0); return 0;
/* /*
* Split the root node. * Split the root node.
...@@ -449,7 +449,7 @@ xfs_da3_split( ...@@ -449,7 +449,7 @@ xfs_da3_split(
error = xfs_da3_root_split(state, oldblk, addblk); error = xfs_da3_root_split(state, oldblk, addblk);
if (error) { if (error) {
addblk->bp = NULL; addblk->bp = NULL;
return(error); /* GROT: dir is inconsistent */ return error; /* GROT: dir is inconsistent */
} }
/* /*
...@@ -492,7 +492,7 @@ xfs_da3_split( ...@@ -492,7 +492,7 @@ xfs_da3_split(
sizeof(node->hdr.info))); sizeof(node->hdr.info)));
} }
addblk->bp = NULL; addblk->bp = NULL;
return(0); return 0;
} }
/* /*
...@@ -670,18 +670,18 @@ xfs_da3_node_split( ...@@ -670,18 +670,18 @@ xfs_da3_node_split(
*/ */
error = xfs_da_grow_inode(state->args, &blkno); error = xfs_da_grow_inode(state->args, &blkno);
if (error) if (error)
return(error); /* GROT: dir is inconsistent */ return error; /* GROT: dir is inconsistent */
error = xfs_da3_node_create(state->args, blkno, treelevel, error = xfs_da3_node_create(state->args, blkno, treelevel,
&newblk->bp, state->args->whichfork); &newblk->bp, state->args->whichfork);
if (error) if (error)
return(error); /* GROT: dir is inconsistent */ return error; /* GROT: dir is inconsistent */
newblk->blkno = blkno; newblk->blkno = blkno;
newblk->magic = XFS_DA_NODE_MAGIC; newblk->magic = XFS_DA_NODE_MAGIC;
xfs_da3_node_rebalance(state, oldblk, newblk); xfs_da3_node_rebalance(state, oldblk, newblk);
error = xfs_da3_blk_link(state, oldblk, newblk); error = xfs_da3_blk_link(state, oldblk, newblk);
if (error) if (error)
return(error); return error;
*result = 1; *result = 1;
} else { } else {
*result = 0; *result = 0;
...@@ -721,7 +721,7 @@ xfs_da3_node_split( ...@@ -721,7 +721,7 @@ xfs_da3_node_split(
} }
} }
return(0); return 0;
} }
/* /*
...@@ -963,9 +963,9 @@ xfs_da3_join( ...@@ -963,9 +963,9 @@ xfs_da3_join(
case XFS_ATTR_LEAF_MAGIC: case XFS_ATTR_LEAF_MAGIC:
error = xfs_attr3_leaf_toosmall(state, &action); error = xfs_attr3_leaf_toosmall(state, &action);
if (error) if (error)
return(error); return error;
if (action == 0) if (action == 0)
return(0); return 0;
xfs_attr3_leaf_unbalance(state, drop_blk, save_blk); xfs_attr3_leaf_unbalance(state, drop_blk, save_blk);
break; break;
case XFS_DIR2_LEAFN_MAGIC: case XFS_DIR2_LEAFN_MAGIC:
...@@ -985,7 +985,7 @@ xfs_da3_join( ...@@ -985,7 +985,7 @@ xfs_da3_join(
xfs_da3_fixhashpath(state, &state->path); xfs_da3_fixhashpath(state, &state->path);
error = xfs_da3_node_toosmall(state, &action); error = xfs_da3_node_toosmall(state, &action);
if (error) if (error)
return(error); return error;
if (action == 0) if (action == 0)
return 0; return 0;
xfs_da3_node_unbalance(state, drop_blk, save_blk); xfs_da3_node_unbalance(state, drop_blk, save_blk);
...@@ -995,12 +995,12 @@ xfs_da3_join( ...@@ -995,12 +995,12 @@ xfs_da3_join(
error = xfs_da3_blk_unlink(state, drop_blk, save_blk); error = xfs_da3_blk_unlink(state, drop_blk, save_blk);
xfs_da_state_kill_altpath(state); xfs_da_state_kill_altpath(state);
if (error) if (error)
return(error); return error;
error = xfs_da_shrink_inode(state->args, drop_blk->blkno, error = xfs_da_shrink_inode(state->args, drop_blk->blkno,
drop_blk->bp); drop_blk->bp);
drop_blk->bp = NULL; drop_blk->bp = NULL;
if (error) if (error)
return(error); return error;
} }
/* /*
* We joined all the way to the top. If it turns out that * We joined all the way to the top. If it turns out that
...@@ -1010,7 +1010,7 @@ xfs_da3_join( ...@@ -1010,7 +1010,7 @@ xfs_da3_join(
xfs_da3_node_remove(state, drop_blk); xfs_da3_node_remove(state, drop_blk);
xfs_da3_fixhashpath(state, &state->path); xfs_da3_fixhashpath(state, &state->path);
error = xfs_da3_root_join(state, &state->path.blk[0]); error = xfs_da3_root_join(state, &state->path.blk[0]);
return(error); return error;
} }
#ifdef DEBUG #ifdef DEBUG
...@@ -1099,7 +1099,7 @@ xfs_da3_root_join( ...@@ -1099,7 +1099,7 @@ xfs_da3_root_join(
xfs_trans_log_buf(args->trans, root_blk->bp, 0, xfs_trans_log_buf(args->trans, root_blk->bp, 0,
args->geo->blksize - 1); args->geo->blksize - 1);
error = xfs_da_shrink_inode(args, child, bp); error = xfs_da_shrink_inode(args, child, bp);
return(error); return error;
} }
/* /*
...@@ -1142,7 +1142,7 @@ xfs_da3_node_toosmall( ...@@ -1142,7 +1142,7 @@ xfs_da3_node_toosmall(
dp->d_ops->node_hdr_from_disk(&nodehdr, node); dp->d_ops->node_hdr_from_disk(&nodehdr, node);
if (nodehdr.count > (state->args->geo->node_ents >> 1)) { if (nodehdr.count > (state->args->geo->node_ents >> 1)) {
*action = 0; /* blk over 50%, don't try to join */ *action = 0; /* blk over 50%, don't try to join */
return(0); /* blk over 50%, don't try to join */ return 0; /* blk over 50%, don't try to join */
} }
/* /*
...@@ -1161,13 +1161,13 @@ xfs_da3_node_toosmall( ...@@ -1161,13 +1161,13 @@ xfs_da3_node_toosmall(
error = xfs_da3_path_shift(state, &state->altpath, forward, error = xfs_da3_path_shift(state, &state->altpath, forward,
0, &retval); 0, &retval);
if (error) if (error)
return(error); return error;
if (retval) { if (retval) {
*action = 0; *action = 0;
} else { } else {
*action = 2; *action = 2;
} }
return(0); return 0;
} }
/* /*
...@@ -1194,7 +1194,7 @@ xfs_da3_node_toosmall( ...@@ -1194,7 +1194,7 @@ xfs_da3_node_toosmall(
error = xfs_da3_node_read(state->args->trans, dp, error = xfs_da3_node_read(state->args->trans, dp,
blkno, -1, &bp, state->args->whichfork); blkno, -1, &bp, state->args->whichfork);
if (error) if (error)
return(error); return error;
node = bp->b_addr; node = bp->b_addr;
dp->d_ops->node_hdr_from_disk(&thdr, node); dp->d_ops->node_hdr_from_disk(&thdr, node);
...@@ -1486,7 +1486,7 @@ xfs_da3_node_lookup_int( ...@@ -1486,7 +1486,7 @@ xfs_da3_node_lookup_int(
if (error) { if (error) {
blk->blkno = 0; blk->blkno = 0;
state->path.active--; state->path.active--;
return(error); return error;
} }
curr = blk->bp->b_addr; curr = blk->bp->b_addr;
blk->magic = be16_to_cpu(curr->magic); blk->magic = be16_to_cpu(curr->magic);
...@@ -1579,25 +1579,25 @@ xfs_da3_node_lookup_int( ...@@ -1579,25 +1579,25 @@ xfs_da3_node_lookup_int(
args->blkno = blk->blkno; args->blkno = blk->blkno;
} else { } else {
ASSERT(0); ASSERT(0);
return XFS_ERROR(EFSCORRUPTED); return -EFSCORRUPTED;
} }
if (((retval == ENOENT) || (retval == ENOATTR)) && if (((retval == -ENOENT) || (retval == -ENOATTR)) &&
(blk->hashval == args->hashval)) { (blk->hashval == args->hashval)) {
error = xfs_da3_path_shift(state, &state->path, 1, 1, error = xfs_da3_path_shift(state, &state->path, 1, 1,
&retval); &retval);
if (error) if (error)
return(error); return error;
if (retval == 0) { if (retval == 0) {
continue; continue;
} else if (blk->magic == XFS_ATTR_LEAF_MAGIC) { } else if (blk->magic == XFS_ATTR_LEAF_MAGIC) {
/* path_shift() gives ENOENT */ /* path_shift() gives ENOENT */
retval = XFS_ERROR(ENOATTR); retval = -ENOATTR;
} }
} }
break; break;
} }
*result = retval; *result = retval;
return(0); return 0;
} }
/*======================================================================== /*========================================================================
...@@ -1692,7 +1692,7 @@ xfs_da3_blk_link( ...@@ -1692,7 +1692,7 @@ xfs_da3_blk_link(
be32_to_cpu(old_info->back), be32_to_cpu(old_info->back),
-1, &bp, args->whichfork); -1, &bp, args->whichfork);
if (error) if (error)
return(error); return error;
ASSERT(bp != NULL); ASSERT(bp != NULL);
tmp_info = bp->b_addr; tmp_info = bp->b_addr;
ASSERT(tmp_info->magic == old_info->magic); ASSERT(tmp_info->magic == old_info->magic);
...@@ -1713,7 +1713,7 @@ xfs_da3_blk_link( ...@@ -1713,7 +1713,7 @@ xfs_da3_blk_link(
be32_to_cpu(old_info->forw), be32_to_cpu(old_info->forw),
-1, &bp, args->whichfork); -1, &bp, args->whichfork);
if (error) if (error)
return(error); return error;
ASSERT(bp != NULL); ASSERT(bp != NULL);
tmp_info = bp->b_addr; tmp_info = bp->b_addr;
ASSERT(tmp_info->magic == old_info->magic); ASSERT(tmp_info->magic == old_info->magic);
...@@ -1726,7 +1726,7 @@ xfs_da3_blk_link( ...@@ -1726,7 +1726,7 @@ xfs_da3_blk_link(
xfs_trans_log_buf(args->trans, old_blk->bp, 0, sizeof(*tmp_info) - 1); xfs_trans_log_buf(args->trans, old_blk->bp, 0, sizeof(*tmp_info) - 1);
xfs_trans_log_buf(args->trans, new_blk->bp, 0, sizeof(*tmp_info) - 1); xfs_trans_log_buf(args->trans, new_blk->bp, 0, sizeof(*tmp_info) - 1);
return(0); return 0;
} }
/* /*
...@@ -1772,7 +1772,7 @@ xfs_da3_blk_unlink( ...@@ -1772,7 +1772,7 @@ xfs_da3_blk_unlink(
be32_to_cpu(drop_info->back), be32_to_cpu(drop_info->back),
-1, &bp, args->whichfork); -1, &bp, args->whichfork);
if (error) if (error)
return(error); return error;
ASSERT(bp != NULL); ASSERT(bp != NULL);
tmp_info = bp->b_addr; tmp_info = bp->b_addr;
ASSERT(tmp_info->magic == save_info->magic); ASSERT(tmp_info->magic == save_info->magic);
...@@ -1789,7 +1789,7 @@ xfs_da3_blk_unlink( ...@@ -1789,7 +1789,7 @@ xfs_da3_blk_unlink(
be32_to_cpu(drop_info->forw), be32_to_cpu(drop_info->forw),
-1, &bp, args->whichfork); -1, &bp, args->whichfork);
if (error) if (error)
return(error); return error;
ASSERT(bp != NULL); ASSERT(bp != NULL);
tmp_info = bp->b_addr; tmp_info = bp->b_addr;
ASSERT(tmp_info->magic == save_info->magic); ASSERT(tmp_info->magic == save_info->magic);
...@@ -1801,7 +1801,7 @@ xfs_da3_blk_unlink( ...@@ -1801,7 +1801,7 @@ xfs_da3_blk_unlink(
} }
xfs_trans_log_buf(args->trans, save_blk->bp, 0, sizeof(*save_info) - 1); xfs_trans_log_buf(args->trans, save_blk->bp, 0, sizeof(*save_info) - 1);
return(0); return 0;
} }
/* /*
...@@ -1859,9 +1859,9 @@ xfs_da3_path_shift( ...@@ -1859,9 +1859,9 @@ xfs_da3_path_shift(
} }
} }
if (level < 0) { if (level < 0) {
*result = XFS_ERROR(ENOENT); /* we're out of our tree */ *result = -ENOENT; /* we're out of our tree */
ASSERT(args->op_flags & XFS_DA_OP_OKNOENT); ASSERT(args->op_flags & XFS_DA_OP_OKNOENT);
return(0); return 0;
} }
/* /*
...@@ -1883,7 +1883,7 @@ xfs_da3_path_shift( ...@@ -1883,7 +1883,7 @@ xfs_da3_path_shift(
error = xfs_da3_node_read(args->trans, dp, blkno, -1, error = xfs_da3_node_read(args->trans, dp, blkno, -1,
&blk->bp, args->whichfork); &blk->bp, args->whichfork);
if (error) if (error)
return(error); return error;
info = blk->bp->b_addr; info = blk->bp->b_addr;
ASSERT(info->magic == cpu_to_be16(XFS_DA_NODE_MAGIC) || ASSERT(info->magic == cpu_to_be16(XFS_DA_NODE_MAGIC) ||
info->magic == cpu_to_be16(XFS_DA3_NODE_MAGIC) || info->magic == cpu_to_be16(XFS_DA3_NODE_MAGIC) ||
...@@ -2004,7 +2004,7 @@ xfs_da_grow_inode_int( ...@@ -2004,7 +2004,7 @@ xfs_da_grow_inode_int(
struct xfs_trans *tp = args->trans; struct xfs_trans *tp = args->trans;
struct xfs_inode *dp = args->dp; struct xfs_inode *dp = args->dp;
int w = args->whichfork; int w = args->whichfork;
xfs_drfsbno_t nblks = dp->i_d.di_nblocks; xfs_rfsblock_t nblks = dp->i_d.di_nblocks;
struct xfs_bmbt_irec map, *mapp; struct xfs_bmbt_irec map, *mapp;
int nmap, error, got, i, mapi; int nmap, error, got, i, mapi;
...@@ -2068,7 +2068,7 @@ xfs_da_grow_inode_int( ...@@ -2068,7 +2068,7 @@ xfs_da_grow_inode_int(
if (got != count || mapp[0].br_startoff != *bno || if (got != count || mapp[0].br_startoff != *bno ||
mapp[mapi - 1].br_startoff + mapp[mapi - 1].br_blockcount != mapp[mapi - 1].br_startoff + mapp[mapi - 1].br_blockcount !=
*bno + count) { *bno + count) {
error = XFS_ERROR(ENOSPC); error = -ENOSPC;
goto out_free_map; goto out_free_map;
} }
...@@ -2158,7 +2158,7 @@ xfs_da3_swap_lastblock( ...@@ -2158,7 +2158,7 @@ xfs_da3_swap_lastblock(
if (unlikely(lastoff == 0)) { if (unlikely(lastoff == 0)) {
XFS_ERROR_REPORT("xfs_da_swap_lastblock(1)", XFS_ERRLEVEL_LOW, XFS_ERROR_REPORT("xfs_da_swap_lastblock(1)", XFS_ERRLEVEL_LOW,
mp); mp);
return XFS_ERROR(EFSCORRUPTED); return -EFSCORRUPTED;
} }
/* /*
* Read the last block in the btree space. * Read the last block in the btree space.
...@@ -2209,7 +2209,7 @@ xfs_da3_swap_lastblock( ...@@ -2209,7 +2209,7 @@ xfs_da3_swap_lastblock(
sib_info->magic != dead_info->magic)) { sib_info->magic != dead_info->magic)) {
XFS_ERROR_REPORT("xfs_da_swap_lastblock(2)", XFS_ERROR_REPORT("xfs_da_swap_lastblock(2)",
XFS_ERRLEVEL_LOW, mp); XFS_ERRLEVEL_LOW, mp);
error = XFS_ERROR(EFSCORRUPTED); error = -EFSCORRUPTED;
goto done; goto done;
} }
sib_info->forw = cpu_to_be32(dead_blkno); sib_info->forw = cpu_to_be32(dead_blkno);
...@@ -2231,7 +2231,7 @@ xfs_da3_swap_lastblock( ...@@ -2231,7 +2231,7 @@ xfs_da3_swap_lastblock(
sib_info->magic != dead_info->magic)) { sib_info->magic != dead_info->magic)) {
XFS_ERROR_REPORT("xfs_da_swap_lastblock(3)", XFS_ERROR_REPORT("xfs_da_swap_lastblock(3)",
XFS_ERRLEVEL_LOW, mp); XFS_ERRLEVEL_LOW, mp);
error = XFS_ERROR(EFSCORRUPTED); error = -EFSCORRUPTED;
goto done; goto done;
} }
sib_info->back = cpu_to_be32(dead_blkno); sib_info->back = cpu_to_be32(dead_blkno);
...@@ -2254,7 +2254,7 @@ xfs_da3_swap_lastblock( ...@@ -2254,7 +2254,7 @@ xfs_da3_swap_lastblock(
if (level >= 0 && level != par_hdr.level + 1) { if (level >= 0 && level != par_hdr.level + 1) {
XFS_ERROR_REPORT("xfs_da_swap_lastblock(4)", XFS_ERROR_REPORT("xfs_da_swap_lastblock(4)",
XFS_ERRLEVEL_LOW, mp); XFS_ERRLEVEL_LOW, mp);
error = XFS_ERROR(EFSCORRUPTED); error = -EFSCORRUPTED;
goto done; goto done;
} }
level = par_hdr.level; level = par_hdr.level;
...@@ -2267,7 +2267,7 @@ xfs_da3_swap_lastblock( ...@@ -2267,7 +2267,7 @@ xfs_da3_swap_lastblock(
if (entno == par_hdr.count) { if (entno == par_hdr.count) {
XFS_ERROR_REPORT("xfs_da_swap_lastblock(5)", XFS_ERROR_REPORT("xfs_da_swap_lastblock(5)",
XFS_ERRLEVEL_LOW, mp); XFS_ERRLEVEL_LOW, mp);
error = XFS_ERROR(EFSCORRUPTED); error = -EFSCORRUPTED;
goto done; goto done;
} }
par_blkno = be32_to_cpu(btree[entno].before); par_blkno = be32_to_cpu(btree[entno].before);
...@@ -2294,7 +2294,7 @@ xfs_da3_swap_lastblock( ...@@ -2294,7 +2294,7 @@ xfs_da3_swap_lastblock(
if (unlikely(par_blkno == 0)) { if (unlikely(par_blkno == 0)) {
XFS_ERROR_REPORT("xfs_da_swap_lastblock(6)", XFS_ERROR_REPORT("xfs_da_swap_lastblock(6)",
XFS_ERRLEVEL_LOW, mp); XFS_ERRLEVEL_LOW, mp);
error = XFS_ERROR(EFSCORRUPTED); error = -EFSCORRUPTED;
goto done; goto done;
} }
error = xfs_da3_node_read(tp, dp, par_blkno, -1, &par_buf, w); error = xfs_da3_node_read(tp, dp, par_blkno, -1, &par_buf, w);
...@@ -2305,7 +2305,7 @@ xfs_da3_swap_lastblock( ...@@ -2305,7 +2305,7 @@ xfs_da3_swap_lastblock(
if (par_hdr.level != level) { if (par_hdr.level != level) {
XFS_ERROR_REPORT("xfs_da_swap_lastblock(7)", XFS_ERROR_REPORT("xfs_da_swap_lastblock(7)",
XFS_ERRLEVEL_LOW, mp); XFS_ERRLEVEL_LOW, mp);
error = XFS_ERROR(EFSCORRUPTED); error = -EFSCORRUPTED;
goto done; goto done;
} }
btree = dp->d_ops->node_tree_p(par_node); btree = dp->d_ops->node_tree_p(par_node);
...@@ -2359,7 +2359,7 @@ xfs_da_shrink_inode( ...@@ -2359,7 +2359,7 @@ xfs_da_shrink_inode(
error = xfs_bunmapi(tp, dp, dead_blkno, count, error = xfs_bunmapi(tp, dp, dead_blkno, count,
xfs_bmapi_aflag(w)|XFS_BMAPI_METADATA, xfs_bmapi_aflag(w)|XFS_BMAPI_METADATA,
0, args->firstblock, args->flist, &done); 0, args->firstblock, args->flist, &done);
if (error == ENOSPC) { if (error == -ENOSPC) {
if (w != XFS_DATA_FORK) if (w != XFS_DATA_FORK)
break; break;
error = xfs_da3_swap_lastblock(args, &dead_blkno, error = xfs_da3_swap_lastblock(args, &dead_blkno,
...@@ -2427,7 +2427,7 @@ xfs_buf_map_from_irec( ...@@ -2427,7 +2427,7 @@ xfs_buf_map_from_irec(
map = kmem_zalloc(nirecs * sizeof(struct xfs_buf_map), map = kmem_zalloc(nirecs * sizeof(struct xfs_buf_map),
KM_SLEEP | KM_NOFS); KM_SLEEP | KM_NOFS);
if (!map) if (!map)
return ENOMEM; return -ENOMEM;
*mapp = map; *mapp = map;
} }
...@@ -2500,8 +2500,8 @@ xfs_dabuf_map( ...@@ -2500,8 +2500,8 @@ xfs_dabuf_map(
} }
if (!xfs_da_map_covers_blocks(nirecs, irecs, bno, nfsb)) { if (!xfs_da_map_covers_blocks(nirecs, irecs, bno, nfsb)) {
error = mappedbno == -2 ? -1 : XFS_ERROR(EFSCORRUPTED); error = mappedbno == -2 ? -1 : -EFSCORRUPTED;
if (unlikely(error == EFSCORRUPTED)) { if (unlikely(error == -EFSCORRUPTED)) {
if (xfs_error_level >= XFS_ERRLEVEL_LOW) { if (xfs_error_level >= XFS_ERRLEVEL_LOW) {
int i; int i;
xfs_alert(mp, "%s: bno %lld dir: inode %lld", xfs_alert(mp, "%s: bno %lld dir: inode %lld",
...@@ -2561,7 +2561,7 @@ xfs_da_get_buf( ...@@ -2561,7 +2561,7 @@ xfs_da_get_buf(
bp = xfs_trans_get_buf_map(trans, dp->i_mount->m_ddev_targp, bp = xfs_trans_get_buf_map(trans, dp->i_mount->m_ddev_targp,
mapp, nmap, 0); mapp, nmap, 0);
error = bp ? bp->b_error : XFS_ERROR(EIO); error = bp ? bp->b_error : -EIO;
if (error) { if (error) {
xfs_trans_brelse(trans, bp); xfs_trans_brelse(trans, bp);
goto out_free; goto out_free;
......
...@@ -108,7 +108,7 @@ xfs_da_mount( ...@@ -108,7 +108,7 @@ xfs_da_mount(
if (!mp->m_dir_geo || !mp->m_attr_geo) { if (!mp->m_dir_geo || !mp->m_attr_geo) {
kmem_free(mp->m_dir_geo); kmem_free(mp->m_dir_geo);
kmem_free(mp->m_attr_geo); kmem_free(mp->m_attr_geo);
return ENOMEM; return -ENOMEM;
} }
/* set up directory geometry */ /* set up directory geometry */
...@@ -202,7 +202,7 @@ xfs_dir_ino_validate( ...@@ -202,7 +202,7 @@ xfs_dir_ino_validate(
xfs_warn(mp, "Invalid inode number 0x%Lx", xfs_warn(mp, "Invalid inode number 0x%Lx",
(unsigned long long) ino); (unsigned long long) ino);
XFS_ERROR_REPORT("xfs_dir_ino_validate", XFS_ERRLEVEL_LOW, mp); XFS_ERROR_REPORT("xfs_dir_ino_validate", XFS_ERRLEVEL_LOW, mp);
return XFS_ERROR(EFSCORRUPTED); return -EFSCORRUPTED;
} }
return 0; return 0;
} }
...@@ -226,7 +226,7 @@ xfs_dir_init( ...@@ -226,7 +226,7 @@ xfs_dir_init(
args = kmem_zalloc(sizeof(*args), KM_SLEEP | KM_NOFS); args = kmem_zalloc(sizeof(*args), KM_SLEEP | KM_NOFS);
if (!args) if (!args)
return ENOMEM; return -ENOMEM;
args->geo = dp->i_mount->m_dir_geo; args->geo = dp->i_mount->m_dir_geo;
args->dp = dp; args->dp = dp;
...@@ -261,7 +261,7 @@ xfs_dir_createname( ...@@ -261,7 +261,7 @@ xfs_dir_createname(
args = kmem_zalloc(sizeof(*args), KM_SLEEP | KM_NOFS); args = kmem_zalloc(sizeof(*args), KM_SLEEP | KM_NOFS);
if (!args) if (!args)
return ENOMEM; return -ENOMEM;
args->geo = dp->i_mount->m_dir_geo; args->geo = dp->i_mount->m_dir_geo;
args->name = name->name; args->name = name->name;
...@@ -314,18 +314,18 @@ xfs_dir_cilookup_result( ...@@ -314,18 +314,18 @@ xfs_dir_cilookup_result(
int len) int len)
{ {
if (args->cmpresult == XFS_CMP_DIFFERENT) if (args->cmpresult == XFS_CMP_DIFFERENT)
return ENOENT; return -ENOENT;
if (args->cmpresult != XFS_CMP_CASE || if (args->cmpresult != XFS_CMP_CASE ||
!(args->op_flags & XFS_DA_OP_CILOOKUP)) !(args->op_flags & XFS_DA_OP_CILOOKUP))
return EEXIST; return -EEXIST;
args->value = kmem_alloc(len, KM_NOFS | KM_MAYFAIL); args->value = kmem_alloc(len, KM_NOFS | KM_MAYFAIL);
if (!args->value) if (!args->value)
return ENOMEM; return -ENOMEM;
memcpy(args->value, name, len); memcpy(args->value, name, len);
args->valuelen = len; args->valuelen = len;
return EEXIST; return -EEXIST;
} }
/* /*
...@@ -392,7 +392,7 @@ xfs_dir_lookup( ...@@ -392,7 +392,7 @@ xfs_dir_lookup(
rval = xfs_dir2_node_lookup(args); rval = xfs_dir2_node_lookup(args);
out_check_rval: out_check_rval:
if (rval == EEXIST) if (rval == -EEXIST)
rval = 0; rval = 0;
if (!rval) { if (!rval) {
*inum = args->inumber; *inum = args->inumber;
...@@ -428,7 +428,7 @@ xfs_dir_removename( ...@@ -428,7 +428,7 @@ xfs_dir_removename(
args = kmem_zalloc(sizeof(*args), KM_SLEEP | KM_NOFS); args = kmem_zalloc(sizeof(*args), KM_SLEEP | KM_NOFS);
if (!args) if (!args)
return ENOMEM; return -ENOMEM;
args->geo = dp->i_mount->m_dir_geo; args->geo = dp->i_mount->m_dir_geo;
args->name = name->name; args->name = name->name;
...@@ -493,7 +493,7 @@ xfs_dir_replace( ...@@ -493,7 +493,7 @@ xfs_dir_replace(
args = kmem_zalloc(sizeof(*args), KM_SLEEP | KM_NOFS); args = kmem_zalloc(sizeof(*args), KM_SLEEP | KM_NOFS);
if (!args) if (!args)
return ENOMEM; return -ENOMEM;
args->geo = dp->i_mount->m_dir_geo; args->geo = dp->i_mount->m_dir_geo;
args->name = name->name; args->name = name->name;
...@@ -555,7 +555,7 @@ xfs_dir_canenter( ...@@ -555,7 +555,7 @@ xfs_dir_canenter(
args = kmem_zalloc(sizeof(*args), KM_SLEEP | KM_NOFS); args = kmem_zalloc(sizeof(*args), KM_SLEEP | KM_NOFS);
if (!args) if (!args)
return ENOMEM; return -ENOMEM;
args->geo = dp->i_mount->m_dir_geo; args->geo = dp->i_mount->m_dir_geo;
args->name = name->name; args->name = name->name;
......
...@@ -91,9 +91,9 @@ xfs_dir3_block_read_verify( ...@@ -91,9 +91,9 @@ xfs_dir3_block_read_verify(
if (xfs_sb_version_hascrc(&mp->m_sb) && if (xfs_sb_version_hascrc(&mp->m_sb) &&
!xfs_buf_verify_cksum(bp, XFS_DIR3_DATA_CRC_OFF)) !xfs_buf_verify_cksum(bp, XFS_DIR3_DATA_CRC_OFF))
xfs_buf_ioerror(bp, EFSBADCRC); xfs_buf_ioerror(bp, -EFSBADCRC);
else if (!xfs_dir3_block_verify(bp)) else if (!xfs_dir3_block_verify(bp))
xfs_buf_ioerror(bp, EFSCORRUPTED); xfs_buf_ioerror(bp, -EFSCORRUPTED);
if (bp->b_error) if (bp->b_error)
xfs_verifier_error(bp); xfs_verifier_error(bp);
...@@ -108,7 +108,7 @@ xfs_dir3_block_write_verify( ...@@ -108,7 +108,7 @@ xfs_dir3_block_write_verify(
struct xfs_dir3_blk_hdr *hdr3 = bp->b_addr; struct xfs_dir3_blk_hdr *hdr3 = bp->b_addr;
if (!xfs_dir3_block_verify(bp)) { if (!xfs_dir3_block_verify(bp)) {
xfs_buf_ioerror(bp, EFSCORRUPTED); xfs_buf_ioerror(bp, -EFSCORRUPTED);
xfs_verifier_error(bp); xfs_verifier_error(bp);
return; return;
} }
...@@ -392,7 +392,7 @@ xfs_dir2_block_addname( ...@@ -392,7 +392,7 @@ xfs_dir2_block_addname(
if (args->op_flags & XFS_DA_OP_JUSTCHECK) { if (args->op_flags & XFS_DA_OP_JUSTCHECK) {
xfs_trans_brelse(tp, bp); xfs_trans_brelse(tp, bp);
if (!dup) if (!dup)
return XFS_ERROR(ENOSPC); return -ENOSPC;
return 0; return 0;
} }
...@@ -402,7 +402,7 @@ xfs_dir2_block_addname( ...@@ -402,7 +402,7 @@ xfs_dir2_block_addname(
if (!dup) { if (!dup) {
/* Don't have a space reservation: return no-space. */ /* Don't have a space reservation: return no-space. */
if (args->total == 0) if (args->total == 0)
return XFS_ERROR(ENOSPC); return -ENOSPC;
/* /*
* Convert to the next larger format. * Convert to the next larger format.
* Then add the new entry in that format. * Then add the new entry in that format.
...@@ -647,7 +647,7 @@ xfs_dir2_block_lookup( ...@@ -647,7 +647,7 @@ xfs_dir2_block_lookup(
args->filetype = dp->d_ops->data_get_ftype(dep); args->filetype = dp->d_ops->data_get_ftype(dep);
error = xfs_dir_cilookup_result(args, dep->name, dep->namelen); error = xfs_dir_cilookup_result(args, dep->name, dep->namelen);
xfs_trans_brelse(args->trans, bp); xfs_trans_brelse(args->trans, bp);
return XFS_ERROR(error); return error;
} }
/* /*
...@@ -703,7 +703,7 @@ xfs_dir2_block_lookup_int( ...@@ -703,7 +703,7 @@ xfs_dir2_block_lookup_int(
if (low > high) { if (low > high) {
ASSERT(args->op_flags & XFS_DA_OP_OKNOENT); ASSERT(args->op_flags & XFS_DA_OP_OKNOENT);
xfs_trans_brelse(tp, bp); xfs_trans_brelse(tp, bp);
return XFS_ERROR(ENOENT); return -ENOENT;
} }
} }
/* /*
...@@ -751,7 +751,7 @@ xfs_dir2_block_lookup_int( ...@@ -751,7 +751,7 @@ xfs_dir2_block_lookup_int(
* No match, release the buffer and return ENOENT. * No match, release the buffer and return ENOENT.
*/ */
xfs_trans_brelse(tp, bp); xfs_trans_brelse(tp, bp);
return XFS_ERROR(ENOENT); return -ENOENT;
} }
/* /*
...@@ -1091,7 +1091,7 @@ xfs_dir2_sf_to_block( ...@@ -1091,7 +1091,7 @@ xfs_dir2_sf_to_block(
*/ */
if (dp->i_d.di_size < offsetof(xfs_dir2_sf_hdr_t, parent)) { if (dp->i_d.di_size < offsetof(xfs_dir2_sf_hdr_t, parent)) {
ASSERT(XFS_FORCED_SHUTDOWN(mp)); ASSERT(XFS_FORCED_SHUTDOWN(mp));
return XFS_ERROR(EIO); return -EIO;
} }
oldsfp = (xfs_dir2_sf_hdr_t *)ifp->if_u1.if_data; oldsfp = (xfs_dir2_sf_hdr_t *)ifp->if_u1.if_data;
......
...@@ -100,7 +100,7 @@ __xfs_dir3_data_check( ...@@ -100,7 +100,7 @@ __xfs_dir3_data_check(
break; break;
default: default:
XFS_ERROR_REPORT("Bad Magic", XFS_ERRLEVEL_LOW, mp); XFS_ERROR_REPORT("Bad Magic", XFS_ERRLEVEL_LOW, mp);
return EFSCORRUPTED; return -EFSCORRUPTED;
} }
/* /*
...@@ -256,7 +256,7 @@ xfs_dir3_data_reada_verify( ...@@ -256,7 +256,7 @@ xfs_dir3_data_reada_verify(
xfs_dir3_data_verify(bp); xfs_dir3_data_verify(bp);
return; return;
default: default:
xfs_buf_ioerror(bp, EFSCORRUPTED); xfs_buf_ioerror(bp, -EFSCORRUPTED);
xfs_verifier_error(bp); xfs_verifier_error(bp);
break; break;
} }
...@@ -270,9 +270,9 @@ xfs_dir3_data_read_verify( ...@@ -270,9 +270,9 @@ xfs_dir3_data_read_verify(
if (xfs_sb_version_hascrc(&mp->m_sb) && if (xfs_sb_version_hascrc(&mp->m_sb) &&
!xfs_buf_verify_cksum(bp, XFS_DIR3_DATA_CRC_OFF)) !xfs_buf_verify_cksum(bp, XFS_DIR3_DATA_CRC_OFF))
xfs_buf_ioerror(bp, EFSBADCRC); xfs_buf_ioerror(bp, -EFSBADCRC);
else if (!xfs_dir3_data_verify(bp)) else if (!xfs_dir3_data_verify(bp))
xfs_buf_ioerror(bp, EFSCORRUPTED); xfs_buf_ioerror(bp, -EFSCORRUPTED);
if (bp->b_error) if (bp->b_error)
xfs_verifier_error(bp); xfs_verifier_error(bp);
...@@ -287,7 +287,7 @@ xfs_dir3_data_write_verify( ...@@ -287,7 +287,7 @@ xfs_dir3_data_write_verify(
struct xfs_dir3_blk_hdr *hdr3 = bp->b_addr; struct xfs_dir3_blk_hdr *hdr3 = bp->b_addr;
if (!xfs_dir3_data_verify(bp)) { if (!xfs_dir3_data_verify(bp)) {
xfs_buf_ioerror(bp, EFSCORRUPTED); xfs_buf_ioerror(bp, -EFSCORRUPTED);
xfs_verifier_error(bp); xfs_verifier_error(bp);
return; return;
} }
......
...@@ -183,9 +183,9 @@ __read_verify( ...@@ -183,9 +183,9 @@ __read_verify(
if (xfs_sb_version_hascrc(&mp->m_sb) && if (xfs_sb_version_hascrc(&mp->m_sb) &&
!xfs_buf_verify_cksum(bp, XFS_DIR3_LEAF_CRC_OFF)) !xfs_buf_verify_cksum(bp, XFS_DIR3_LEAF_CRC_OFF))
xfs_buf_ioerror(bp, EFSBADCRC); xfs_buf_ioerror(bp, -EFSBADCRC);
else if (!xfs_dir3_leaf_verify(bp, magic)) else if (!xfs_dir3_leaf_verify(bp, magic))
xfs_buf_ioerror(bp, EFSCORRUPTED); xfs_buf_ioerror(bp, -EFSCORRUPTED);
if (bp->b_error) if (bp->b_error)
xfs_verifier_error(bp); xfs_verifier_error(bp);
...@@ -201,7 +201,7 @@ __write_verify( ...@@ -201,7 +201,7 @@ __write_verify(
struct xfs_dir3_leaf_hdr *hdr3 = bp->b_addr; struct xfs_dir3_leaf_hdr *hdr3 = bp->b_addr;
if (!xfs_dir3_leaf_verify(bp, magic)) { if (!xfs_dir3_leaf_verify(bp, magic)) {
xfs_buf_ioerror(bp, EFSCORRUPTED); xfs_buf_ioerror(bp, -EFSCORRUPTED);
xfs_verifier_error(bp); xfs_verifier_error(bp);
return; return;
} }
...@@ -731,7 +731,7 @@ xfs_dir2_leaf_addname( ...@@ -731,7 +731,7 @@ xfs_dir2_leaf_addname(
if ((args->op_flags & XFS_DA_OP_JUSTCHECK) || if ((args->op_flags & XFS_DA_OP_JUSTCHECK) ||
args->total == 0) { args->total == 0) {
xfs_trans_brelse(tp, lbp); xfs_trans_brelse(tp, lbp);
return XFS_ERROR(ENOSPC); return -ENOSPC;
} }
/* /*
* Convert to node form. * Convert to node form.
...@@ -755,7 +755,7 @@ xfs_dir2_leaf_addname( ...@@ -755,7 +755,7 @@ xfs_dir2_leaf_addname(
*/ */
if (args->op_flags & XFS_DA_OP_JUSTCHECK) { if (args->op_flags & XFS_DA_OP_JUSTCHECK) {
xfs_trans_brelse(tp, lbp); xfs_trans_brelse(tp, lbp);
return use_block == -1 ? XFS_ERROR(ENOSPC) : 0; return use_block == -1 ? -ENOSPC : 0;
} }
/* /*
* If no allocations are allowed, return now before we've * If no allocations are allowed, return now before we've
...@@ -763,7 +763,7 @@ xfs_dir2_leaf_addname( ...@@ -763,7 +763,7 @@ xfs_dir2_leaf_addname(
*/ */
if (args->total == 0 && use_block == -1) { if (args->total == 0 && use_block == -1) {
xfs_trans_brelse(tp, lbp); xfs_trans_brelse(tp, lbp);
return XFS_ERROR(ENOSPC); return -ENOSPC;
} }
/* /*
* Need to compact the leaf entries, removing stale ones. * Need to compact the leaf entries, removing stale ones.
...@@ -1198,7 +1198,7 @@ xfs_dir2_leaf_lookup( ...@@ -1198,7 +1198,7 @@ xfs_dir2_leaf_lookup(
error = xfs_dir_cilookup_result(args, dep->name, dep->namelen); error = xfs_dir_cilookup_result(args, dep->name, dep->namelen);
xfs_trans_brelse(tp, dbp); xfs_trans_brelse(tp, dbp);
xfs_trans_brelse(tp, lbp); xfs_trans_brelse(tp, lbp);
return XFS_ERROR(error); return error;
} }
/* /*
...@@ -1327,13 +1327,13 @@ xfs_dir2_leaf_lookup_int( ...@@ -1327,13 +1327,13 @@ xfs_dir2_leaf_lookup_int(
return 0; return 0;
} }
/* /*
* No match found, return ENOENT. * No match found, return -ENOENT.
*/ */
ASSERT(cidb == -1); ASSERT(cidb == -1);
if (dbp) if (dbp)
xfs_trans_brelse(tp, dbp); xfs_trans_brelse(tp, dbp);
xfs_trans_brelse(tp, lbp); xfs_trans_brelse(tp, lbp);
return XFS_ERROR(ENOENT); return -ENOENT;
} }
/* /*
...@@ -1440,7 +1440,7 @@ xfs_dir2_leaf_removename( ...@@ -1440,7 +1440,7 @@ xfs_dir2_leaf_removename(
* Just go on, returning success, leaving the * Just go on, returning success, leaving the
* empty block in place. * empty block in place.
*/ */
if (error == ENOSPC && args->total == 0) if (error == -ENOSPC && args->total == 0)
error = 0; error = 0;
xfs_dir3_leaf_check(dp, lbp); xfs_dir3_leaf_check(dp, lbp);
return error; return error;
...@@ -1641,7 +1641,7 @@ xfs_dir2_leaf_trim_data( ...@@ -1641,7 +1641,7 @@ xfs_dir2_leaf_trim_data(
* Get rid of the data block. * Get rid of the data block.
*/ */
if ((error = xfs_dir2_shrink_inode(args, db, dbp))) { if ((error = xfs_dir2_shrink_inode(args, db, dbp))) {
ASSERT(error != ENOSPC); ASSERT(error != -ENOSPC);
xfs_trans_brelse(tp, dbp); xfs_trans_brelse(tp, dbp);
return error; return error;
} }
...@@ -1815,7 +1815,7 @@ xfs_dir2_node_to_leaf( ...@@ -1815,7 +1815,7 @@ xfs_dir2_node_to_leaf(
* punching out the middle of an extent, and this is an * punching out the middle of an extent, and this is an
* isolated block. * isolated block.
*/ */
ASSERT(error != ENOSPC); ASSERT(error != -ENOSPC);
return error; return error;
} }
fbp = NULL; fbp = NULL;
......
...@@ -117,9 +117,9 @@ xfs_dir3_free_read_verify( ...@@ -117,9 +117,9 @@ xfs_dir3_free_read_verify(
if (xfs_sb_version_hascrc(&mp->m_sb) && if (xfs_sb_version_hascrc(&mp->m_sb) &&
!xfs_buf_verify_cksum(bp, XFS_DIR3_FREE_CRC_OFF)) !xfs_buf_verify_cksum(bp, XFS_DIR3_FREE_CRC_OFF))
xfs_buf_ioerror(bp, EFSBADCRC); xfs_buf_ioerror(bp, -EFSBADCRC);
else if (!xfs_dir3_free_verify(bp)) else if (!xfs_dir3_free_verify(bp))
xfs_buf_ioerror(bp, EFSCORRUPTED); xfs_buf_ioerror(bp, -EFSCORRUPTED);
if (bp->b_error) if (bp->b_error)
xfs_verifier_error(bp); xfs_verifier_error(bp);
...@@ -134,7 +134,7 @@ xfs_dir3_free_write_verify( ...@@ -134,7 +134,7 @@ xfs_dir3_free_write_verify(
struct xfs_dir3_blk_hdr *hdr3 = bp->b_addr; struct xfs_dir3_blk_hdr *hdr3 = bp->b_addr;
if (!xfs_dir3_free_verify(bp)) { if (!xfs_dir3_free_verify(bp)) {
xfs_buf_ioerror(bp, EFSCORRUPTED); xfs_buf_ioerror(bp, -EFSCORRUPTED);
xfs_verifier_error(bp); xfs_verifier_error(bp);
return; return;
} }
...@@ -406,7 +406,7 @@ xfs_dir2_leafn_add( ...@@ -406,7 +406,7 @@ xfs_dir2_leafn_add(
* into other peoples memory * into other peoples memory
*/ */
if (index < 0) if (index < 0)
return XFS_ERROR(EFSCORRUPTED); return -EFSCORRUPTED;
/* /*
* If there are already the maximum number of leaf entries in * If there are already the maximum number of leaf entries in
...@@ -417,7 +417,7 @@ xfs_dir2_leafn_add( ...@@ -417,7 +417,7 @@ xfs_dir2_leafn_add(
if (leafhdr.count == dp->d_ops->leaf_max_ents(args->geo)) { if (leafhdr.count == dp->d_ops->leaf_max_ents(args->geo)) {
if (!leafhdr.stale) if (!leafhdr.stale)
return XFS_ERROR(ENOSPC); return -ENOSPC;
compact = leafhdr.stale > 1; compact = leafhdr.stale > 1;
} else } else
compact = 0; compact = 0;
...@@ -629,7 +629,7 @@ xfs_dir2_leafn_lookup_for_addname( ...@@ -629,7 +629,7 @@ xfs_dir2_leafn_lookup_for_addname(
XFS_ERRLEVEL_LOW, mp); XFS_ERRLEVEL_LOW, mp);
if (curfdb != newfdb) if (curfdb != newfdb)
xfs_trans_brelse(tp, curbp); xfs_trans_brelse(tp, curbp);
return XFS_ERROR(EFSCORRUPTED); return -EFSCORRUPTED;
} }
curfdb = newfdb; curfdb = newfdb;
if (be16_to_cpu(bests[fi]) >= length) if (be16_to_cpu(bests[fi]) >= length)
...@@ -660,7 +660,7 @@ xfs_dir2_leafn_lookup_for_addname( ...@@ -660,7 +660,7 @@ xfs_dir2_leafn_lookup_for_addname(
* Return the index, that will be the insertion point. * Return the index, that will be the insertion point.
*/ */
*indexp = index; *indexp = index;
return XFS_ERROR(ENOENT); return -ENOENT;
} }
/* /*
...@@ -789,7 +789,7 @@ xfs_dir2_leafn_lookup_for_entry( ...@@ -789,7 +789,7 @@ xfs_dir2_leafn_lookup_for_entry(
curbp->b_ops = &xfs_dir3_data_buf_ops; curbp->b_ops = &xfs_dir3_data_buf_ops;
xfs_trans_buf_set_type(tp, curbp, XFS_BLFT_DIR_DATA_BUF); xfs_trans_buf_set_type(tp, curbp, XFS_BLFT_DIR_DATA_BUF);
if (cmp == XFS_CMP_EXACT) if (cmp == XFS_CMP_EXACT)
return XFS_ERROR(EEXIST); return -EEXIST;
} }
} }
ASSERT(index == leafhdr.count || (args->op_flags & XFS_DA_OP_OKNOENT)); ASSERT(index == leafhdr.count || (args->op_flags & XFS_DA_OP_OKNOENT));
...@@ -812,7 +812,7 @@ xfs_dir2_leafn_lookup_for_entry( ...@@ -812,7 +812,7 @@ xfs_dir2_leafn_lookup_for_entry(
state->extravalid = 0; state->extravalid = 0;
} }
*indexp = index; *indexp = index;
return XFS_ERROR(ENOENT); return -ENOENT;
} }
/* /*
...@@ -1133,7 +1133,7 @@ xfs_dir3_data_block_free( ...@@ -1133,7 +1133,7 @@ xfs_dir3_data_block_free(
if (error == 0) { if (error == 0) {
fbp = NULL; fbp = NULL;
logfree = 0; logfree = 0;
} else if (error != ENOSPC || args->total != 0) } else if (error != -ENOSPC || args->total != 0)
return error; return error;
/* /*
* It's possible to get ENOSPC if there is no * It's possible to get ENOSPC if there is no
...@@ -1287,7 +1287,7 @@ xfs_dir2_leafn_remove( ...@@ -1287,7 +1287,7 @@ xfs_dir2_leafn_remove(
* In this case just drop the buffer and some one else * In this case just drop the buffer and some one else
* will eventually get rid of the empty block. * will eventually get rid of the empty block.
*/ */
else if (!(error == ENOSPC && args->total == 0)) else if (!(error == -ENOSPC && args->total == 0))
return error; return error;
} }
/* /*
...@@ -1599,7 +1599,7 @@ xfs_dir2_node_addname( ...@@ -1599,7 +1599,7 @@ xfs_dir2_node_addname(
error = xfs_da3_node_lookup_int(state, &rval); error = xfs_da3_node_lookup_int(state, &rval);
if (error) if (error)
rval = error; rval = error;
if (rval != ENOENT) { if (rval != -ENOENT) {
goto done; goto done;
} }
/* /*
...@@ -1628,7 +1628,7 @@ xfs_dir2_node_addname( ...@@ -1628,7 +1628,7 @@ xfs_dir2_node_addname(
* It didn't work, we need to split the leaf block. * It didn't work, we need to split the leaf block.
*/ */
if (args->total == 0) { if (args->total == 0) {
ASSERT(rval == ENOSPC); ASSERT(rval == -ENOSPC);
goto done; goto done;
} }
/* /*
...@@ -1815,7 +1815,7 @@ xfs_dir2_node_addname_int( ...@@ -1815,7 +1815,7 @@ xfs_dir2_node_addname_int(
* Not allowed to allocate, return failure. * Not allowed to allocate, return failure.
*/ */
if ((args->op_flags & XFS_DA_OP_JUSTCHECK) || args->total == 0) if ((args->op_flags & XFS_DA_OP_JUSTCHECK) || args->total == 0)
return XFS_ERROR(ENOSPC); return -ENOSPC;
/* /*
* Allocate and initialize the new data block. * Allocate and initialize the new data block.
...@@ -1876,7 +1876,7 @@ xfs_dir2_node_addname_int( ...@@ -1876,7 +1876,7 @@ xfs_dir2_node_addname_int(
} }
XFS_ERROR_REPORT("xfs_dir2_node_addname_int", XFS_ERROR_REPORT("xfs_dir2_node_addname_int",
XFS_ERRLEVEL_LOW, mp); XFS_ERRLEVEL_LOW, mp);
return XFS_ERROR(EFSCORRUPTED); return -EFSCORRUPTED;
} }
/* /*
...@@ -2042,8 +2042,8 @@ xfs_dir2_node_lookup( ...@@ -2042,8 +2042,8 @@ xfs_dir2_node_lookup(
error = xfs_da3_node_lookup_int(state, &rval); error = xfs_da3_node_lookup_int(state, &rval);
if (error) if (error)
rval = error; rval = error;
else if (rval == ENOENT && args->cmpresult == XFS_CMP_CASE) { else if (rval == -ENOENT && args->cmpresult == XFS_CMP_CASE) {
/* If a CI match, dup the actual name and return EEXIST */ /* If a CI match, dup the actual name and return -EEXIST */
xfs_dir2_data_entry_t *dep; xfs_dir2_data_entry_t *dep;
dep = (xfs_dir2_data_entry_t *) dep = (xfs_dir2_data_entry_t *)
...@@ -2096,7 +2096,7 @@ xfs_dir2_node_removename( ...@@ -2096,7 +2096,7 @@ xfs_dir2_node_removename(
goto out_free; goto out_free;
/* Didn't find it, upper layer screwed up. */ /* Didn't find it, upper layer screwed up. */
if (rval != EEXIST) { if (rval != -EEXIST) {
error = rval; error = rval;
goto out_free; goto out_free;
} }
...@@ -2169,7 +2169,7 @@ xfs_dir2_node_replace( ...@@ -2169,7 +2169,7 @@ xfs_dir2_node_replace(
* It should be found, since the vnodeops layer has looked it up * It should be found, since the vnodeops layer has looked it up
* and locked it. But paranoia is good. * and locked it. But paranoia is good.
*/ */
if (rval == EEXIST) { if (rval == -EEXIST) {
struct xfs_dir2_leaf_entry *ents; struct xfs_dir2_leaf_entry *ents;
/* /*
* Find the leaf entry. * Find the leaf entry.
...@@ -2272,7 +2272,7 @@ xfs_dir2_node_trim_free( ...@@ -2272,7 +2272,7 @@ xfs_dir2_node_trim_free(
* space reservation, when breaking up an extent into two * space reservation, when breaking up an extent into two
* pieces. This is the last block of an extent. * pieces. This is the last block of an extent.
*/ */
ASSERT(error != ENOSPC); ASSERT(error != -ENOSPC);
xfs_trans_brelse(tp, bp); xfs_trans_brelse(tp, bp);
return error; return error;
} }
......
...@@ -51,10 +51,9 @@ static void xfs_dir2_sf_check(xfs_da_args_t *args); ...@@ -51,10 +51,9 @@ static void xfs_dir2_sf_check(xfs_da_args_t *args);
#else #else
#define xfs_dir2_sf_check(args) #define xfs_dir2_sf_check(args)
#endif /* DEBUG */ #endif /* DEBUG */
#if XFS_BIG_INUMS
static void xfs_dir2_sf_toino4(xfs_da_args_t *args); static void xfs_dir2_sf_toino4(xfs_da_args_t *args);
static void xfs_dir2_sf_toino8(xfs_da_args_t *args); static void xfs_dir2_sf_toino8(xfs_da_args_t *args);
#endif /* XFS_BIG_INUMS */
/* /*
* Given a block directory (dp/block), calculate its size as a shortform (sf) * Given a block directory (dp/block), calculate its size as a shortform (sf)
...@@ -117,10 +116,10 @@ xfs_dir2_block_sfsize( ...@@ -117,10 +116,10 @@ xfs_dir2_block_sfsize(
isdotdot = isdotdot =
dep->namelen == 2 && dep->namelen == 2 &&
dep->name[0] == '.' && dep->name[1] == '.'; dep->name[0] == '.' && dep->name[1] == '.';
#if XFS_BIG_INUMS
if (!isdot) if (!isdot)
i8count += be64_to_cpu(dep->inumber) > XFS_DIR2_MAX_SHORT_INUM; i8count += be64_to_cpu(dep->inumber) > XFS_DIR2_MAX_SHORT_INUM;
#endif
/* take into account the file type field */ /* take into account the file type field */
if (!isdot && !isdotdot) { if (!isdot && !isdotdot) {
count++; count++;
...@@ -251,7 +250,7 @@ xfs_dir2_block_to_sf( ...@@ -251,7 +250,7 @@ xfs_dir2_block_to_sf(
logflags = XFS_ILOG_CORE; logflags = XFS_ILOG_CORE;
error = xfs_dir2_shrink_inode(args, args->geo->datablk, bp); error = xfs_dir2_shrink_inode(args, args->geo->datablk, bp);
if (error) { if (error) {
ASSERT(error != ENOSPC); ASSERT(error != -ENOSPC);
goto out; goto out;
} }
...@@ -299,7 +298,7 @@ xfs_dir2_sf_addname( ...@@ -299,7 +298,7 @@ xfs_dir2_sf_addname(
trace_xfs_dir2_sf_addname(args); trace_xfs_dir2_sf_addname(args);
ASSERT(xfs_dir2_sf_lookup(args) == ENOENT); ASSERT(xfs_dir2_sf_lookup(args) == -ENOENT);
dp = args->dp; dp = args->dp;
ASSERT(dp->i_df.if_flags & XFS_IFINLINE); ASSERT(dp->i_df.if_flags & XFS_IFINLINE);
/* /*
...@@ -307,7 +306,7 @@ xfs_dir2_sf_addname( ...@@ -307,7 +306,7 @@ xfs_dir2_sf_addname(
*/ */
if (dp->i_d.di_size < offsetof(xfs_dir2_sf_hdr_t, parent)) { if (dp->i_d.di_size < offsetof(xfs_dir2_sf_hdr_t, parent)) {
ASSERT(XFS_FORCED_SHUTDOWN(dp->i_mount)); ASSERT(XFS_FORCED_SHUTDOWN(dp->i_mount));
return XFS_ERROR(EIO); return -EIO;
} }
ASSERT(dp->i_df.if_bytes == dp->i_d.di_size); ASSERT(dp->i_df.if_bytes == dp->i_d.di_size);
ASSERT(dp->i_df.if_u1.if_data != NULL); ASSERT(dp->i_df.if_u1.if_data != NULL);
...@@ -318,7 +317,7 @@ xfs_dir2_sf_addname( ...@@ -318,7 +317,7 @@ xfs_dir2_sf_addname(
*/ */
incr_isize = dp->d_ops->sf_entsize(sfp, args->namelen); incr_isize = dp->d_ops->sf_entsize(sfp, args->namelen);
objchange = 0; objchange = 0;
#if XFS_BIG_INUMS
/* /*
* Do we have to change to 8 byte inodes? * Do we have to change to 8 byte inodes?
*/ */
...@@ -332,7 +331,7 @@ xfs_dir2_sf_addname( ...@@ -332,7 +331,7 @@ xfs_dir2_sf_addname(
(uint)sizeof(xfs_dir2_ino4_t)); (uint)sizeof(xfs_dir2_ino4_t));
objchange = 1; objchange = 1;
} }
#endif
new_isize = (int)dp->i_d.di_size + incr_isize; new_isize = (int)dp->i_d.di_size + incr_isize;
/* /*
* Won't fit as shortform any more (due to size), * Won't fit as shortform any more (due to size),
...@@ -345,7 +344,7 @@ xfs_dir2_sf_addname( ...@@ -345,7 +344,7 @@ xfs_dir2_sf_addname(
* Just checking or no space reservation, it doesn't fit. * Just checking or no space reservation, it doesn't fit.
*/ */
if ((args->op_flags & XFS_DA_OP_JUSTCHECK) || args->total == 0) if ((args->op_flags & XFS_DA_OP_JUSTCHECK) || args->total == 0)
return XFS_ERROR(ENOSPC); return -ENOSPC;
/* /*
* Convert to block form then add the name. * Convert to block form then add the name.
*/ */
...@@ -370,10 +369,8 @@ xfs_dir2_sf_addname( ...@@ -370,10 +369,8 @@ xfs_dir2_sf_addname(
*/ */
else { else {
ASSERT(pick == 2); ASSERT(pick == 2);
#if XFS_BIG_INUMS
if (objchange) if (objchange)
xfs_dir2_sf_toino8(args); xfs_dir2_sf_toino8(args);
#endif
xfs_dir2_sf_addname_hard(args, objchange, new_isize); xfs_dir2_sf_addname_hard(args, objchange, new_isize);
} }
xfs_trans_log_inode(args->trans, dp, XFS_ILOG_CORE | XFS_ILOG_DDATA); xfs_trans_log_inode(args->trans, dp, XFS_ILOG_CORE | XFS_ILOG_DDATA);
...@@ -425,10 +422,8 @@ xfs_dir2_sf_addname_easy( ...@@ -425,10 +422,8 @@ xfs_dir2_sf_addname_easy(
* Update the header and inode. * Update the header and inode.
*/ */
sfp->count++; sfp->count++;
#if XFS_BIG_INUMS
if (args->inumber > XFS_DIR2_MAX_SHORT_INUM) if (args->inumber > XFS_DIR2_MAX_SHORT_INUM)
sfp->i8count++; sfp->i8count++;
#endif
dp->i_d.di_size = new_isize; dp->i_d.di_size = new_isize;
xfs_dir2_sf_check(args); xfs_dir2_sf_check(args);
} }
...@@ -516,10 +511,8 @@ xfs_dir2_sf_addname_hard( ...@@ -516,10 +511,8 @@ xfs_dir2_sf_addname_hard(
dp->d_ops->sf_put_ino(sfp, sfep, args->inumber); dp->d_ops->sf_put_ino(sfp, sfep, args->inumber);
dp->d_ops->sf_put_ftype(sfep, args->filetype); dp->d_ops->sf_put_ftype(sfep, args->filetype);
sfp->count++; sfp->count++;
#if XFS_BIG_INUMS
if (args->inumber > XFS_DIR2_MAX_SHORT_INUM && !objchange) if (args->inumber > XFS_DIR2_MAX_SHORT_INUM && !objchange)
sfp->i8count++; sfp->i8count++;
#endif
/* /*
* If there's more left to copy, do that. * If there's more left to copy, do that.
*/ */
...@@ -593,13 +586,8 @@ xfs_dir2_sf_addname_pick( ...@@ -593,13 +586,8 @@ xfs_dir2_sf_addname_pick(
/* /*
* If changing the inode number size, do it the hard way. * If changing the inode number size, do it the hard way.
*/ */
#if XFS_BIG_INUMS if (objchange)
if (objchange) {
return 2; return 2;
}
#else
ASSERT(objchange == 0);
#endif
/* /*
* If it won't fit at the end then do it the hard way (use the hole). * If it won't fit at the end then do it the hard way (use the hole).
*/ */
...@@ -650,7 +638,6 @@ xfs_dir2_sf_check( ...@@ -650,7 +638,6 @@ xfs_dir2_sf_check(
ASSERT(dp->d_ops->sf_get_ftype(sfep) < XFS_DIR3_FT_MAX); ASSERT(dp->d_ops->sf_get_ftype(sfep) < XFS_DIR3_FT_MAX);
} }
ASSERT(i8count == sfp->i8count); ASSERT(i8count == sfp->i8count);
ASSERT(XFS_BIG_INUMS || i8count == 0);
ASSERT((char *)sfep - (char *)sfp == dp->i_d.di_size); ASSERT((char *)sfep - (char *)sfp == dp->i_d.di_size);
ASSERT(offset + ASSERT(offset +
(sfp->count + 2) * (uint)sizeof(xfs_dir2_leaf_entry_t) + (sfp->count + 2) * (uint)sizeof(xfs_dir2_leaf_entry_t) +
...@@ -738,7 +725,7 @@ xfs_dir2_sf_lookup( ...@@ -738,7 +725,7 @@ xfs_dir2_sf_lookup(
*/ */
if (dp->i_d.di_size < offsetof(xfs_dir2_sf_hdr_t, parent)) { if (dp->i_d.di_size < offsetof(xfs_dir2_sf_hdr_t, parent)) {
ASSERT(XFS_FORCED_SHUTDOWN(dp->i_mount)); ASSERT(XFS_FORCED_SHUTDOWN(dp->i_mount));
return XFS_ERROR(EIO); return -EIO;
} }
ASSERT(dp->i_df.if_bytes == dp->i_d.di_size); ASSERT(dp->i_df.if_bytes == dp->i_d.di_size);
ASSERT(dp->i_df.if_u1.if_data != NULL); ASSERT(dp->i_df.if_u1.if_data != NULL);
...@@ -751,7 +738,7 @@ xfs_dir2_sf_lookup( ...@@ -751,7 +738,7 @@ xfs_dir2_sf_lookup(
args->inumber = dp->i_ino; args->inumber = dp->i_ino;
args->cmpresult = XFS_CMP_EXACT; args->cmpresult = XFS_CMP_EXACT;
args->filetype = XFS_DIR3_FT_DIR; args->filetype = XFS_DIR3_FT_DIR;
return XFS_ERROR(EEXIST); return -EEXIST;
} }
/* /*
* Special case for .. * Special case for ..
...@@ -761,7 +748,7 @@ xfs_dir2_sf_lookup( ...@@ -761,7 +748,7 @@ xfs_dir2_sf_lookup(
args->inumber = dp->d_ops->sf_get_parent_ino(sfp); args->inumber = dp->d_ops->sf_get_parent_ino(sfp);
args->cmpresult = XFS_CMP_EXACT; args->cmpresult = XFS_CMP_EXACT;
args->filetype = XFS_DIR3_FT_DIR; args->filetype = XFS_DIR3_FT_DIR;
return XFS_ERROR(EEXIST); return -EEXIST;
} }
/* /*
* Loop over all the entries trying to match ours. * Loop over all the entries trying to match ours.
...@@ -781,20 +768,20 @@ xfs_dir2_sf_lookup( ...@@ -781,20 +768,20 @@ xfs_dir2_sf_lookup(
args->inumber = dp->d_ops->sf_get_ino(sfp, sfep); args->inumber = dp->d_ops->sf_get_ino(sfp, sfep);
args->filetype = dp->d_ops->sf_get_ftype(sfep); args->filetype = dp->d_ops->sf_get_ftype(sfep);
if (cmp == XFS_CMP_EXACT) if (cmp == XFS_CMP_EXACT)
return XFS_ERROR(EEXIST); return -EEXIST;
ci_sfep = sfep; ci_sfep = sfep;
} }
} }
ASSERT(args->op_flags & XFS_DA_OP_OKNOENT); ASSERT(args->op_flags & XFS_DA_OP_OKNOENT);
/* /*
* Here, we can only be doing a lookup (not a rename or replace). * Here, we can only be doing a lookup (not a rename or replace).
* If a case-insensitive match was not found, return ENOENT. * If a case-insensitive match was not found, return -ENOENT.
*/ */
if (!ci_sfep) if (!ci_sfep)
return XFS_ERROR(ENOENT); return -ENOENT;
/* otherwise process the CI match as required by the caller */ /* otherwise process the CI match as required by the caller */
error = xfs_dir_cilookup_result(args, ci_sfep->name, ci_sfep->namelen); error = xfs_dir_cilookup_result(args, ci_sfep->name, ci_sfep->namelen);
return XFS_ERROR(error); return error;
} }
/* /*
...@@ -824,7 +811,7 @@ xfs_dir2_sf_removename( ...@@ -824,7 +811,7 @@ xfs_dir2_sf_removename(
*/ */
if (oldsize < offsetof(xfs_dir2_sf_hdr_t, parent)) { if (oldsize < offsetof(xfs_dir2_sf_hdr_t, parent)) {
ASSERT(XFS_FORCED_SHUTDOWN(dp->i_mount)); ASSERT(XFS_FORCED_SHUTDOWN(dp->i_mount));
return XFS_ERROR(EIO); return -EIO;
} }
ASSERT(dp->i_df.if_bytes == oldsize); ASSERT(dp->i_df.if_bytes == oldsize);
ASSERT(dp->i_df.if_u1.if_data != NULL); ASSERT(dp->i_df.if_u1.if_data != NULL);
...@@ -847,7 +834,7 @@ xfs_dir2_sf_removename( ...@@ -847,7 +834,7 @@ xfs_dir2_sf_removename(
* Didn't find it. * Didn't find it.
*/ */
if (i == sfp->count) if (i == sfp->count)
return XFS_ERROR(ENOENT); return -ENOENT;
/* /*
* Calculate sizes. * Calculate sizes.
*/ */
...@@ -870,7 +857,6 @@ xfs_dir2_sf_removename( ...@@ -870,7 +857,6 @@ xfs_dir2_sf_removename(
*/ */
xfs_idata_realloc(dp, newsize - oldsize, XFS_DATA_FORK); xfs_idata_realloc(dp, newsize - oldsize, XFS_DATA_FORK);
sfp = (xfs_dir2_sf_hdr_t *)dp->i_df.if_u1.if_data; sfp = (xfs_dir2_sf_hdr_t *)dp->i_df.if_u1.if_data;
#if XFS_BIG_INUMS
/* /*
* Are we changing inode number size? * Are we changing inode number size?
*/ */
...@@ -880,7 +866,6 @@ xfs_dir2_sf_removename( ...@@ -880,7 +866,6 @@ xfs_dir2_sf_removename(
else else
sfp->i8count--; sfp->i8count--;
} }
#endif
xfs_dir2_sf_check(args); xfs_dir2_sf_check(args);
xfs_trans_log_inode(args->trans, dp, XFS_ILOG_CORE | XFS_ILOG_DDATA); xfs_trans_log_inode(args->trans, dp, XFS_ILOG_CORE | XFS_ILOG_DDATA);
return 0; return 0;
...@@ -895,12 +880,8 @@ xfs_dir2_sf_replace( ...@@ -895,12 +880,8 @@ xfs_dir2_sf_replace(
{ {
xfs_inode_t *dp; /* incore directory inode */ xfs_inode_t *dp; /* incore directory inode */
int i; /* entry index */ int i; /* entry index */
#if XFS_BIG_INUMS || defined(DEBUG)
xfs_ino_t ino=0; /* entry old inode number */ xfs_ino_t ino=0; /* entry old inode number */
#endif
#if XFS_BIG_INUMS
int i8elevated; /* sf_toino8 set i8count=1 */ int i8elevated; /* sf_toino8 set i8count=1 */
#endif
xfs_dir2_sf_entry_t *sfep; /* shortform directory entry */ xfs_dir2_sf_entry_t *sfep; /* shortform directory entry */
xfs_dir2_sf_hdr_t *sfp; /* shortform structure */ xfs_dir2_sf_hdr_t *sfp; /* shortform structure */
...@@ -914,13 +895,13 @@ xfs_dir2_sf_replace( ...@@ -914,13 +895,13 @@ xfs_dir2_sf_replace(
*/ */
if (dp->i_d.di_size < offsetof(xfs_dir2_sf_hdr_t, parent)) { if (dp->i_d.di_size < offsetof(xfs_dir2_sf_hdr_t, parent)) {
ASSERT(XFS_FORCED_SHUTDOWN(dp->i_mount)); ASSERT(XFS_FORCED_SHUTDOWN(dp->i_mount));
return XFS_ERROR(EIO); return -EIO;
} }
ASSERT(dp->i_df.if_bytes == dp->i_d.di_size); ASSERT(dp->i_df.if_bytes == dp->i_d.di_size);
ASSERT(dp->i_df.if_u1.if_data != NULL); ASSERT(dp->i_df.if_u1.if_data != NULL);
sfp = (xfs_dir2_sf_hdr_t *)dp->i_df.if_u1.if_data; sfp = (xfs_dir2_sf_hdr_t *)dp->i_df.if_u1.if_data;
ASSERT(dp->i_d.di_size >= xfs_dir2_sf_hdr_size(sfp->i8count)); ASSERT(dp->i_d.di_size >= xfs_dir2_sf_hdr_size(sfp->i8count));
#if XFS_BIG_INUMS
/* /*
* New inode number is large, and need to convert to 8-byte inodes. * New inode number is large, and need to convert to 8-byte inodes.
*/ */
...@@ -951,17 +932,15 @@ xfs_dir2_sf_replace( ...@@ -951,17 +932,15 @@ xfs_dir2_sf_replace(
sfp = (xfs_dir2_sf_hdr_t *)dp->i_df.if_u1.if_data; sfp = (xfs_dir2_sf_hdr_t *)dp->i_df.if_u1.if_data;
} else } else
i8elevated = 0; i8elevated = 0;
#endif
ASSERT(args->namelen != 1 || args->name[0] != '.'); ASSERT(args->namelen != 1 || args->name[0] != '.');
/* /*
* Replace ..'s entry. * Replace ..'s entry.
*/ */
if (args->namelen == 2 && if (args->namelen == 2 &&
args->name[0] == '.' && args->name[1] == '.') { args->name[0] == '.' && args->name[1] == '.') {
#if XFS_BIG_INUMS || defined(DEBUG)
ino = dp->d_ops->sf_get_parent_ino(sfp); ino = dp->d_ops->sf_get_parent_ino(sfp);
ASSERT(args->inumber != ino); ASSERT(args->inumber != ino);
#endif
dp->d_ops->sf_put_parent_ino(sfp, args->inumber); dp->d_ops->sf_put_parent_ino(sfp, args->inumber);
} }
/* /*
...@@ -972,10 +951,8 @@ xfs_dir2_sf_replace( ...@@ -972,10 +951,8 @@ xfs_dir2_sf_replace(
i++, sfep = dp->d_ops->sf_nextentry(sfp, sfep)) { i++, sfep = dp->d_ops->sf_nextentry(sfp, sfep)) {
if (xfs_da_compname(args, sfep->name, sfep->namelen) == if (xfs_da_compname(args, sfep->name, sfep->namelen) ==
XFS_CMP_EXACT) { XFS_CMP_EXACT) {
#if XFS_BIG_INUMS || defined(DEBUG)
ino = dp->d_ops->sf_get_ino(sfp, sfep); ino = dp->d_ops->sf_get_ino(sfp, sfep);
ASSERT(args->inumber != ino); ASSERT(args->inumber != ino);
#endif
dp->d_ops->sf_put_ino(sfp, sfep, args->inumber); dp->d_ops->sf_put_ino(sfp, sfep, args->inumber);
dp->d_ops->sf_put_ftype(sfep, args->filetype); dp->d_ops->sf_put_ftype(sfep, args->filetype);
break; break;
...@@ -986,14 +963,11 @@ xfs_dir2_sf_replace( ...@@ -986,14 +963,11 @@ xfs_dir2_sf_replace(
*/ */
if (i == sfp->count) { if (i == sfp->count) {
ASSERT(args->op_flags & XFS_DA_OP_OKNOENT); ASSERT(args->op_flags & XFS_DA_OP_OKNOENT);
#if XFS_BIG_INUMS
if (i8elevated) if (i8elevated)
xfs_dir2_sf_toino4(args); xfs_dir2_sf_toino4(args);
#endif return -ENOENT;
return XFS_ERROR(ENOENT);
} }
} }
#if XFS_BIG_INUMS
/* /*
* See if the old number was large, the new number is small. * See if the old number was large, the new number is small.
*/ */
...@@ -1020,13 +994,11 @@ xfs_dir2_sf_replace( ...@@ -1020,13 +994,11 @@ xfs_dir2_sf_replace(
if (!i8elevated) if (!i8elevated)
sfp->i8count++; sfp->i8count++;
} }
#endif
xfs_dir2_sf_check(args); xfs_dir2_sf_check(args);
xfs_trans_log_inode(args->trans, dp, XFS_ILOG_DDATA); xfs_trans_log_inode(args->trans, dp, XFS_ILOG_DDATA);
return 0; return 0;
} }
#if XFS_BIG_INUMS
/* /*
* Convert from 8-byte inode numbers to 4-byte inode numbers. * Convert from 8-byte inode numbers to 4-byte inode numbers.
* The last 8-byte inode number is gone, but the count is still 1. * The last 8-byte inode number is gone, but the count is still 1.
...@@ -1181,4 +1153,3 @@ xfs_dir2_sf_toino8( ...@@ -1181,4 +1153,3 @@ xfs_dir2_sf_toino8(
dp->i_d.di_size = newsize; dp->i_d.di_size = newsize;
xfs_trans_log_inode(args->trans, dp, XFS_ILOG_CORE | XFS_ILOG_DDATA); xfs_trans_log_inode(args->trans, dp, XFS_ILOG_CORE | XFS_ILOG_DDATA);
} }
#endif /* XFS_BIG_INUMS */
...@@ -257,9 +257,9 @@ xfs_dquot_buf_read_verify( ...@@ -257,9 +257,9 @@ xfs_dquot_buf_read_verify(
struct xfs_mount *mp = bp->b_target->bt_mount; struct xfs_mount *mp = bp->b_target->bt_mount;
if (!xfs_dquot_buf_verify_crc(mp, bp)) if (!xfs_dquot_buf_verify_crc(mp, bp))
xfs_buf_ioerror(bp, EFSBADCRC); xfs_buf_ioerror(bp, -EFSBADCRC);
else if (!xfs_dquot_buf_verify(mp, bp)) else if (!xfs_dquot_buf_verify(mp, bp))
xfs_buf_ioerror(bp, EFSCORRUPTED); xfs_buf_ioerror(bp, -EFSCORRUPTED);
if (bp->b_error) if (bp->b_error)
xfs_verifier_error(bp); xfs_verifier_error(bp);
...@@ -277,7 +277,7 @@ xfs_dquot_buf_write_verify( ...@@ -277,7 +277,7 @@ xfs_dquot_buf_write_verify(
struct xfs_mount *mp = bp->b_target->bt_mount; struct xfs_mount *mp = bp->b_target->bt_mount;
if (!xfs_dquot_buf_verify(mp, bp)) { if (!xfs_dquot_buf_verify(mp, bp)) {
xfs_buf_ioerror(bp, EFSCORRUPTED); xfs_buf_ioerror(bp, -EFSCORRUPTED);
xfs_verifier_error(bp); xfs_verifier_error(bp);
return; return;
} }
......
...@@ -68,11 +68,7 @@ struct xfs_ifork; ...@@ -68,11 +68,7 @@ struct xfs_ifork;
#define XFS_RTLOBIT(w) xfs_lowbit32(w) #define XFS_RTLOBIT(w) xfs_lowbit32(w)
#define XFS_RTHIBIT(w) xfs_highbit32(w) #define XFS_RTHIBIT(w) xfs_highbit32(w)
#if XFS_BIG_BLKNOS
#define XFS_RTBLOCKLOG(b) xfs_highbit64(b) #define XFS_RTBLOCKLOG(b) xfs_highbit64(b)
#else
#define XFS_RTBLOCKLOG(b) xfs_highbit32(b)
#endif
/* /*
* Dquot and dquot block format definitions * Dquot and dquot block format definitions
...@@ -304,23 +300,15 @@ typedef struct xfs_bmbt_rec_host { ...@@ -304,23 +300,15 @@ typedef struct xfs_bmbt_rec_host {
* Values and macros for delayed-allocation startblock fields. * Values and macros for delayed-allocation startblock fields.
*/ */
#define STARTBLOCKVALBITS 17 #define STARTBLOCKVALBITS 17
#define STARTBLOCKMASKBITS (15 + XFS_BIG_BLKNOS * 20) #define STARTBLOCKMASKBITS (15 + 20)
#define DSTARTBLOCKMASKBITS (15 + 20)
#define STARTBLOCKMASK \ #define STARTBLOCKMASK \
(((((xfs_fsblock_t)1) << STARTBLOCKMASKBITS) - 1) << STARTBLOCKVALBITS) (((((xfs_fsblock_t)1) << STARTBLOCKMASKBITS) - 1) << STARTBLOCKVALBITS)
#define DSTARTBLOCKMASK \
(((((xfs_dfsbno_t)1) << DSTARTBLOCKMASKBITS) - 1) << STARTBLOCKVALBITS)
static inline int isnullstartblock(xfs_fsblock_t x) static inline int isnullstartblock(xfs_fsblock_t x)
{ {
return ((x) & STARTBLOCKMASK) == STARTBLOCKMASK; return ((x) & STARTBLOCKMASK) == STARTBLOCKMASK;
} }
static inline int isnulldstartblock(xfs_dfsbno_t x)
{
return ((x) & DSTARTBLOCKMASK) == DSTARTBLOCKMASK;
}
static inline xfs_fsblock_t nullstartblock(int k) static inline xfs_fsblock_t nullstartblock(int k)
{ {
ASSERT(k < (1 << STARTBLOCKVALBITS)); ASSERT(k < (1 << STARTBLOCKVALBITS));
......
...@@ -292,7 +292,7 @@ xfs_ialloc_inode_init( ...@@ -292,7 +292,7 @@ xfs_ialloc_inode_init(
mp->m_bsize * blks_per_cluster, mp->m_bsize * blks_per_cluster,
XBF_UNMAPPED); XBF_UNMAPPED);
if (!fbuf) if (!fbuf)
return ENOMEM; return -ENOMEM;
/* Initialize the inode buffers and log them appropriately. */ /* Initialize the inode buffers and log them appropriately. */
fbuf->b_ops = &xfs_inode_buf_ops; fbuf->b_ops = &xfs_inode_buf_ops;
...@@ -380,7 +380,7 @@ xfs_ialloc_ag_alloc( ...@@ -380,7 +380,7 @@ xfs_ialloc_ag_alloc(
newlen = args.mp->m_ialloc_inos; newlen = args.mp->m_ialloc_inos;
if (args.mp->m_maxicount && if (args.mp->m_maxicount &&
args.mp->m_sb.sb_icount + newlen > args.mp->m_maxicount) args.mp->m_sb.sb_icount + newlen > args.mp->m_maxicount)
return XFS_ERROR(ENOSPC); return -ENOSPC;
args.minlen = args.maxlen = args.mp->m_ialloc_blks; args.minlen = args.maxlen = args.mp->m_ialloc_blks;
/* /*
* First try to allocate inodes contiguous with the last-allocated * First try to allocate inodes contiguous with the last-allocated
...@@ -1385,7 +1385,7 @@ xfs_dialloc( ...@@ -1385,7 +1385,7 @@ xfs_dialloc(
if (error) { if (error) {
xfs_trans_brelse(tp, agbp); xfs_trans_brelse(tp, agbp);
if (error != ENOSPC) if (error != -ENOSPC)
goto out_error; goto out_error;
xfs_perag_put(pag); xfs_perag_put(pag);
...@@ -1416,7 +1416,7 @@ xfs_dialloc( ...@@ -1416,7 +1416,7 @@ xfs_dialloc(
agno = 0; agno = 0;
if (agno == start_agno) { if (agno == start_agno) {
*inop = NULLFSINO; *inop = NULLFSINO;
return noroom ? ENOSPC : 0; return noroom ? -ENOSPC : 0;
} }
} }
...@@ -1425,7 +1425,7 @@ xfs_dialloc( ...@@ -1425,7 +1425,7 @@ xfs_dialloc(
return xfs_dialloc_ag(tp, agbp, parent, inop); return xfs_dialloc_ag(tp, agbp, parent, inop);
out_error: out_error:
xfs_perag_put(pag); xfs_perag_put(pag);
return XFS_ERROR(error); return error;
} }
STATIC int STATIC int
...@@ -1682,7 +1682,7 @@ xfs_difree( ...@@ -1682,7 +1682,7 @@ xfs_difree(
xfs_warn(mp, "%s: agno >= mp->m_sb.sb_agcount (%d >= %d).", xfs_warn(mp, "%s: agno >= mp->m_sb.sb_agcount (%d >= %d).",
__func__, agno, mp->m_sb.sb_agcount); __func__, agno, mp->m_sb.sb_agcount);
ASSERT(0); ASSERT(0);
return XFS_ERROR(EINVAL); return -EINVAL;
} }
agino = XFS_INO_TO_AGINO(mp, inode); agino = XFS_INO_TO_AGINO(mp, inode);
if (inode != XFS_AGINO_TO_INO(mp, agno, agino)) { if (inode != XFS_AGINO_TO_INO(mp, agno, agino)) {
...@@ -1690,14 +1690,14 @@ xfs_difree( ...@@ -1690,14 +1690,14 @@ xfs_difree(
__func__, (unsigned long long)inode, __func__, (unsigned long long)inode,
(unsigned long long)XFS_AGINO_TO_INO(mp, agno, agino)); (unsigned long long)XFS_AGINO_TO_INO(mp, agno, agino));
ASSERT(0); ASSERT(0);
return XFS_ERROR(EINVAL); return -EINVAL;
} }
agbno = XFS_AGINO_TO_AGBNO(mp, agino); agbno = XFS_AGINO_TO_AGBNO(mp, agino);
if (agbno >= mp->m_sb.sb_agblocks) { if (agbno >= mp->m_sb.sb_agblocks) {
xfs_warn(mp, "%s: agbno >= mp->m_sb.sb_agblocks (%d >= %d).", xfs_warn(mp, "%s: agbno >= mp->m_sb.sb_agblocks (%d >= %d).",
__func__, agbno, mp->m_sb.sb_agblocks); __func__, agbno, mp->m_sb.sb_agblocks);
ASSERT(0); ASSERT(0);
return XFS_ERROR(EINVAL); return -EINVAL;
} }
/* /*
* Get the allocation group header. * Get the allocation group header.
...@@ -1769,7 +1769,7 @@ xfs_imap_lookup( ...@@ -1769,7 +1769,7 @@ xfs_imap_lookup(
if (i) if (i)
error = xfs_inobt_get_rec(cur, &rec, &i); error = xfs_inobt_get_rec(cur, &rec, &i);
if (!error && i == 0) if (!error && i == 0)
error = EINVAL; error = -EINVAL;
} }
xfs_trans_brelse(tp, agbp); xfs_trans_brelse(tp, agbp);
...@@ -1780,12 +1780,12 @@ xfs_imap_lookup( ...@@ -1780,12 +1780,12 @@ xfs_imap_lookup(
/* check that the returned record contains the required inode */ /* check that the returned record contains the required inode */
if (rec.ir_startino > agino || if (rec.ir_startino > agino ||
rec.ir_startino + mp->m_ialloc_inos <= agino) rec.ir_startino + mp->m_ialloc_inos <= agino)
return EINVAL; return -EINVAL;
/* for untrusted inodes check it is allocated first */ /* for untrusted inodes check it is allocated first */
if ((flags & XFS_IGET_UNTRUSTED) && if ((flags & XFS_IGET_UNTRUSTED) &&
(rec.ir_free & XFS_INOBT_MASK(agino - rec.ir_startino))) (rec.ir_free & XFS_INOBT_MASK(agino - rec.ir_startino)))
return EINVAL; return -EINVAL;
*chunk_agbno = XFS_AGINO_TO_AGBNO(mp, rec.ir_startino); *chunk_agbno = XFS_AGINO_TO_AGBNO(mp, rec.ir_startino);
*offset_agbno = agbno - *chunk_agbno; *offset_agbno = agbno - *chunk_agbno;
...@@ -1829,7 +1829,7 @@ xfs_imap( ...@@ -1829,7 +1829,7 @@ xfs_imap(
* as they can be invalid without implying corruption. * as they can be invalid without implying corruption.
*/ */
if (flags & XFS_IGET_UNTRUSTED) if (flags & XFS_IGET_UNTRUSTED)
return XFS_ERROR(EINVAL); return -EINVAL;
if (agno >= mp->m_sb.sb_agcount) { if (agno >= mp->m_sb.sb_agcount) {
xfs_alert(mp, xfs_alert(mp,
"%s: agno (%d) >= mp->m_sb.sb_agcount (%d)", "%s: agno (%d) >= mp->m_sb.sb_agcount (%d)",
...@@ -1849,7 +1849,7 @@ xfs_imap( ...@@ -1849,7 +1849,7 @@ xfs_imap(
} }
xfs_stack_trace(); xfs_stack_trace();
#endif /* DEBUG */ #endif /* DEBUG */
return XFS_ERROR(EINVAL); return -EINVAL;
} }
blks_per_cluster = xfs_icluster_size_fsb(mp); blks_per_cluster = xfs_icluster_size_fsb(mp);
...@@ -1922,7 +1922,7 @@ xfs_imap( ...@@ -1922,7 +1922,7 @@ xfs_imap(
__func__, (unsigned long long) imap->im_blkno, __func__, (unsigned long long) imap->im_blkno,
(unsigned long long) imap->im_len, (unsigned long long) imap->im_len,
XFS_FSB_TO_BB(mp, mp->m_sb.sb_dblocks)); XFS_FSB_TO_BB(mp, mp->m_sb.sb_dblocks));
return XFS_ERROR(EINVAL); return -EINVAL;
} }
return 0; return 0;
} }
...@@ -2072,11 +2072,11 @@ xfs_agi_read_verify( ...@@ -2072,11 +2072,11 @@ xfs_agi_read_verify(
if (xfs_sb_version_hascrc(&mp->m_sb) && if (xfs_sb_version_hascrc(&mp->m_sb) &&
!xfs_buf_verify_cksum(bp, XFS_AGI_CRC_OFF)) !xfs_buf_verify_cksum(bp, XFS_AGI_CRC_OFF))
xfs_buf_ioerror(bp, EFSBADCRC); xfs_buf_ioerror(bp, -EFSBADCRC);
else if (XFS_TEST_ERROR(!xfs_agi_verify(bp), mp, else if (XFS_TEST_ERROR(!xfs_agi_verify(bp), mp,
XFS_ERRTAG_IALLOC_READ_AGI, XFS_ERRTAG_IALLOC_READ_AGI,
XFS_RANDOM_IALLOC_READ_AGI)) XFS_RANDOM_IALLOC_READ_AGI))
xfs_buf_ioerror(bp, EFSCORRUPTED); xfs_buf_ioerror(bp, -EFSCORRUPTED);
if (bp->b_error) if (bp->b_error)
xfs_verifier_error(bp); xfs_verifier_error(bp);
...@@ -2090,7 +2090,7 @@ xfs_agi_write_verify( ...@@ -2090,7 +2090,7 @@ xfs_agi_write_verify(
struct xfs_buf_log_item *bip = bp->b_fspriv; struct xfs_buf_log_item *bip = bp->b_fspriv;
if (!xfs_agi_verify(bp)) { if (!xfs_agi_verify(bp)) {
xfs_buf_ioerror(bp, EFSCORRUPTED); xfs_buf_ioerror(bp, -EFSCORRUPTED);
xfs_verifier_error(bp); xfs_verifier_error(bp);
return; return;
} }
......
...@@ -272,9 +272,9 @@ xfs_inobt_read_verify( ...@@ -272,9 +272,9 @@ xfs_inobt_read_verify(
struct xfs_buf *bp) struct xfs_buf *bp)
{ {
if (!xfs_btree_sblock_verify_crc(bp)) if (!xfs_btree_sblock_verify_crc(bp))
xfs_buf_ioerror(bp, EFSBADCRC); xfs_buf_ioerror(bp, -EFSBADCRC);
else if (!xfs_inobt_verify(bp)) else if (!xfs_inobt_verify(bp))
xfs_buf_ioerror(bp, EFSCORRUPTED); xfs_buf_ioerror(bp, -EFSCORRUPTED);
if (bp->b_error) { if (bp->b_error) {
trace_xfs_btree_corrupt(bp, _RET_IP_); trace_xfs_btree_corrupt(bp, _RET_IP_);
...@@ -288,7 +288,7 @@ xfs_inobt_write_verify( ...@@ -288,7 +288,7 @@ xfs_inobt_write_verify(
{ {
if (!xfs_inobt_verify(bp)) { if (!xfs_inobt_verify(bp)) {
trace_xfs_btree_corrupt(bp, _RET_IP_); trace_xfs_btree_corrupt(bp, _RET_IP_);
xfs_buf_ioerror(bp, EFSCORRUPTED); xfs_buf_ioerror(bp, -EFSCORRUPTED);
xfs_verifier_error(bp); xfs_verifier_error(bp);
return; return;
} }
......
...@@ -101,7 +101,7 @@ xfs_inode_buf_verify( ...@@ -101,7 +101,7 @@ xfs_inode_buf_verify(
return; return;
} }
xfs_buf_ioerror(bp, EFSCORRUPTED); xfs_buf_ioerror(bp, -EFSCORRUPTED);
xfs_verifier_error(bp); xfs_verifier_error(bp);
#ifdef DEBUG #ifdef DEBUG
xfs_alert(mp, xfs_alert(mp,
...@@ -174,14 +174,14 @@ xfs_imap_to_bp( ...@@ -174,14 +174,14 @@ xfs_imap_to_bp(
(int)imap->im_len, buf_flags, &bp, (int)imap->im_len, buf_flags, &bp,
&xfs_inode_buf_ops); &xfs_inode_buf_ops);
if (error) { if (error) {
if (error == EAGAIN) { if (error == -EAGAIN) {
ASSERT(buf_flags & XBF_TRYLOCK); ASSERT(buf_flags & XBF_TRYLOCK);
return error; return error;
} }
if (error == EFSCORRUPTED && if (error == -EFSCORRUPTED &&
(iget_flags & XFS_IGET_UNTRUSTED)) (iget_flags & XFS_IGET_UNTRUSTED))
return XFS_ERROR(EINVAL); return -EINVAL;
xfs_warn(mp, "%s: xfs_trans_read_buf() returned error %d.", xfs_warn(mp, "%s: xfs_trans_read_buf() returned error %d.",
__func__, error); __func__, error);
...@@ -390,7 +390,7 @@ xfs_iread( ...@@ -390,7 +390,7 @@ xfs_iread(
__func__, ip->i_ino); __func__, ip->i_ino);
XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, dip); XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, dip);
error = XFS_ERROR(EFSCORRUPTED); error = -EFSCORRUPTED;
goto out_brelse; goto out_brelse;
} }
......
...@@ -102,7 +102,7 @@ xfs_iformat_fork( ...@@ -102,7 +102,7 @@ xfs_iformat_fork(
be64_to_cpu(dip->di_nblocks)); be64_to_cpu(dip->di_nblocks));
XFS_CORRUPTION_ERROR("xfs_iformat(1)", XFS_ERRLEVEL_LOW, XFS_CORRUPTION_ERROR("xfs_iformat(1)", XFS_ERRLEVEL_LOW,
ip->i_mount, dip); ip->i_mount, dip);
return XFS_ERROR(EFSCORRUPTED); return -EFSCORRUPTED;
} }
if (unlikely(dip->di_forkoff > ip->i_mount->m_sb.sb_inodesize)) { if (unlikely(dip->di_forkoff > ip->i_mount->m_sb.sb_inodesize)) {
...@@ -111,7 +111,7 @@ xfs_iformat_fork( ...@@ -111,7 +111,7 @@ xfs_iformat_fork(
dip->di_forkoff); dip->di_forkoff);
XFS_CORRUPTION_ERROR("xfs_iformat(2)", XFS_ERRLEVEL_LOW, XFS_CORRUPTION_ERROR("xfs_iformat(2)", XFS_ERRLEVEL_LOW,
ip->i_mount, dip); ip->i_mount, dip);
return XFS_ERROR(EFSCORRUPTED); return -EFSCORRUPTED;
} }
if (unlikely((ip->i_d.di_flags & XFS_DIFLAG_REALTIME) && if (unlikely((ip->i_d.di_flags & XFS_DIFLAG_REALTIME) &&
...@@ -121,7 +121,7 @@ xfs_iformat_fork( ...@@ -121,7 +121,7 @@ xfs_iformat_fork(
ip->i_ino); ip->i_ino);
XFS_CORRUPTION_ERROR("xfs_iformat(realtime)", XFS_CORRUPTION_ERROR("xfs_iformat(realtime)",
XFS_ERRLEVEL_LOW, ip->i_mount, dip); XFS_ERRLEVEL_LOW, ip->i_mount, dip);
return XFS_ERROR(EFSCORRUPTED); return -EFSCORRUPTED;
} }
switch (ip->i_d.di_mode & S_IFMT) { switch (ip->i_d.di_mode & S_IFMT) {
...@@ -132,7 +132,7 @@ xfs_iformat_fork( ...@@ -132,7 +132,7 @@ xfs_iformat_fork(
if (unlikely(dip->di_format != XFS_DINODE_FMT_DEV)) { if (unlikely(dip->di_format != XFS_DINODE_FMT_DEV)) {
XFS_CORRUPTION_ERROR("xfs_iformat(3)", XFS_ERRLEVEL_LOW, XFS_CORRUPTION_ERROR("xfs_iformat(3)", XFS_ERRLEVEL_LOW,
ip->i_mount, dip); ip->i_mount, dip);
return XFS_ERROR(EFSCORRUPTED); return -EFSCORRUPTED;
} }
ip->i_d.di_size = 0; ip->i_d.di_size = 0;
ip->i_df.if_u2.if_rdev = xfs_dinode_get_rdev(dip); ip->i_df.if_u2.if_rdev = xfs_dinode_get_rdev(dip);
...@@ -153,7 +153,7 @@ xfs_iformat_fork( ...@@ -153,7 +153,7 @@ xfs_iformat_fork(
XFS_CORRUPTION_ERROR("xfs_iformat(4)", XFS_CORRUPTION_ERROR("xfs_iformat(4)",
XFS_ERRLEVEL_LOW, XFS_ERRLEVEL_LOW,
ip->i_mount, dip); ip->i_mount, dip);
return XFS_ERROR(EFSCORRUPTED); return -EFSCORRUPTED;
} }
di_size = be64_to_cpu(dip->di_size); di_size = be64_to_cpu(dip->di_size);
...@@ -166,7 +166,7 @@ xfs_iformat_fork( ...@@ -166,7 +166,7 @@ xfs_iformat_fork(
XFS_CORRUPTION_ERROR("xfs_iformat(5)", XFS_CORRUPTION_ERROR("xfs_iformat(5)",
XFS_ERRLEVEL_LOW, XFS_ERRLEVEL_LOW,
ip->i_mount, dip); ip->i_mount, dip);
return XFS_ERROR(EFSCORRUPTED); return -EFSCORRUPTED;
} }
size = (int)di_size; size = (int)di_size;
...@@ -181,13 +181,13 @@ xfs_iformat_fork( ...@@ -181,13 +181,13 @@ xfs_iformat_fork(
default: default:
XFS_ERROR_REPORT("xfs_iformat(6)", XFS_ERRLEVEL_LOW, XFS_ERROR_REPORT("xfs_iformat(6)", XFS_ERRLEVEL_LOW,
ip->i_mount); ip->i_mount);
return XFS_ERROR(EFSCORRUPTED); return -EFSCORRUPTED;
} }
break; break;
default: default:
XFS_ERROR_REPORT("xfs_iformat(7)", XFS_ERRLEVEL_LOW, ip->i_mount); XFS_ERROR_REPORT("xfs_iformat(7)", XFS_ERRLEVEL_LOW, ip->i_mount);
return XFS_ERROR(EFSCORRUPTED); return -EFSCORRUPTED;
} }
if (error) { if (error) {
return error; return error;
...@@ -211,7 +211,7 @@ xfs_iformat_fork( ...@@ -211,7 +211,7 @@ xfs_iformat_fork(
XFS_CORRUPTION_ERROR("xfs_iformat(8)", XFS_CORRUPTION_ERROR("xfs_iformat(8)",
XFS_ERRLEVEL_LOW, XFS_ERRLEVEL_LOW,
ip->i_mount, dip); ip->i_mount, dip);
return XFS_ERROR(EFSCORRUPTED); return -EFSCORRUPTED;
} }
error = xfs_iformat_local(ip, dip, XFS_ATTR_FORK, size); error = xfs_iformat_local(ip, dip, XFS_ATTR_FORK, size);
...@@ -223,7 +223,7 @@ xfs_iformat_fork( ...@@ -223,7 +223,7 @@ xfs_iformat_fork(
error = xfs_iformat_btree(ip, dip, XFS_ATTR_FORK); error = xfs_iformat_btree(ip, dip, XFS_ATTR_FORK);
break; break;
default: default:
error = XFS_ERROR(EFSCORRUPTED); error = -EFSCORRUPTED;
break; break;
} }
if (error) { if (error) {
...@@ -266,7 +266,7 @@ xfs_iformat_local( ...@@ -266,7 +266,7 @@ xfs_iformat_local(
XFS_DFORK_SIZE(dip, ip->i_mount, whichfork)); XFS_DFORK_SIZE(dip, ip->i_mount, whichfork));
XFS_CORRUPTION_ERROR("xfs_iformat_local", XFS_ERRLEVEL_LOW, XFS_CORRUPTION_ERROR("xfs_iformat_local", XFS_ERRLEVEL_LOW,
ip->i_mount, dip); ip->i_mount, dip);
return XFS_ERROR(EFSCORRUPTED); return -EFSCORRUPTED;
} }
ifp = XFS_IFORK_PTR(ip, whichfork); ifp = XFS_IFORK_PTR(ip, whichfork);
real_size = 0; real_size = 0;
...@@ -322,7 +322,7 @@ xfs_iformat_extents( ...@@ -322,7 +322,7 @@ xfs_iformat_extents(
(unsigned long long) ip->i_ino, nex); (unsigned long long) ip->i_ino, nex);
XFS_CORRUPTION_ERROR("xfs_iformat_extents(1)", XFS_ERRLEVEL_LOW, XFS_CORRUPTION_ERROR("xfs_iformat_extents(1)", XFS_ERRLEVEL_LOW,
ip->i_mount, dip); ip->i_mount, dip);
return XFS_ERROR(EFSCORRUPTED); return -EFSCORRUPTED;
} }
ifp->if_real_bytes = 0; ifp->if_real_bytes = 0;
...@@ -350,7 +350,7 @@ xfs_iformat_extents( ...@@ -350,7 +350,7 @@ xfs_iformat_extents(
XFS_ERROR_REPORT("xfs_iformat_extents(2)", XFS_ERROR_REPORT("xfs_iformat_extents(2)",
XFS_ERRLEVEL_LOW, XFS_ERRLEVEL_LOW,
ip->i_mount); ip->i_mount);
return XFS_ERROR(EFSCORRUPTED); return -EFSCORRUPTED;
} }
} }
ifp->if_flags |= XFS_IFEXTENTS; ifp->if_flags |= XFS_IFEXTENTS;
...@@ -399,7 +399,7 @@ xfs_iformat_btree( ...@@ -399,7 +399,7 @@ xfs_iformat_btree(
(unsigned long long) ip->i_ino); (unsigned long long) ip->i_ino);
XFS_CORRUPTION_ERROR("xfs_iformat_btree", XFS_ERRLEVEL_LOW, XFS_CORRUPTION_ERROR("xfs_iformat_btree", XFS_ERRLEVEL_LOW,
mp, dip); mp, dip);
return XFS_ERROR(EFSCORRUPTED); return -EFSCORRUPTED;
} }
ifp->if_broot_bytes = size; ifp->if_broot_bytes = size;
...@@ -436,7 +436,7 @@ xfs_iread_extents( ...@@ -436,7 +436,7 @@ xfs_iread_extents(
if (unlikely(XFS_IFORK_FORMAT(ip, whichfork) != XFS_DINODE_FMT_BTREE)) { if (unlikely(XFS_IFORK_FORMAT(ip, whichfork) != XFS_DINODE_FMT_BTREE)) {
XFS_ERROR_REPORT("xfs_iread_extents", XFS_ERRLEVEL_LOW, XFS_ERROR_REPORT("xfs_iread_extents", XFS_ERRLEVEL_LOW,
ip->i_mount); ip->i_mount);
return XFS_ERROR(EFSCORRUPTED); return -EFSCORRUPTED;
} }
nextents = XFS_IFORK_NEXTENTS(ip, whichfork); nextents = XFS_IFORK_NEXTENTS(ip, whichfork);
ifp = XFS_IFORK_PTR(ip, whichfork); ifp = XFS_IFORK_PTR(ip, whichfork);
...@@ -528,7 +528,7 @@ xfs_iroot_realloc( ...@@ -528,7 +528,7 @@ xfs_iroot_realloc(
ifp->if_broot_bytes = (int)new_size; ifp->if_broot_bytes = (int)new_size;
ASSERT(XFS_BMAP_BMDR_SPACE(ifp->if_broot) <= ASSERT(XFS_BMAP_BMDR_SPACE(ifp->if_broot) <=
XFS_IFORK_SIZE(ip, whichfork)); XFS_IFORK_SIZE(ip, whichfork));
memmove(np, op, cur_max * (uint)sizeof(xfs_dfsbno_t)); memmove(np, op, cur_max * (uint)sizeof(xfs_fsblock_t));
return; return;
} }
...@@ -575,7 +575,7 @@ xfs_iroot_realloc( ...@@ -575,7 +575,7 @@ xfs_iroot_realloc(
ifp->if_broot_bytes); ifp->if_broot_bytes);
np = (char *)XFS_BMAP_BROOT_PTR_ADDR(mp, new_broot, 1, np = (char *)XFS_BMAP_BROOT_PTR_ADDR(mp, new_broot, 1,
(int)new_size); (int)new_size);
memcpy(np, op, new_max * (uint)sizeof(xfs_dfsbno_t)); memcpy(np, op, new_max * (uint)sizeof(xfs_fsblock_t));
} }
kmem_free(ifp->if_broot); kmem_free(ifp->if_broot);
ifp->if_broot = new_broot; ifp->if_broot = new_broot;
...@@ -1692,7 +1692,7 @@ xfs_iext_idx_to_irec( ...@@ -1692,7 +1692,7 @@ xfs_iext_idx_to_irec(
} }
*idxp = page_idx; *idxp = page_idx;
*erp_idxp = erp_idx; *erp_idxp = erp_idx;
return(erp); return erp;
} }
/* /*
......
...@@ -54,11 +54,7 @@ struct xfs_mount; ...@@ -54,11 +54,7 @@ struct xfs_mount;
#define XFS_OFFBNO_TO_AGINO(mp,b,o) \ #define XFS_OFFBNO_TO_AGINO(mp,b,o) \
((xfs_agino_t)(((b) << XFS_INO_OFFSET_BITS(mp)) | (o))) ((xfs_agino_t)(((b) << XFS_INO_OFFSET_BITS(mp)) | (o)))
#if XFS_BIG_INUMS
#define XFS_MAXINUMBER ((xfs_ino_t)((1ULL << 56) - 1ULL)) #define XFS_MAXINUMBER ((xfs_ino_t)((1ULL << 56) - 1ULL))
#else
#define XFS_MAXINUMBER ((xfs_ino_t)((1ULL << 32) - 1ULL))
#endif
#define XFS_MAXINUMBER_32 ((xfs_ino_t)((1ULL << 32) - 1ULL)) #define XFS_MAXINUMBER_32 ((xfs_ino_t)((1ULL << 32) - 1ULL))
#endif /* __XFS_INUM_H__ */ #endif /* __XFS_INUM_H__ */
...@@ -380,7 +380,7 @@ typedef struct xfs_icdinode { ...@@ -380,7 +380,7 @@ typedef struct xfs_icdinode {
xfs_ictimestamp_t di_mtime; /* time last modified */ xfs_ictimestamp_t di_mtime; /* time last modified */
xfs_ictimestamp_t di_ctime; /* time created/inode modified */ xfs_ictimestamp_t di_ctime; /* time created/inode modified */
xfs_fsize_t di_size; /* number of bytes in file */ xfs_fsize_t di_size; /* number of bytes in file */
xfs_drfsbno_t di_nblocks; /* # of direct & btree blocks used */ xfs_rfsblock_t di_nblocks; /* # of direct & btree blocks used */
xfs_extlen_t di_extsize; /* basic/minimum extent size for file */ xfs_extlen_t di_extsize; /* basic/minimum extent size for file */
xfs_extnum_t di_nextents; /* number of extents in data fork */ xfs_extnum_t di_nextents; /* number of extents in data fork */
xfs_aextnum_t di_anextents; /* number of extents in attribute fork*/ xfs_aextnum_t di_anextents; /* number of extents in attribute fork*/
...@@ -516,7 +516,7 @@ xfs_blft_from_flags(struct xfs_buf_log_format *blf) ...@@ -516,7 +516,7 @@ xfs_blft_from_flags(struct xfs_buf_log_format *blf)
* EFI/EFD log format definitions * EFI/EFD log format definitions
*/ */
typedef struct xfs_extent { typedef struct xfs_extent {
xfs_dfsbno_t ext_start; xfs_fsblock_t ext_start;
xfs_extlen_t ext_len; xfs_extlen_t ext_len;
} xfs_extent_t; } xfs_extent_t;
......
...@@ -98,8 +98,6 @@ typedef __uint16_t xfs_qwarncnt_t; ...@@ -98,8 +98,6 @@ typedef __uint16_t xfs_qwarncnt_t;
#define XFS_IS_QUOTA_ON(mp) ((mp)->m_qflags & (XFS_UQUOTA_ACTIVE | \ #define XFS_IS_QUOTA_ON(mp) ((mp)->m_qflags & (XFS_UQUOTA_ACTIVE | \
XFS_GQUOTA_ACTIVE | \ XFS_GQUOTA_ACTIVE | \
XFS_PQUOTA_ACTIVE)) XFS_PQUOTA_ACTIVE))
#define XFS_IS_OQUOTA_ON(mp) ((mp)->m_qflags & (XFS_GQUOTA_ACTIVE | \
XFS_PQUOTA_ACTIVE))
#define XFS_IS_UQUOTA_ON(mp) ((mp)->m_qflags & XFS_UQUOTA_ACTIVE) #define XFS_IS_UQUOTA_ON(mp) ((mp)->m_qflags & XFS_UQUOTA_ACTIVE)
#define XFS_IS_GQUOTA_ON(mp) ((mp)->m_qflags & XFS_GQUOTA_ACTIVE) #define XFS_IS_GQUOTA_ON(mp) ((mp)->m_qflags & XFS_GQUOTA_ACTIVE)
#define XFS_IS_PQUOTA_ON(mp) ((mp)->m_qflags & XFS_PQUOTA_ACTIVE) #define XFS_IS_PQUOTA_ON(mp) ((mp)->m_qflags & XFS_PQUOTA_ACTIVE)
......
...@@ -186,13 +186,13 @@ xfs_mount_validate_sb( ...@@ -186,13 +186,13 @@ xfs_mount_validate_sb(
*/ */
if (sbp->sb_magicnum != XFS_SB_MAGIC) { if (sbp->sb_magicnum != XFS_SB_MAGIC) {
xfs_warn(mp, "bad magic number"); xfs_warn(mp, "bad magic number");
return XFS_ERROR(EWRONGFS); return -EWRONGFS;
} }
if (!xfs_sb_good_version(sbp)) { if (!xfs_sb_good_version(sbp)) {
xfs_warn(mp, "bad version"); xfs_warn(mp, "bad version");
return XFS_ERROR(EWRONGFS); return -EWRONGFS;
} }
/* /*
...@@ -220,7 +220,7 @@ xfs_mount_validate_sb( ...@@ -220,7 +220,7 @@ xfs_mount_validate_sb(
xfs_warn(mp, xfs_warn(mp,
"Attempted to mount read-only compatible filesystem read-write.\n" "Attempted to mount read-only compatible filesystem read-write.\n"
"Filesystem can only be safely mounted read only."); "Filesystem can only be safely mounted read only.");
return XFS_ERROR(EINVAL); return -EINVAL;
} }
} }
if (xfs_sb_has_incompat_feature(sbp, if (xfs_sb_has_incompat_feature(sbp,
...@@ -230,7 +230,7 @@ xfs_mount_validate_sb( ...@@ -230,7 +230,7 @@ xfs_mount_validate_sb(
"Filesystem can not be safely mounted by this kernel.", "Filesystem can not be safely mounted by this kernel.",
(sbp->sb_features_incompat & (sbp->sb_features_incompat &
XFS_SB_FEAT_INCOMPAT_UNKNOWN)); XFS_SB_FEAT_INCOMPAT_UNKNOWN));
return XFS_ERROR(EINVAL); return -EINVAL;
} }
} }
...@@ -238,13 +238,13 @@ xfs_mount_validate_sb( ...@@ -238,13 +238,13 @@ xfs_mount_validate_sb(
if (sbp->sb_qflags & (XFS_OQUOTA_ENFD | XFS_OQUOTA_CHKD)) { if (sbp->sb_qflags & (XFS_OQUOTA_ENFD | XFS_OQUOTA_CHKD)) {
xfs_notice(mp, xfs_notice(mp,
"Version 5 of Super block has XFS_OQUOTA bits."); "Version 5 of Super block has XFS_OQUOTA bits.");
return XFS_ERROR(EFSCORRUPTED); return -EFSCORRUPTED;
} }
} else if (sbp->sb_qflags & (XFS_PQUOTA_ENFD | XFS_GQUOTA_ENFD | } else if (sbp->sb_qflags & (XFS_PQUOTA_ENFD | XFS_GQUOTA_ENFD |
XFS_PQUOTA_CHKD | XFS_GQUOTA_CHKD)) { XFS_PQUOTA_CHKD | XFS_GQUOTA_CHKD)) {
xfs_notice(mp, xfs_notice(mp,
"Superblock earlier than Version 5 has XFS_[PQ]UOTA_{ENFD|CHKD} bits."); "Superblock earlier than Version 5 has XFS_[PQ]UOTA_{ENFD|CHKD} bits.");
return XFS_ERROR(EFSCORRUPTED); return -EFSCORRUPTED;
} }
if (unlikely( if (unlikely(
...@@ -252,7 +252,7 @@ xfs_mount_validate_sb( ...@@ -252,7 +252,7 @@ xfs_mount_validate_sb(
xfs_warn(mp, xfs_warn(mp,
"filesystem is marked as having an external log; " "filesystem is marked as having an external log; "
"specify logdev on the mount command line."); "specify logdev on the mount command line.");
return XFS_ERROR(EINVAL); return -EINVAL;
} }
if (unlikely( if (unlikely(
...@@ -260,7 +260,7 @@ xfs_mount_validate_sb( ...@@ -260,7 +260,7 @@ xfs_mount_validate_sb(
xfs_warn(mp, xfs_warn(mp,
"filesystem is marked as having an internal log; " "filesystem is marked as having an internal log; "
"do not specify logdev on the mount command line."); "do not specify logdev on the mount command line.");
return XFS_ERROR(EINVAL); return -EINVAL;
} }
/* /*
...@@ -294,7 +294,7 @@ xfs_mount_validate_sb( ...@@ -294,7 +294,7 @@ xfs_mount_validate_sb(
sbp->sb_dblocks < XFS_MIN_DBLOCKS(sbp) || sbp->sb_dblocks < XFS_MIN_DBLOCKS(sbp) ||
sbp->sb_shared_vn != 0)) { sbp->sb_shared_vn != 0)) {
xfs_notice(mp, "SB sanity check failed"); xfs_notice(mp, "SB sanity check failed");
return XFS_ERROR(EFSCORRUPTED); return -EFSCORRUPTED;
} }
/* /*
...@@ -305,7 +305,7 @@ xfs_mount_validate_sb( ...@@ -305,7 +305,7 @@ xfs_mount_validate_sb(
"File system with blocksize %d bytes. " "File system with blocksize %d bytes. "
"Only pagesize (%ld) or less will currently work.", "Only pagesize (%ld) or less will currently work.",
sbp->sb_blocksize, PAGE_SIZE); sbp->sb_blocksize, PAGE_SIZE);
return XFS_ERROR(ENOSYS); return -ENOSYS;
} }
/* /*
...@@ -320,19 +320,19 @@ xfs_mount_validate_sb( ...@@ -320,19 +320,19 @@ xfs_mount_validate_sb(
default: default:
xfs_warn(mp, "inode size of %d bytes not supported", xfs_warn(mp, "inode size of %d bytes not supported",
sbp->sb_inodesize); sbp->sb_inodesize);
return XFS_ERROR(ENOSYS); return -ENOSYS;
} }
if (xfs_sb_validate_fsb_count(sbp, sbp->sb_dblocks) || if (xfs_sb_validate_fsb_count(sbp, sbp->sb_dblocks) ||
xfs_sb_validate_fsb_count(sbp, sbp->sb_rblocks)) { xfs_sb_validate_fsb_count(sbp, sbp->sb_rblocks)) {
xfs_warn(mp, xfs_warn(mp,
"file system too large to be mounted on this system."); "file system too large to be mounted on this system.");
return XFS_ERROR(EFBIG); return -EFBIG;
} }
if (check_inprogress && sbp->sb_inprogress) { if (check_inprogress && sbp->sb_inprogress) {
xfs_warn(mp, "Offline file system operation in progress!"); xfs_warn(mp, "Offline file system operation in progress!");
return XFS_ERROR(EFSCORRUPTED); return -EFSCORRUPTED;
} }
return 0; return 0;
} }
...@@ -386,10 +386,11 @@ xfs_sb_quota_from_disk(struct xfs_sb *sbp) ...@@ -386,10 +386,11 @@ xfs_sb_quota_from_disk(struct xfs_sb *sbp)
} }
} }
void static void
xfs_sb_from_disk( __xfs_sb_from_disk(
struct xfs_sb *to, struct xfs_sb *to,
xfs_dsb_t *from) xfs_dsb_t *from,
bool convert_xquota)
{ {
to->sb_magicnum = be32_to_cpu(from->sb_magicnum); to->sb_magicnum = be32_to_cpu(from->sb_magicnum);
to->sb_blocksize = be32_to_cpu(from->sb_blocksize); to->sb_blocksize = be32_to_cpu(from->sb_blocksize);
...@@ -445,6 +446,17 @@ xfs_sb_from_disk( ...@@ -445,6 +446,17 @@ xfs_sb_from_disk(
to->sb_pad = 0; to->sb_pad = 0;
to->sb_pquotino = be64_to_cpu(from->sb_pquotino); to->sb_pquotino = be64_to_cpu(from->sb_pquotino);
to->sb_lsn = be64_to_cpu(from->sb_lsn); to->sb_lsn = be64_to_cpu(from->sb_lsn);
/* Convert on-disk flags to in-memory flags? */
if (convert_xquota)
xfs_sb_quota_from_disk(to);
}
void
xfs_sb_from_disk(
struct xfs_sb *to,
xfs_dsb_t *from)
{
__xfs_sb_from_disk(to, from, true);
} }
static inline void static inline void
...@@ -577,7 +589,11 @@ xfs_sb_verify( ...@@ -577,7 +589,11 @@ xfs_sb_verify(
struct xfs_mount *mp = bp->b_target->bt_mount; struct xfs_mount *mp = bp->b_target->bt_mount;
struct xfs_sb sb; struct xfs_sb sb;
xfs_sb_from_disk(&sb, XFS_BUF_TO_SBP(bp)); /*
* Use call variant which doesn't convert quota flags from disk
* format, because xfs_mount_validate_sb checks the on-disk flags.
*/
__xfs_sb_from_disk(&sb, XFS_BUF_TO_SBP(bp), false);
/* /*
* Only check the in progress field for the primary superblock as * Only check the in progress field for the primary superblock as
...@@ -620,7 +636,7 @@ xfs_sb_read_verify( ...@@ -620,7 +636,7 @@ xfs_sb_read_verify(
/* Only fail bad secondaries on a known V5 filesystem */ /* Only fail bad secondaries on a known V5 filesystem */
if (bp->b_bn == XFS_SB_DADDR || if (bp->b_bn == XFS_SB_DADDR ||
xfs_sb_version_hascrc(&mp->m_sb)) { xfs_sb_version_hascrc(&mp->m_sb)) {
error = EFSBADCRC; error = -EFSBADCRC;
goto out_error; goto out_error;
} }
} }
...@@ -630,7 +646,7 @@ xfs_sb_read_verify( ...@@ -630,7 +646,7 @@ xfs_sb_read_verify(
out_error: out_error:
if (error) { if (error) {
xfs_buf_ioerror(bp, error); xfs_buf_ioerror(bp, error);
if (error == EFSCORRUPTED || error == EFSBADCRC) if (error == -EFSCORRUPTED || error == -EFSBADCRC)
xfs_verifier_error(bp); xfs_verifier_error(bp);
} }
} }
...@@ -653,7 +669,7 @@ xfs_sb_quiet_read_verify( ...@@ -653,7 +669,7 @@ xfs_sb_quiet_read_verify(
return; return;
} }
/* quietly fail */ /* quietly fail */
xfs_buf_ioerror(bp, EWRONGFS); xfs_buf_ioerror(bp, -EWRONGFS);
} }
static void static void
......
...@@ -87,11 +87,11 @@ struct xfs_trans; ...@@ -87,11 +87,11 @@ struct xfs_trans;
typedef struct xfs_sb { typedef struct xfs_sb {
__uint32_t sb_magicnum; /* magic number == XFS_SB_MAGIC */ __uint32_t sb_magicnum; /* magic number == XFS_SB_MAGIC */
__uint32_t sb_blocksize; /* logical block size, bytes */ __uint32_t sb_blocksize; /* logical block size, bytes */
xfs_drfsbno_t sb_dblocks; /* number of data blocks */ xfs_rfsblock_t sb_dblocks; /* number of data blocks */
xfs_drfsbno_t sb_rblocks; /* number of realtime blocks */ xfs_rfsblock_t sb_rblocks; /* number of realtime blocks */
xfs_drtbno_t sb_rextents; /* number of realtime extents */ xfs_rtblock_t sb_rextents; /* number of realtime extents */
uuid_t sb_uuid; /* file system unique id */ uuid_t sb_uuid; /* file system unique id */
xfs_dfsbno_t sb_logstart; /* starting block of log if internal */ xfs_fsblock_t sb_logstart; /* starting block of log if internal */
xfs_ino_t sb_rootino; /* root inode number */ xfs_ino_t sb_rootino; /* root inode number */
xfs_ino_t sb_rbmino; /* bitmap inode for realtime extents */ xfs_ino_t sb_rbmino; /* bitmap inode for realtime extents */
xfs_ino_t sb_rsumino; /* summary inode for rt bitmap */ xfs_ino_t sb_rsumino; /* summary inode for rt bitmap */
......
...@@ -133,9 +133,9 @@ xfs_symlink_read_verify( ...@@ -133,9 +133,9 @@ xfs_symlink_read_verify(
return; return;
if (!xfs_buf_verify_cksum(bp, XFS_SYMLINK_CRC_OFF)) if (!xfs_buf_verify_cksum(bp, XFS_SYMLINK_CRC_OFF))
xfs_buf_ioerror(bp, EFSBADCRC); xfs_buf_ioerror(bp, -EFSBADCRC);
else if (!xfs_symlink_verify(bp)) else if (!xfs_symlink_verify(bp))
xfs_buf_ioerror(bp, EFSCORRUPTED); xfs_buf_ioerror(bp, -EFSCORRUPTED);
if (bp->b_error) if (bp->b_error)
xfs_verifier_error(bp); xfs_verifier_error(bp);
...@@ -153,7 +153,7 @@ xfs_symlink_write_verify( ...@@ -153,7 +153,7 @@ xfs_symlink_write_verify(
return; return;
if (!xfs_symlink_verify(bp)) { if (!xfs_symlink_verify(bp)) {
xfs_buf_ioerror(bp, EFSCORRUPTED); xfs_buf_ioerror(bp, -EFSCORRUPTED);
xfs_verifier_error(bp); xfs_verifier_error(bp);
return; return;
} }
......
...@@ -152,7 +152,7 @@ xfs_get_acl(struct inode *inode, int type) ...@@ -152,7 +152,7 @@ xfs_get_acl(struct inode *inode, int type)
if (!xfs_acl) if (!xfs_acl)
return ERR_PTR(-ENOMEM); return ERR_PTR(-ENOMEM);
error = -xfs_attr_get(ip, ea_name, (unsigned char *)xfs_acl, error = xfs_attr_get(ip, ea_name, (unsigned char *)xfs_acl,
&len, ATTR_ROOT); &len, ATTR_ROOT);
if (error) { if (error) {
/* /*
...@@ -210,7 +210,7 @@ __xfs_set_acl(struct inode *inode, int type, struct posix_acl *acl) ...@@ -210,7 +210,7 @@ __xfs_set_acl(struct inode *inode, int type, struct posix_acl *acl)
len -= sizeof(struct xfs_acl_entry) * len -= sizeof(struct xfs_acl_entry) *
(XFS_ACL_MAX_ENTRIES(ip->i_mount) - acl->a_count); (XFS_ACL_MAX_ENTRIES(ip->i_mount) - acl->a_count);
error = -xfs_attr_set(ip, ea_name, (unsigned char *)xfs_acl, error = xfs_attr_set(ip, ea_name, (unsigned char *)xfs_acl,
len, ATTR_ROOT); len, ATTR_ROOT);
kmem_free(xfs_acl); kmem_free(xfs_acl);
...@@ -218,7 +218,7 @@ __xfs_set_acl(struct inode *inode, int type, struct posix_acl *acl) ...@@ -218,7 +218,7 @@ __xfs_set_acl(struct inode *inode, int type, struct posix_acl *acl)
/* /*
* A NULL ACL argument means we want to remove the ACL. * A NULL ACL argument means we want to remove the ACL.
*/ */
error = -xfs_attr_remove(ip, ea_name, ATTR_ROOT); error = xfs_attr_remove(ip, ea_name, ATTR_ROOT);
/* /*
* If the attribute didn't exist to start with that's fine. * If the attribute didn't exist to start with that's fine.
...@@ -244,7 +244,7 @@ xfs_set_mode(struct inode *inode, umode_t mode) ...@@ -244,7 +244,7 @@ xfs_set_mode(struct inode *inode, umode_t mode)
iattr.ia_mode = mode; iattr.ia_mode = mode;
iattr.ia_ctime = current_fs_time(inode->i_sb); iattr.ia_ctime = current_fs_time(inode->i_sb);
error = -xfs_setattr_nonsize(XFS_I(inode), &iattr, XFS_ATTR_NOACL); error = xfs_setattr_nonsize(XFS_I(inode), &iattr, XFS_ATTR_NOACL);
} }
return error; return error;
......
...@@ -240,7 +240,7 @@ xfs_end_io( ...@@ -240,7 +240,7 @@ xfs_end_io(
done: done:
if (error) if (error)
ioend->io_error = -error; ioend->io_error = error;
xfs_destroy_ioend(ioend); xfs_destroy_ioend(ioend);
} }
...@@ -308,14 +308,14 @@ xfs_map_blocks( ...@@ -308,14 +308,14 @@ xfs_map_blocks(
int nimaps = 1; int nimaps = 1;
if (XFS_FORCED_SHUTDOWN(mp)) if (XFS_FORCED_SHUTDOWN(mp))
return -XFS_ERROR(EIO); return -EIO;
if (type == XFS_IO_UNWRITTEN) if (type == XFS_IO_UNWRITTEN)
bmapi_flags |= XFS_BMAPI_IGSTATE; bmapi_flags |= XFS_BMAPI_IGSTATE;
if (!xfs_ilock_nowait(ip, XFS_ILOCK_SHARED)) { if (!xfs_ilock_nowait(ip, XFS_ILOCK_SHARED)) {
if (nonblocking) if (nonblocking)
return -XFS_ERROR(EAGAIN); return -EAGAIN;
xfs_ilock(ip, XFS_ILOCK_SHARED); xfs_ilock(ip, XFS_ILOCK_SHARED);
} }
...@@ -332,14 +332,14 @@ xfs_map_blocks( ...@@ -332,14 +332,14 @@ xfs_map_blocks(
xfs_iunlock(ip, XFS_ILOCK_SHARED); xfs_iunlock(ip, XFS_ILOCK_SHARED);
if (error) if (error)
return -XFS_ERROR(error); return error;
if (type == XFS_IO_DELALLOC && if (type == XFS_IO_DELALLOC &&
(!nimaps || isnullstartblock(imap->br_startblock))) { (!nimaps || isnullstartblock(imap->br_startblock))) {
error = xfs_iomap_write_allocate(ip, offset, imap); error = xfs_iomap_write_allocate(ip, offset, imap);
if (!error) if (!error)
trace_xfs_map_blocks_alloc(ip, offset, count, type, imap); trace_xfs_map_blocks_alloc(ip, offset, count, type, imap);
return -XFS_ERROR(error); return error;
} }
#ifdef DEBUG #ifdef DEBUG
...@@ -502,7 +502,7 @@ xfs_submit_ioend( ...@@ -502,7 +502,7 @@ xfs_submit_ioend(
* time. * time.
*/ */
if (fail) { if (fail) {
ioend->io_error = -fail; ioend->io_error = fail;
xfs_finish_ioend(ioend); xfs_finish_ioend(ioend);
continue; continue;
} }
...@@ -1253,7 +1253,7 @@ __xfs_get_blocks( ...@@ -1253,7 +1253,7 @@ __xfs_get_blocks(
int new = 0; int new = 0;
if (XFS_FORCED_SHUTDOWN(mp)) if (XFS_FORCED_SHUTDOWN(mp))
return -XFS_ERROR(EIO); return -EIO;
offset = (xfs_off_t)iblock << inode->i_blkbits; offset = (xfs_off_t)iblock << inode->i_blkbits;
ASSERT(bh_result->b_size >= (1 << inode->i_blkbits)); ASSERT(bh_result->b_size >= (1 << inode->i_blkbits));
...@@ -1302,7 +1302,7 @@ __xfs_get_blocks( ...@@ -1302,7 +1302,7 @@ __xfs_get_blocks(
error = xfs_iomap_write_direct(ip, offset, size, error = xfs_iomap_write_direct(ip, offset, size,
&imap, nimaps); &imap, nimaps);
if (error) if (error)
return -error; return error;
new = 1; new = 1;
} else { } else {
/* /*
...@@ -1415,7 +1415,7 @@ __xfs_get_blocks( ...@@ -1415,7 +1415,7 @@ __xfs_get_blocks(
out_unlock: out_unlock:
xfs_iunlock(ip, lockmode); xfs_iunlock(ip, lockmode);
return -error; return error;
} }
int int
......
...@@ -76,7 +76,7 @@ xfs_attr3_leaf_freextent( ...@@ -76,7 +76,7 @@ xfs_attr3_leaf_freextent(
error = xfs_bmapi_read(dp, (xfs_fileoff_t)tblkno, tblkcnt, error = xfs_bmapi_read(dp, (xfs_fileoff_t)tblkno, tblkcnt,
&map, &nmap, XFS_BMAPI_ATTRFORK); &map, &nmap, XFS_BMAPI_ATTRFORK);
if (error) { if (error) {
return(error); return error;
} }
ASSERT(nmap == 1); ASSERT(nmap == 1);
ASSERT(map.br_startblock != DELAYSTARTBLOCK); ASSERT(map.br_startblock != DELAYSTARTBLOCK);
...@@ -95,21 +95,21 @@ xfs_attr3_leaf_freextent( ...@@ -95,21 +95,21 @@ xfs_attr3_leaf_freextent(
dp->i_mount->m_ddev_targp, dp->i_mount->m_ddev_targp,
dblkno, dblkcnt, 0); dblkno, dblkcnt, 0);
if (!bp) if (!bp)
return ENOMEM; return -ENOMEM;
xfs_trans_binval(*trans, bp); xfs_trans_binval(*trans, bp);
/* /*
* Roll to next transaction. * Roll to next transaction.
*/ */
error = xfs_trans_roll(trans, dp); error = xfs_trans_roll(trans, dp);
if (error) if (error)
return (error); return error;
} }
tblkno += map.br_blockcount; tblkno += map.br_blockcount;
tblkcnt -= map.br_blockcount; tblkcnt -= map.br_blockcount;
} }
return(0); return 0;
} }
/* /*
...@@ -227,7 +227,7 @@ xfs_attr3_node_inactive( ...@@ -227,7 +227,7 @@ xfs_attr3_node_inactive(
*/ */
if (level > XFS_DA_NODE_MAXDEPTH) { if (level > XFS_DA_NODE_MAXDEPTH) {
xfs_trans_brelse(*trans, bp); /* no locks for later trans */ xfs_trans_brelse(*trans, bp); /* no locks for later trans */
return XFS_ERROR(EIO); return -EIO;
} }
node = bp->b_addr; node = bp->b_addr;
...@@ -256,7 +256,7 @@ xfs_attr3_node_inactive( ...@@ -256,7 +256,7 @@ xfs_attr3_node_inactive(
error = xfs_da3_node_read(*trans, dp, child_fsb, -2, &child_bp, error = xfs_da3_node_read(*trans, dp, child_fsb, -2, &child_bp,
XFS_ATTR_FORK); XFS_ATTR_FORK);
if (error) if (error)
return(error); return error;
if (child_bp) { if (child_bp) {
/* save for re-read later */ /* save for re-read later */
child_blkno = XFS_BUF_ADDR(child_bp); child_blkno = XFS_BUF_ADDR(child_bp);
...@@ -277,7 +277,7 @@ xfs_attr3_node_inactive( ...@@ -277,7 +277,7 @@ xfs_attr3_node_inactive(
child_bp); child_bp);
break; break;
default: default:
error = XFS_ERROR(EIO); error = -EIO;
xfs_trans_brelse(*trans, child_bp); xfs_trans_brelse(*trans, child_bp);
break; break;
} }
...@@ -360,7 +360,7 @@ xfs_attr3_root_inactive( ...@@ -360,7 +360,7 @@ xfs_attr3_root_inactive(
error = xfs_attr3_leaf_inactive(trans, dp, bp); error = xfs_attr3_leaf_inactive(trans, dp, bp);
break; break;
default: default:
error = XFS_ERROR(EIO); error = -EIO;
xfs_trans_brelse(*trans, bp); xfs_trans_brelse(*trans, bp);
break; break;
} }
...@@ -414,7 +414,7 @@ xfs_attr_inactive(xfs_inode_t *dp) ...@@ -414,7 +414,7 @@ xfs_attr_inactive(xfs_inode_t *dp)
error = xfs_trans_reserve(trans, &M_RES(mp)->tr_attrinval, 0, 0); error = xfs_trans_reserve(trans, &M_RES(mp)->tr_attrinval, 0, 0);
if (error) { if (error) {
xfs_trans_cancel(trans, 0); xfs_trans_cancel(trans, 0);
return(error); return error;
} }
xfs_ilock(dp, XFS_ILOCK_EXCL); xfs_ilock(dp, XFS_ILOCK_EXCL);
...@@ -443,10 +443,10 @@ xfs_attr_inactive(xfs_inode_t *dp) ...@@ -443,10 +443,10 @@ xfs_attr_inactive(xfs_inode_t *dp)
error = xfs_trans_commit(trans, XFS_TRANS_RELEASE_LOG_RES); error = xfs_trans_commit(trans, XFS_TRANS_RELEASE_LOG_RES);
xfs_iunlock(dp, XFS_ILOCK_EXCL); xfs_iunlock(dp, XFS_ILOCK_EXCL);
return(error); return error;
out: out:
xfs_trans_cancel(trans, XFS_TRANS_RELEASE_LOG_RES|XFS_TRANS_ABORT); xfs_trans_cancel(trans, XFS_TRANS_RELEASE_LOG_RES|XFS_TRANS_ABORT);
xfs_iunlock(dp, XFS_ILOCK_EXCL); xfs_iunlock(dp, XFS_ILOCK_EXCL);
return(error); return error;
} }
...@@ -50,11 +50,11 @@ xfs_attr_shortform_compare(const void *a, const void *b) ...@@ -50,11 +50,11 @@ xfs_attr_shortform_compare(const void *a, const void *b)
sa = (xfs_attr_sf_sort_t *)a; sa = (xfs_attr_sf_sort_t *)a;
sb = (xfs_attr_sf_sort_t *)b; sb = (xfs_attr_sf_sort_t *)b;
if (sa->hash < sb->hash) { if (sa->hash < sb->hash) {
return(-1); return -1;
} else if (sa->hash > sb->hash) { } else if (sa->hash > sb->hash) {
return(1); return 1;
} else { } else {
return(sa->entno - sb->entno); return sa->entno - sb->entno;
} }
} }
...@@ -86,7 +86,7 @@ xfs_attr_shortform_list(xfs_attr_list_context_t *context) ...@@ -86,7 +86,7 @@ xfs_attr_shortform_list(xfs_attr_list_context_t *context)
sf = (xfs_attr_shortform_t *)dp->i_afp->if_u1.if_data; sf = (xfs_attr_shortform_t *)dp->i_afp->if_u1.if_data;
ASSERT(sf != NULL); ASSERT(sf != NULL);
if (!sf->hdr.count) if (!sf->hdr.count)
return(0); return 0;
cursor = context->cursor; cursor = context->cursor;
ASSERT(cursor != NULL); ASSERT(cursor != NULL);
...@@ -124,7 +124,7 @@ xfs_attr_shortform_list(xfs_attr_list_context_t *context) ...@@ -124,7 +124,7 @@ xfs_attr_shortform_list(xfs_attr_list_context_t *context)
sfe = XFS_ATTR_SF_NEXTENTRY(sfe); sfe = XFS_ATTR_SF_NEXTENTRY(sfe);
} }
trace_xfs_attr_list_sf_all(context); trace_xfs_attr_list_sf_all(context);
return(0); return 0;
} }
/* do no more for a search callback */ /* do no more for a search callback */
...@@ -150,7 +150,7 @@ xfs_attr_shortform_list(xfs_attr_list_context_t *context) ...@@ -150,7 +150,7 @@ xfs_attr_shortform_list(xfs_attr_list_context_t *context)
XFS_ERRLEVEL_LOW, XFS_ERRLEVEL_LOW,
context->dp->i_mount, sfe); context->dp->i_mount, sfe);
kmem_free(sbuf); kmem_free(sbuf);
return XFS_ERROR(EFSCORRUPTED); return -EFSCORRUPTED;
} }
sbp->entno = i; sbp->entno = i;
...@@ -188,7 +188,7 @@ xfs_attr_shortform_list(xfs_attr_list_context_t *context) ...@@ -188,7 +188,7 @@ xfs_attr_shortform_list(xfs_attr_list_context_t *context)
} }
if (i == nsbuf) { if (i == nsbuf) {
kmem_free(sbuf); kmem_free(sbuf);
return(0); return 0;
} }
/* /*
...@@ -213,7 +213,7 @@ xfs_attr_shortform_list(xfs_attr_list_context_t *context) ...@@ -213,7 +213,7 @@ xfs_attr_shortform_list(xfs_attr_list_context_t *context)
} }
kmem_free(sbuf); kmem_free(sbuf);
return(0); return 0;
} }
STATIC int STATIC int
...@@ -243,8 +243,8 @@ xfs_attr_node_list(xfs_attr_list_context_t *context) ...@@ -243,8 +243,8 @@ xfs_attr_node_list(xfs_attr_list_context_t *context)
if (cursor->blkno > 0) { if (cursor->blkno > 0) {
error = xfs_da3_node_read(NULL, dp, cursor->blkno, -1, error = xfs_da3_node_read(NULL, dp, cursor->blkno, -1,
&bp, XFS_ATTR_FORK); &bp, XFS_ATTR_FORK);
if ((error != 0) && (error != EFSCORRUPTED)) if ((error != 0) && (error != -EFSCORRUPTED))
return(error); return error;
if (bp) { if (bp) {
struct xfs_attr_leaf_entry *entries; struct xfs_attr_leaf_entry *entries;
...@@ -295,7 +295,7 @@ xfs_attr_node_list(xfs_attr_list_context_t *context) ...@@ -295,7 +295,7 @@ xfs_attr_node_list(xfs_attr_list_context_t *context)
cursor->blkno, -1, &bp, cursor->blkno, -1, &bp,
XFS_ATTR_FORK); XFS_ATTR_FORK);
if (error) if (error)
return(error); return error;
node = bp->b_addr; node = bp->b_addr;
magic = be16_to_cpu(node->hdr.info.magic); magic = be16_to_cpu(node->hdr.info.magic);
if (magic == XFS_ATTR_LEAF_MAGIC || if (magic == XFS_ATTR_LEAF_MAGIC ||
...@@ -308,7 +308,7 @@ xfs_attr_node_list(xfs_attr_list_context_t *context) ...@@ -308,7 +308,7 @@ xfs_attr_node_list(xfs_attr_list_context_t *context)
context->dp->i_mount, context->dp->i_mount,
node); node);
xfs_trans_brelse(NULL, bp); xfs_trans_brelse(NULL, bp);
return XFS_ERROR(EFSCORRUPTED); return -EFSCORRUPTED;
} }
dp->d_ops->node_hdr_from_disk(&nodehdr, node); dp->d_ops->node_hdr_from_disk(&nodehdr, node);
...@@ -496,11 +496,11 @@ xfs_attr_leaf_list(xfs_attr_list_context_t *context) ...@@ -496,11 +496,11 @@ xfs_attr_leaf_list(xfs_attr_list_context_t *context)
context->cursor->blkno = 0; context->cursor->blkno = 0;
error = xfs_attr3_leaf_read(NULL, context->dp, 0, -1, &bp); error = xfs_attr3_leaf_read(NULL, context->dp, 0, -1, &bp);
if (error) if (error)
return XFS_ERROR(error); return error;
error = xfs_attr3_leaf_list_int(bp, context); error = xfs_attr3_leaf_list_int(bp, context);
xfs_trans_brelse(NULL, bp); xfs_trans_brelse(NULL, bp);
return XFS_ERROR(error); return error;
} }
int int
...@@ -514,7 +514,7 @@ xfs_attr_list_int( ...@@ -514,7 +514,7 @@ xfs_attr_list_int(
XFS_STATS_INC(xs_attr_list); XFS_STATS_INC(xs_attr_list);
if (XFS_FORCED_SHUTDOWN(dp->i_mount)) if (XFS_FORCED_SHUTDOWN(dp->i_mount))
return EIO; return -EIO;
/* /*
* Decide on what work routines to call based on the inode size. * Decide on what work routines to call based on the inode size.
...@@ -616,16 +616,16 @@ xfs_attr_list( ...@@ -616,16 +616,16 @@ xfs_attr_list(
* Validate the cursor. * Validate the cursor.
*/ */
if (cursor->pad1 || cursor->pad2) if (cursor->pad1 || cursor->pad2)
return(XFS_ERROR(EINVAL)); return -EINVAL;
if ((cursor->initted == 0) && if ((cursor->initted == 0) &&
(cursor->hashval || cursor->blkno || cursor->offset)) (cursor->hashval || cursor->blkno || cursor->offset))
return XFS_ERROR(EINVAL); return -EINVAL;
/* /*
* Check for a properly aligned buffer. * Check for a properly aligned buffer.
*/ */
if (((long)buffer) & (sizeof(int)-1)) if (((long)buffer) & (sizeof(int)-1))
return XFS_ERROR(EFAULT); return -EFAULT;
if (flags & ATTR_KERNOVAL) if (flags & ATTR_KERNOVAL)
bufsize = 0; bufsize = 0;
...@@ -648,6 +648,6 @@ xfs_attr_list( ...@@ -648,6 +648,6 @@ xfs_attr_list(
alist->al_offset[0] = context.bufsize; alist->al_offset[0] = context.bufsize;
error = xfs_attr_list_int(&context); error = xfs_attr_list_int(&context);
ASSERT(error >= 0); ASSERT(error <= 0);
return error; return error;
} }
...@@ -133,7 +133,7 @@ xfs_bmap_finish( ...@@ -133,7 +133,7 @@ xfs_bmap_finish(
mp = ntp->t_mountp; mp = ntp->t_mountp;
if (!XFS_FORCED_SHUTDOWN(mp)) if (!XFS_FORCED_SHUTDOWN(mp))
xfs_force_shutdown(mp, xfs_force_shutdown(mp,
(error == EFSCORRUPTED) ? (error == -EFSCORRUPTED) ?
SHUTDOWN_CORRUPT_INCORE : SHUTDOWN_CORRUPT_INCORE :
SHUTDOWN_META_IO_ERROR); SHUTDOWN_META_IO_ERROR);
return error; return error;
...@@ -365,7 +365,7 @@ xfs_bmap_count_tree( ...@@ -365,7 +365,7 @@ xfs_bmap_count_tree(
xfs_trans_brelse(tp, bp); xfs_trans_brelse(tp, bp);
XFS_ERROR_REPORT("xfs_bmap_count_tree(1)", XFS_ERROR_REPORT("xfs_bmap_count_tree(1)",
XFS_ERRLEVEL_LOW, mp); XFS_ERRLEVEL_LOW, mp);
return XFS_ERROR(EFSCORRUPTED); return -EFSCORRUPTED;
} }
xfs_trans_brelse(tp, bp); xfs_trans_brelse(tp, bp);
} else { } else {
...@@ -425,14 +425,14 @@ xfs_bmap_count_blocks( ...@@ -425,14 +425,14 @@ xfs_bmap_count_blocks(
ASSERT(level > 0); ASSERT(level > 0);
pp = XFS_BMAP_BROOT_PTR_ADDR(mp, block, 1, ifp->if_broot_bytes); pp = XFS_BMAP_BROOT_PTR_ADDR(mp, block, 1, ifp->if_broot_bytes);
bno = be64_to_cpu(*pp); bno = be64_to_cpu(*pp);
ASSERT(bno != NULLDFSBNO); ASSERT(bno != NULLFSBLOCK);
ASSERT(XFS_FSB_TO_AGNO(mp, bno) < mp->m_sb.sb_agcount); ASSERT(XFS_FSB_TO_AGNO(mp, bno) < mp->m_sb.sb_agcount);
ASSERT(XFS_FSB_TO_AGBNO(mp, bno) < mp->m_sb.sb_agblocks); ASSERT(XFS_FSB_TO_AGBNO(mp, bno) < mp->m_sb.sb_agblocks);
if (unlikely(xfs_bmap_count_tree(mp, tp, ifp, bno, level, count) < 0)) { if (unlikely(xfs_bmap_count_tree(mp, tp, ifp, bno, level, count) < 0)) {
XFS_ERROR_REPORT("xfs_bmap_count_blocks(2)", XFS_ERRLEVEL_LOW, XFS_ERROR_REPORT("xfs_bmap_count_blocks(2)", XFS_ERRLEVEL_LOW,
mp); mp);
return XFS_ERROR(EFSCORRUPTED); return -EFSCORRUPTED;
} }
return 0; return 0;
...@@ -524,13 +524,13 @@ xfs_getbmap( ...@@ -524,13 +524,13 @@ xfs_getbmap(
if (ip->i_d.di_aformat != XFS_DINODE_FMT_EXTENTS && if (ip->i_d.di_aformat != XFS_DINODE_FMT_EXTENTS &&
ip->i_d.di_aformat != XFS_DINODE_FMT_BTREE && ip->i_d.di_aformat != XFS_DINODE_FMT_BTREE &&
ip->i_d.di_aformat != XFS_DINODE_FMT_LOCAL) ip->i_d.di_aformat != XFS_DINODE_FMT_LOCAL)
return XFS_ERROR(EINVAL); return -EINVAL;
} else if (unlikely( } else if (unlikely(
ip->i_d.di_aformat != 0 && ip->i_d.di_aformat != 0 &&
ip->i_d.di_aformat != XFS_DINODE_FMT_EXTENTS)) { ip->i_d.di_aformat != XFS_DINODE_FMT_EXTENTS)) {
XFS_ERROR_REPORT("xfs_getbmap", XFS_ERRLEVEL_LOW, XFS_ERROR_REPORT("xfs_getbmap", XFS_ERRLEVEL_LOW,
ip->i_mount); ip->i_mount);
return XFS_ERROR(EFSCORRUPTED); return -EFSCORRUPTED;
} }
prealloced = 0; prealloced = 0;
...@@ -539,7 +539,7 @@ xfs_getbmap( ...@@ -539,7 +539,7 @@ xfs_getbmap(
if (ip->i_d.di_format != XFS_DINODE_FMT_EXTENTS && if (ip->i_d.di_format != XFS_DINODE_FMT_EXTENTS &&
ip->i_d.di_format != XFS_DINODE_FMT_BTREE && ip->i_d.di_format != XFS_DINODE_FMT_BTREE &&
ip->i_d.di_format != XFS_DINODE_FMT_LOCAL) ip->i_d.di_format != XFS_DINODE_FMT_LOCAL)
return XFS_ERROR(EINVAL); return -EINVAL;
if (xfs_get_extsz_hint(ip) || if (xfs_get_extsz_hint(ip) ||
ip->i_d.di_flags & (XFS_DIFLAG_PREALLOC|XFS_DIFLAG_APPEND)){ ip->i_d.di_flags & (XFS_DIFLAG_PREALLOC|XFS_DIFLAG_APPEND)){
...@@ -559,26 +559,26 @@ xfs_getbmap( ...@@ -559,26 +559,26 @@ xfs_getbmap(
bmv->bmv_entries = 0; bmv->bmv_entries = 0;
return 0; return 0;
} else if (bmv->bmv_length < 0) { } else if (bmv->bmv_length < 0) {
return XFS_ERROR(EINVAL); return -EINVAL;
} }
nex = bmv->bmv_count - 1; nex = bmv->bmv_count - 1;
if (nex <= 0) if (nex <= 0)
return XFS_ERROR(EINVAL); return -EINVAL;
bmvend = bmv->bmv_offset + bmv->bmv_length; bmvend = bmv->bmv_offset + bmv->bmv_length;
if (bmv->bmv_count > ULONG_MAX / sizeof(struct getbmapx)) if (bmv->bmv_count > ULONG_MAX / sizeof(struct getbmapx))
return XFS_ERROR(ENOMEM); return -ENOMEM;
out = kmem_zalloc_large(bmv->bmv_count * sizeof(struct getbmapx), 0); out = kmem_zalloc_large(bmv->bmv_count * sizeof(struct getbmapx), 0);
if (!out) if (!out)
return XFS_ERROR(ENOMEM); return -ENOMEM;
xfs_ilock(ip, XFS_IOLOCK_SHARED); xfs_ilock(ip, XFS_IOLOCK_SHARED);
if (whichfork == XFS_DATA_FORK) { if (whichfork == XFS_DATA_FORK) {
if (!(iflags & BMV_IF_DELALLOC) && if (!(iflags & BMV_IF_DELALLOC) &&
(ip->i_delayed_blks || XFS_ISIZE(ip) > ip->i_d.di_size)) { (ip->i_delayed_blks || XFS_ISIZE(ip) > ip->i_d.di_size)) {
error = -filemap_write_and_wait(VFS_I(ip)->i_mapping); error = filemap_write_and_wait(VFS_I(ip)->i_mapping);
if (error) if (error)
goto out_unlock_iolock; goto out_unlock_iolock;
...@@ -611,7 +611,7 @@ xfs_getbmap( ...@@ -611,7 +611,7 @@ xfs_getbmap(
/* /*
* Allocate enough space to handle "subnex" maps at a time. * Allocate enough space to handle "subnex" maps at a time.
*/ */
error = ENOMEM; error = -ENOMEM;
subnex = 16; subnex = 16;
map = kmem_alloc(subnex * sizeof(*map), KM_MAYFAIL | KM_NOFS); map = kmem_alloc(subnex * sizeof(*map), KM_MAYFAIL | KM_NOFS);
if (!map) if (!map)
...@@ -809,7 +809,7 @@ xfs_can_free_eofblocks(struct xfs_inode *ip, bool force) ...@@ -809,7 +809,7 @@ xfs_can_free_eofblocks(struct xfs_inode *ip, bool force)
* have speculative prealloc/delalloc blocks to remove. * have speculative prealloc/delalloc blocks to remove.
*/ */
if (VFS_I(ip)->i_size == 0 && if (VFS_I(ip)->i_size == 0 &&
VN_CACHED(VFS_I(ip)) == 0 && VFS_I(ip)->i_mapping->nrpages == 0 &&
ip->i_delayed_blks == 0) ip->i_delayed_blks == 0)
return false; return false;
...@@ -882,7 +882,7 @@ xfs_free_eofblocks( ...@@ -882,7 +882,7 @@ xfs_free_eofblocks(
if (need_iolock) { if (need_iolock) {
if (!xfs_ilock_nowait(ip, XFS_IOLOCK_EXCL)) { if (!xfs_ilock_nowait(ip, XFS_IOLOCK_EXCL)) {
xfs_trans_cancel(tp, 0); xfs_trans_cancel(tp, 0);
return EAGAIN; return -EAGAIN;
} }
} }
...@@ -955,14 +955,14 @@ xfs_alloc_file_space( ...@@ -955,14 +955,14 @@ xfs_alloc_file_space(
trace_xfs_alloc_file_space(ip); trace_xfs_alloc_file_space(ip);
if (XFS_FORCED_SHUTDOWN(mp)) if (XFS_FORCED_SHUTDOWN(mp))
return XFS_ERROR(EIO); return -EIO;
error = xfs_qm_dqattach(ip, 0); error = xfs_qm_dqattach(ip, 0);
if (error) if (error)
return error; return error;
if (len <= 0) if (len <= 0)
return XFS_ERROR(EINVAL); return -EINVAL;
rt = XFS_IS_REALTIME_INODE(ip); rt = XFS_IS_REALTIME_INODE(ip);
extsz = xfs_get_extsz_hint(ip); extsz = xfs_get_extsz_hint(ip);
...@@ -1028,7 +1028,7 @@ xfs_alloc_file_space( ...@@ -1028,7 +1028,7 @@ xfs_alloc_file_space(
/* /*
* Free the transaction structure. * Free the transaction structure.
*/ */
ASSERT(error == ENOSPC || XFS_FORCED_SHUTDOWN(mp)); ASSERT(error == -ENOSPC || XFS_FORCED_SHUTDOWN(mp));
xfs_trans_cancel(tp, 0); xfs_trans_cancel(tp, 0);
break; break;
} }
...@@ -1065,7 +1065,7 @@ xfs_alloc_file_space( ...@@ -1065,7 +1065,7 @@ xfs_alloc_file_space(
allocated_fsb = imapp->br_blockcount; allocated_fsb = imapp->br_blockcount;
if (nimaps == 0) { if (nimaps == 0) {
error = XFS_ERROR(ENOSPC); error = -ENOSPC;
break; break;
} }
...@@ -1126,7 +1126,7 @@ xfs_zero_remaining_bytes( ...@@ -1126,7 +1126,7 @@ xfs_zero_remaining_bytes(
mp->m_rtdev_targp : mp->m_ddev_targp, mp->m_rtdev_targp : mp->m_ddev_targp,
BTOBB(mp->m_sb.sb_blocksize), 0); BTOBB(mp->m_sb.sb_blocksize), 0);
if (!bp) if (!bp)
return XFS_ERROR(ENOMEM); return -ENOMEM;
xfs_buf_unlock(bp); xfs_buf_unlock(bp);
...@@ -1158,7 +1158,7 @@ xfs_zero_remaining_bytes( ...@@ -1158,7 +1158,7 @@ xfs_zero_remaining_bytes(
XFS_BUF_SET_ADDR(bp, xfs_fsb_to_db(ip, imap.br_startblock)); XFS_BUF_SET_ADDR(bp, xfs_fsb_to_db(ip, imap.br_startblock));
if (XFS_FORCED_SHUTDOWN(mp)) { if (XFS_FORCED_SHUTDOWN(mp)) {
error = XFS_ERROR(EIO); error = -EIO;
break; break;
} }
xfs_buf_iorequest(bp); xfs_buf_iorequest(bp);
...@@ -1176,7 +1176,7 @@ xfs_zero_remaining_bytes( ...@@ -1176,7 +1176,7 @@ xfs_zero_remaining_bytes(
XFS_BUF_WRITE(bp); XFS_BUF_WRITE(bp);
if (XFS_FORCED_SHUTDOWN(mp)) { if (XFS_FORCED_SHUTDOWN(mp)) {
error = XFS_ERROR(EIO); error = -EIO;
break; break;
} }
xfs_buf_iorequest(bp); xfs_buf_iorequest(bp);
...@@ -1234,7 +1234,7 @@ xfs_free_file_space( ...@@ -1234,7 +1234,7 @@ xfs_free_file_space(
rounding = max_t(xfs_off_t, 1 << mp->m_sb.sb_blocklog, PAGE_CACHE_SIZE); rounding = max_t(xfs_off_t, 1 << mp->m_sb.sb_blocklog, PAGE_CACHE_SIZE);
ioffset = offset & ~(rounding - 1); ioffset = offset & ~(rounding - 1);
error = -filemap_write_and_wait_range(VFS_I(ip)->i_mapping, error = filemap_write_and_wait_range(VFS_I(ip)->i_mapping,
ioffset, -1); ioffset, -1);
if (error) if (error)
goto out; goto out;
...@@ -1315,7 +1315,7 @@ xfs_free_file_space( ...@@ -1315,7 +1315,7 @@ xfs_free_file_space(
/* /*
* Free the transaction structure. * Free the transaction structure.
*/ */
ASSERT(error == ENOSPC || XFS_FORCED_SHUTDOWN(mp)); ASSERT(error == -ENOSPC || XFS_FORCED_SHUTDOWN(mp));
xfs_trans_cancel(tp, 0); xfs_trans_cancel(tp, 0);
break; break;
} }
...@@ -1557,14 +1557,14 @@ xfs_swap_extents_check_format( ...@@ -1557,14 +1557,14 @@ xfs_swap_extents_check_format(
/* Should never get a local format */ /* Should never get a local format */
if (ip->i_d.di_format == XFS_DINODE_FMT_LOCAL || if (ip->i_d.di_format == XFS_DINODE_FMT_LOCAL ||
tip->i_d.di_format == XFS_DINODE_FMT_LOCAL) tip->i_d.di_format == XFS_DINODE_FMT_LOCAL)
return EINVAL; return -EINVAL;
/* /*
* if the target inode has less extents that then temporary inode then * if the target inode has less extents that then temporary inode then
* why did userspace call us? * why did userspace call us?
*/ */
if (ip->i_d.di_nextents < tip->i_d.di_nextents) if (ip->i_d.di_nextents < tip->i_d.di_nextents)
return EINVAL; return -EINVAL;
/* /*
* if the target inode is in extent form and the temp inode is in btree * if the target inode is in extent form and the temp inode is in btree
...@@ -1573,19 +1573,19 @@ xfs_swap_extents_check_format( ...@@ -1573,19 +1573,19 @@ xfs_swap_extents_check_format(
*/ */
if (ip->i_d.di_format == XFS_DINODE_FMT_EXTENTS && if (ip->i_d.di_format == XFS_DINODE_FMT_EXTENTS &&
tip->i_d.di_format == XFS_DINODE_FMT_BTREE) tip->i_d.di_format == XFS_DINODE_FMT_BTREE)
return EINVAL; return -EINVAL;
/* Check temp in extent form to max in target */ /* Check temp in extent form to max in target */
if (tip->i_d.di_format == XFS_DINODE_FMT_EXTENTS && if (tip->i_d.di_format == XFS_DINODE_FMT_EXTENTS &&
XFS_IFORK_NEXTENTS(tip, XFS_DATA_FORK) > XFS_IFORK_NEXTENTS(tip, XFS_DATA_FORK) >
XFS_IFORK_MAXEXT(ip, XFS_DATA_FORK)) XFS_IFORK_MAXEXT(ip, XFS_DATA_FORK))
return EINVAL; return -EINVAL;
/* Check target in extent form to max in temp */ /* Check target in extent form to max in temp */
if (ip->i_d.di_format == XFS_DINODE_FMT_EXTENTS && if (ip->i_d.di_format == XFS_DINODE_FMT_EXTENTS &&
XFS_IFORK_NEXTENTS(ip, XFS_DATA_FORK) > XFS_IFORK_NEXTENTS(ip, XFS_DATA_FORK) >
XFS_IFORK_MAXEXT(tip, XFS_DATA_FORK)) XFS_IFORK_MAXEXT(tip, XFS_DATA_FORK))
return EINVAL; return -EINVAL;
/* /*
* If we are in a btree format, check that the temp root block will fit * If we are in a btree format, check that the temp root block will fit
...@@ -1599,25 +1599,49 @@ xfs_swap_extents_check_format( ...@@ -1599,25 +1599,49 @@ xfs_swap_extents_check_format(
if (tip->i_d.di_format == XFS_DINODE_FMT_BTREE) { if (tip->i_d.di_format == XFS_DINODE_FMT_BTREE) {
if (XFS_IFORK_BOFF(ip) && if (XFS_IFORK_BOFF(ip) &&
XFS_BMAP_BMDR_SPACE(tip->i_df.if_broot) > XFS_IFORK_BOFF(ip)) XFS_BMAP_BMDR_SPACE(tip->i_df.if_broot) > XFS_IFORK_BOFF(ip))
return EINVAL; return -EINVAL;
if (XFS_IFORK_NEXTENTS(tip, XFS_DATA_FORK) <= if (XFS_IFORK_NEXTENTS(tip, XFS_DATA_FORK) <=
XFS_IFORK_MAXEXT(ip, XFS_DATA_FORK)) XFS_IFORK_MAXEXT(ip, XFS_DATA_FORK))
return EINVAL; return -EINVAL;
} }
/* Reciprocal target->temp btree format checks */ /* Reciprocal target->temp btree format checks */
if (ip->i_d.di_format == XFS_DINODE_FMT_BTREE) { if (ip->i_d.di_format == XFS_DINODE_FMT_BTREE) {
if (XFS_IFORK_BOFF(tip) && if (XFS_IFORK_BOFF(tip) &&
XFS_BMAP_BMDR_SPACE(ip->i_df.if_broot) > XFS_IFORK_BOFF(tip)) XFS_BMAP_BMDR_SPACE(ip->i_df.if_broot) > XFS_IFORK_BOFF(tip))
return EINVAL; return -EINVAL;
if (XFS_IFORK_NEXTENTS(ip, XFS_DATA_FORK) <= if (XFS_IFORK_NEXTENTS(ip, XFS_DATA_FORK) <=
XFS_IFORK_MAXEXT(tip, XFS_DATA_FORK)) XFS_IFORK_MAXEXT(tip, XFS_DATA_FORK))
return EINVAL; return -EINVAL;
} }
return 0; return 0;
} }
int
xfs_swap_extent_flush(
struct xfs_inode *ip)
{
int error;
error = filemap_write_and_wait(VFS_I(ip)->i_mapping);
if (error)
return error;
truncate_pagecache_range(VFS_I(ip), 0, -1);
/* Verify O_DIRECT for ftmp */
if (VFS_I(ip)->i_mapping->nrpages)
return -EINVAL;
/*
* Don't try to swap extents on mmap()d files because we can't lock
* out races against page faults safely.
*/
if (mapping_mapped(VFS_I(ip)->i_mapping))
return -EBUSY;
return 0;
}
int int
xfs_swap_extents( xfs_swap_extents(
xfs_inode_t *ip, /* target inode */ xfs_inode_t *ip, /* target inode */
...@@ -1633,51 +1657,57 @@ xfs_swap_extents( ...@@ -1633,51 +1657,57 @@ xfs_swap_extents(
int aforkblks = 0; int aforkblks = 0;
int taforkblks = 0; int taforkblks = 0;
__uint64_t tmp; __uint64_t tmp;
int lock_flags;
tempifp = kmem_alloc(sizeof(xfs_ifork_t), KM_MAYFAIL); tempifp = kmem_alloc(sizeof(xfs_ifork_t), KM_MAYFAIL);
if (!tempifp) { if (!tempifp) {
error = XFS_ERROR(ENOMEM); error = -ENOMEM;
goto out; goto out;
} }
/* /*
* we have to do two separate lock calls here to keep lockdep * Lock up the inodes against other IO and truncate to begin with.
* happy. If we try to get all the locks in one call, lock will * Then we can ensure the inodes are flushed and have no page cache
* report false positives when we drop the ILOCK and regain them * safely. Once we have done this we can take the ilocks and do the rest
* below. * of the checks.
*/ */
lock_flags = XFS_IOLOCK_EXCL;
xfs_lock_two_inodes(ip, tip, XFS_IOLOCK_EXCL); xfs_lock_two_inodes(ip, tip, XFS_IOLOCK_EXCL);
xfs_lock_two_inodes(ip, tip, XFS_ILOCK_EXCL);
/* Verify that both files have the same format */ /* Verify that both files have the same format */
if ((ip->i_d.di_mode & S_IFMT) != (tip->i_d.di_mode & S_IFMT)) { if ((ip->i_d.di_mode & S_IFMT) != (tip->i_d.di_mode & S_IFMT)) {
error = XFS_ERROR(EINVAL); error = -EINVAL;
goto out_unlock; goto out_unlock;
} }
/* Verify both files are either real-time or non-realtime */ /* Verify both files are either real-time or non-realtime */
if (XFS_IS_REALTIME_INODE(ip) != XFS_IS_REALTIME_INODE(tip)) { if (XFS_IS_REALTIME_INODE(ip) != XFS_IS_REALTIME_INODE(tip)) {
error = XFS_ERROR(EINVAL); error = -EINVAL;
goto out_unlock; goto out_unlock;
} }
error = -filemap_write_and_wait(VFS_I(tip)->i_mapping); error = xfs_swap_extent_flush(ip);
if (error)
goto out_unlock;
error = xfs_swap_extent_flush(tip);
if (error) if (error)
goto out_unlock; goto out_unlock;
truncate_pagecache_range(VFS_I(tip), 0, -1);
/* Verify O_DIRECT for ftmp */ tp = xfs_trans_alloc(mp, XFS_TRANS_SWAPEXT);
if (VN_CACHED(VFS_I(tip)) != 0) { error = xfs_trans_reserve(tp, &M_RES(mp)->tr_ichange, 0, 0);
error = XFS_ERROR(EINVAL); if (error) {
xfs_trans_cancel(tp, 0);
goto out_unlock; goto out_unlock;
} }
xfs_lock_two_inodes(ip, tip, XFS_ILOCK_EXCL);
lock_flags |= XFS_ILOCK_EXCL;
/* Verify all data are being swapped */ /* Verify all data are being swapped */
if (sxp->sx_offset != 0 || if (sxp->sx_offset != 0 ||
sxp->sx_length != ip->i_d.di_size || sxp->sx_length != ip->i_d.di_size ||
sxp->sx_length != tip->i_d.di_size) { sxp->sx_length != tip->i_d.di_size) {
error = XFS_ERROR(EFAULT); error = -EFAULT;
goto out_unlock; goto out_trans_cancel;
} }
trace_xfs_swap_extent_before(ip, 0); trace_xfs_swap_extent_before(ip, 0);
...@@ -1689,7 +1719,7 @@ xfs_swap_extents( ...@@ -1689,7 +1719,7 @@ xfs_swap_extents(
xfs_notice(mp, xfs_notice(mp,
"%s: inode 0x%llx format is incompatible for exchanging.", "%s: inode 0x%llx format is incompatible for exchanging.",
__func__, ip->i_ino); __func__, ip->i_ino);
goto out_unlock; goto out_trans_cancel;
} }
/* /*
...@@ -1703,43 +1733,9 @@ xfs_swap_extents( ...@@ -1703,43 +1733,9 @@ xfs_swap_extents(
(sbp->bs_ctime.tv_nsec != VFS_I(ip)->i_ctime.tv_nsec) || (sbp->bs_ctime.tv_nsec != VFS_I(ip)->i_ctime.tv_nsec) ||
(sbp->bs_mtime.tv_sec != VFS_I(ip)->i_mtime.tv_sec) || (sbp->bs_mtime.tv_sec != VFS_I(ip)->i_mtime.tv_sec) ||
(sbp->bs_mtime.tv_nsec != VFS_I(ip)->i_mtime.tv_nsec)) { (sbp->bs_mtime.tv_nsec != VFS_I(ip)->i_mtime.tv_nsec)) {
error = XFS_ERROR(EBUSY); error = -EBUSY;
goto out_unlock; goto out_trans_cancel;
}
/* We need to fail if the file is memory mapped. Once we have tossed
* all existing pages, the page fault will have no option
* but to go to the filesystem for pages. By making the page fault call
* vop_read (or write in the case of autogrow) they block on the iolock
* until we have switched the extents.
*/
if (VN_MAPPED(VFS_I(ip))) {
error = XFS_ERROR(EBUSY);
goto out_unlock;
}
xfs_iunlock(ip, XFS_ILOCK_EXCL);
xfs_iunlock(tip, XFS_ILOCK_EXCL);
/*
* There is a race condition here since we gave up the
* ilock. However, the data fork will not change since
* we have the iolock (locked for truncation too) so we
* are safe. We don't really care if non-io related
* fields change.
*/
truncate_pagecache_range(VFS_I(ip), 0, -1);
tp = xfs_trans_alloc(mp, XFS_TRANS_SWAPEXT);
error = xfs_trans_reserve(tp, &M_RES(mp)->tr_ichange, 0, 0);
if (error) {
xfs_iunlock(ip, XFS_IOLOCK_EXCL);
xfs_iunlock(tip, XFS_IOLOCK_EXCL);
xfs_trans_cancel(tp, 0);
goto out;
} }
xfs_lock_two_inodes(ip, tip, XFS_ILOCK_EXCL);
/* /*
* Count the number of extended attribute blocks * Count the number of extended attribute blocks
*/ */
...@@ -1757,8 +1753,8 @@ xfs_swap_extents( ...@@ -1757,8 +1753,8 @@ xfs_swap_extents(
goto out_trans_cancel; goto out_trans_cancel;
} }
xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL | XFS_IOLOCK_EXCL); xfs_trans_ijoin(tp, ip, lock_flags);
xfs_trans_ijoin(tp, tip, XFS_ILOCK_EXCL | XFS_IOLOCK_EXCL); xfs_trans_ijoin(tp, tip, lock_flags);
/* /*
* Before we've swapped the forks, lets set the owners of the forks * Before we've swapped the forks, lets set the owners of the forks
...@@ -1887,8 +1883,8 @@ xfs_swap_extents( ...@@ -1887,8 +1883,8 @@ xfs_swap_extents(
return error; return error;
out_unlock: out_unlock:
xfs_iunlock(ip, XFS_ILOCK_EXCL | XFS_IOLOCK_EXCL); xfs_iunlock(ip, lock_flags);
xfs_iunlock(tip, XFS_ILOCK_EXCL | XFS_IOLOCK_EXCL); xfs_iunlock(tip, lock_flags);
goto out; goto out;
out_trans_cancel: out_trans_cancel:
......
...@@ -130,7 +130,7 @@ xfs_buf_get_maps( ...@@ -130,7 +130,7 @@ xfs_buf_get_maps(
bp->b_maps = kmem_zalloc(map_count * sizeof(struct xfs_buf_map), bp->b_maps = kmem_zalloc(map_count * sizeof(struct xfs_buf_map),
KM_NOFS); KM_NOFS);
if (!bp->b_maps) if (!bp->b_maps)
return ENOMEM; return -ENOMEM;
return 0; return 0;
} }
...@@ -344,7 +344,7 @@ xfs_buf_allocate_memory( ...@@ -344,7 +344,7 @@ xfs_buf_allocate_memory(
if (unlikely(page == NULL)) { if (unlikely(page == NULL)) {
if (flags & XBF_READ_AHEAD) { if (flags & XBF_READ_AHEAD) {
bp->b_page_count = i; bp->b_page_count = i;
error = ENOMEM; error = -ENOMEM;
goto out_free_pages; goto out_free_pages;
} }
...@@ -465,7 +465,7 @@ _xfs_buf_find( ...@@ -465,7 +465,7 @@ _xfs_buf_find(
eofs = XFS_FSB_TO_BB(btp->bt_mount, btp->bt_mount->m_sb.sb_dblocks); eofs = XFS_FSB_TO_BB(btp->bt_mount, btp->bt_mount->m_sb.sb_dblocks);
if (blkno >= eofs) { if (blkno >= eofs) {
/* /*
* XXX (dgc): we should really be returning EFSCORRUPTED here, * XXX (dgc): we should really be returning -EFSCORRUPTED here,
* but none of the higher level infrastructure supports * but none of the higher level infrastructure supports
* returning a specific error on buffer lookup failures. * returning a specific error on buffer lookup failures.
*/ */
...@@ -1052,8 +1052,8 @@ xfs_buf_ioerror( ...@@ -1052,8 +1052,8 @@ xfs_buf_ioerror(
xfs_buf_t *bp, xfs_buf_t *bp,
int error) int error)
{ {
ASSERT(error >= 0 && error <= 0xffff); ASSERT(error <= 0 && error >= -1000);
bp->b_error = (unsigned short)error; bp->b_error = error;
trace_xfs_buf_ioerror(bp, error, _RET_IP_); trace_xfs_buf_ioerror(bp, error, _RET_IP_);
} }
...@@ -1064,7 +1064,7 @@ xfs_buf_ioerror_alert( ...@@ -1064,7 +1064,7 @@ xfs_buf_ioerror_alert(
{ {
xfs_alert(bp->b_target->bt_mount, xfs_alert(bp->b_target->bt_mount,
"metadata I/O error: block 0x%llx (\"%s\") error %d numblks %d", "metadata I/O error: block 0x%llx (\"%s\") error %d numblks %d",
(__uint64_t)XFS_BUF_ADDR(bp), func, bp->b_error, bp->b_length); (__uint64_t)XFS_BUF_ADDR(bp), func, -bp->b_error, bp->b_length);
} }
/* /*
...@@ -1083,7 +1083,7 @@ xfs_bioerror( ...@@ -1083,7 +1083,7 @@ xfs_bioerror(
/* /*
* No need to wait until the buffer is unpinned, we aren't flushing it. * No need to wait until the buffer is unpinned, we aren't flushing it.
*/ */
xfs_buf_ioerror(bp, EIO); xfs_buf_ioerror(bp, -EIO);
/* /*
* We're calling xfs_buf_ioend, so delete XBF_DONE flag. * We're calling xfs_buf_ioend, so delete XBF_DONE flag.
...@@ -1094,7 +1094,7 @@ xfs_bioerror( ...@@ -1094,7 +1094,7 @@ xfs_bioerror(
xfs_buf_ioend(bp, 0); xfs_buf_ioend(bp, 0);
return EIO; return -EIO;
} }
/* /*
...@@ -1127,13 +1127,13 @@ xfs_bioerror_relse( ...@@ -1127,13 +1127,13 @@ xfs_bioerror_relse(
* There's no reason to mark error for * There's no reason to mark error for
* ASYNC buffers. * ASYNC buffers.
*/ */
xfs_buf_ioerror(bp, EIO); xfs_buf_ioerror(bp, -EIO);
complete(&bp->b_iowait); complete(&bp->b_iowait);
} else { } else {
xfs_buf_relse(bp); xfs_buf_relse(bp);
} }
return EIO; return -EIO;
} }
STATIC int STATIC int
...@@ -1199,7 +1199,7 @@ xfs_buf_bio_end_io( ...@@ -1199,7 +1199,7 @@ xfs_buf_bio_end_io(
* buffers that require multiple bios to complete. * buffers that require multiple bios to complete.
*/ */
if (!bp->b_error) if (!bp->b_error)
xfs_buf_ioerror(bp, -error); xfs_buf_ioerror(bp, error);
if (!bp->b_error && xfs_buf_is_vmapped(bp) && (bp->b_flags & XBF_READ)) if (!bp->b_error && xfs_buf_is_vmapped(bp) && (bp->b_flags & XBF_READ))
invalidate_kernel_vmap_range(bp->b_addr, xfs_buf_vmap_len(bp)); invalidate_kernel_vmap_range(bp->b_addr, xfs_buf_vmap_len(bp));
...@@ -1286,7 +1286,7 @@ xfs_buf_ioapply_map( ...@@ -1286,7 +1286,7 @@ xfs_buf_ioapply_map(
* because the caller (xfs_buf_iorequest) holds a count itself. * because the caller (xfs_buf_iorequest) holds a count itself.
*/ */
atomic_dec(&bp->b_io_remaining); atomic_dec(&bp->b_io_remaining);
xfs_buf_ioerror(bp, EIO); xfs_buf_ioerror(bp, -EIO);
bio_put(bio); bio_put(bio);
} }
...@@ -1330,6 +1330,20 @@ _xfs_buf_ioapply( ...@@ -1330,6 +1330,20 @@ _xfs_buf_ioapply(
SHUTDOWN_CORRUPT_INCORE); SHUTDOWN_CORRUPT_INCORE);
return; return;
} }
} else if (bp->b_bn != XFS_BUF_DADDR_NULL) {
struct xfs_mount *mp = bp->b_target->bt_mount;
/*
* non-crc filesystems don't attach verifiers during
* log recovery, so don't warn for such filesystems.
*/
if (xfs_sb_version_hascrc(&mp->m_sb)) {
xfs_warn(mp,
"%s: no ops on block 0x%llx/0x%x",
__func__, bp->b_bn, bp->b_length);
xfs_hex_dump(bp->b_addr, 64);
dump_stack();
}
} }
} else if (bp->b_flags & XBF_READ_AHEAD) { } else if (bp->b_flags & XBF_READ_AHEAD) {
rw = READA; rw = READA;
...@@ -1628,7 +1642,7 @@ xfs_setsize_buftarg( ...@@ -1628,7 +1642,7 @@ xfs_setsize_buftarg(
xfs_warn(btp->bt_mount, xfs_warn(btp->bt_mount,
"Cannot set_blocksize to %u on device %s", "Cannot set_blocksize to %u on device %s",
sectorsize, name); sectorsize, name);
return EINVAL; return -EINVAL;
} }
/* Set up device logical sector size mask */ /* Set up device logical sector size mask */
......
...@@ -178,7 +178,7 @@ typedef struct xfs_buf { ...@@ -178,7 +178,7 @@ typedef struct xfs_buf {
atomic_t b_io_remaining; /* #outstanding I/O requests */ atomic_t b_io_remaining; /* #outstanding I/O requests */
unsigned int b_page_count; /* size of page array */ unsigned int b_page_count; /* size of page array */
unsigned int b_offset; /* page offset in first page */ unsigned int b_offset; /* page offset in first page */
unsigned short b_error; /* error code on I/O */ int b_error; /* error code on I/O */
const struct xfs_buf_ops *b_ops; const struct xfs_buf_ops *b_ops;
#ifdef XFS_BUF_LOCK_TRACKING #ifdef XFS_BUF_LOCK_TRACKING
......
...@@ -488,7 +488,7 @@ xfs_buf_item_unpin( ...@@ -488,7 +488,7 @@ xfs_buf_item_unpin(
xfs_buf_lock(bp); xfs_buf_lock(bp);
xfs_buf_hold(bp); xfs_buf_hold(bp);
bp->b_flags |= XBF_ASYNC; bp->b_flags |= XBF_ASYNC;
xfs_buf_ioerror(bp, EIO); xfs_buf_ioerror(bp, -EIO);
XFS_BUF_UNDONE(bp); XFS_BUF_UNDONE(bp);
xfs_buf_stale(bp); xfs_buf_stale(bp);
xfs_buf_ioend(bp, 0); xfs_buf_ioend(bp, 0);
...@@ -725,7 +725,7 @@ xfs_buf_item_get_format( ...@@ -725,7 +725,7 @@ xfs_buf_item_get_format(
bip->bli_formats = kmem_zalloc(count * sizeof(struct xfs_buf_log_format), bip->bli_formats = kmem_zalloc(count * sizeof(struct xfs_buf_log_format),
KM_SLEEP); KM_SLEEP);
if (!bip->bli_formats) if (!bip->bli_formats)
return ENOMEM; return -ENOMEM;
return 0; return 0;
} }
......
...@@ -95,7 +95,7 @@ xfs_dir2_sf_getdents( ...@@ -95,7 +95,7 @@ xfs_dir2_sf_getdents(
*/ */
if (dp->i_d.di_size < offsetof(xfs_dir2_sf_hdr_t, parent)) { if (dp->i_d.di_size < offsetof(xfs_dir2_sf_hdr_t, parent)) {
ASSERT(XFS_FORCED_SHUTDOWN(dp->i_mount)); ASSERT(XFS_FORCED_SHUTDOWN(dp->i_mount));
return XFS_ERROR(EIO); return -EIO;
} }
ASSERT(dp->i_df.if_bytes == dp->i_d.di_size); ASSERT(dp->i_df.if_bytes == dp->i_d.di_size);
...@@ -677,7 +677,7 @@ xfs_readdir( ...@@ -677,7 +677,7 @@ xfs_readdir(
trace_xfs_readdir(dp); trace_xfs_readdir(dp);
if (XFS_FORCED_SHUTDOWN(dp->i_mount)) if (XFS_FORCED_SHUTDOWN(dp->i_mount))
return XFS_ERROR(EIO); return -EIO;
ASSERT(S_ISDIR(dp->i_d.di_mode)); ASSERT(S_ISDIR(dp->i_d.di_mode));
XFS_STATS_INC(xs_dir_getdents); XFS_STATS_INC(xs_dir_getdents);
......
...@@ -124,7 +124,7 @@ xfs_trim_extents( ...@@ -124,7 +124,7 @@ xfs_trim_extents(
} }
trace_xfs_discard_extent(mp, agno, fbno, flen); trace_xfs_discard_extent(mp, agno, fbno, flen);
error = -blkdev_issue_discard(bdev, dbno, dlen, GFP_NOFS, 0); error = blkdev_issue_discard(bdev, dbno, dlen, GFP_NOFS, 0);
if (error) if (error)
goto out_del_cursor; goto out_del_cursor;
*blocks_trimmed += flen; *blocks_trimmed += flen;
...@@ -166,11 +166,11 @@ xfs_ioc_trim( ...@@ -166,11 +166,11 @@ xfs_ioc_trim(
int error, last_error = 0; int error, last_error = 0;
if (!capable(CAP_SYS_ADMIN)) if (!capable(CAP_SYS_ADMIN))
return -XFS_ERROR(EPERM); return -EPERM;
if (!blk_queue_discard(q)) if (!blk_queue_discard(q))
return -XFS_ERROR(EOPNOTSUPP); return -EOPNOTSUPP;
if (copy_from_user(&range, urange, sizeof(range))) if (copy_from_user(&range, urange, sizeof(range)))
return -XFS_ERROR(EFAULT); return -EFAULT;
/* /*
* Truncating down the len isn't actually quite correct, but using * Truncating down the len isn't actually quite correct, but using
...@@ -182,7 +182,7 @@ xfs_ioc_trim( ...@@ -182,7 +182,7 @@ xfs_ioc_trim(
if (range.start >= XFS_FSB_TO_B(mp, mp->m_sb.sb_dblocks) || if (range.start >= XFS_FSB_TO_B(mp, mp->m_sb.sb_dblocks) ||
range.minlen > XFS_FSB_TO_B(mp, XFS_ALLOC_AG_MAX_USABLE(mp)) || range.minlen > XFS_FSB_TO_B(mp, XFS_ALLOC_AG_MAX_USABLE(mp)) ||
range.len < mp->m_sb.sb_blocksize) range.len < mp->m_sb.sb_blocksize)
return -XFS_ERROR(EINVAL); return -EINVAL;
start = BTOBB(range.start); start = BTOBB(range.start);
end = start + BTOBBT(range.len) - 1; end = start + BTOBBT(range.len) - 1;
...@@ -195,7 +195,7 @@ xfs_ioc_trim( ...@@ -195,7 +195,7 @@ xfs_ioc_trim(
end_agno = xfs_daddr_to_agno(mp, end); end_agno = xfs_daddr_to_agno(mp, end);
for (agno = start_agno; agno <= end_agno; agno++) { for (agno = start_agno; agno <= end_agno; agno++) {
error = -xfs_trim_extents(mp, agno, start, end, minlen, error = xfs_trim_extents(mp, agno, start, end, minlen,
&blocks_trimmed); &blocks_trimmed);
if (error) if (error)
last_error = error; last_error = error;
...@@ -206,7 +206,7 @@ xfs_ioc_trim( ...@@ -206,7 +206,7 @@ xfs_ioc_trim(
range.len = XFS_FSB_TO_B(mp, blocks_trimmed); range.len = XFS_FSB_TO_B(mp, blocks_trimmed);
if (copy_to_user(urange, &range, sizeof(range))) if (copy_to_user(urange, &range, sizeof(range)))
return -XFS_ERROR(EFAULT); return -EFAULT;
return 0; return 0;
} }
...@@ -222,11 +222,11 @@ xfs_discard_extents( ...@@ -222,11 +222,11 @@ xfs_discard_extents(
trace_xfs_discard_extent(mp, busyp->agno, busyp->bno, trace_xfs_discard_extent(mp, busyp->agno, busyp->bno,
busyp->length); busyp->length);
error = -blkdev_issue_discard(mp->m_ddev_targp->bt_bdev, error = blkdev_issue_discard(mp->m_ddev_targp->bt_bdev,
XFS_AGB_TO_DADDR(mp, busyp->agno, busyp->bno), XFS_AGB_TO_DADDR(mp, busyp->agno, busyp->bno),
XFS_FSB_TO_BB(mp, busyp->length), XFS_FSB_TO_BB(mp, busyp->length),
GFP_NOFS, 0); GFP_NOFS, 0);
if (error && error != EOPNOTSUPP) { if (error && error != -EOPNOTSUPP) {
xfs_info(mp, xfs_info(mp,
"discard failed for extent [0x%llu,%u], error %d", "discard failed for extent [0x%llu,%u], error %d",
(unsigned long long)busyp->bno, (unsigned long long)busyp->bno,
......
...@@ -327,7 +327,7 @@ xfs_qm_dqalloc( ...@@ -327,7 +327,7 @@ xfs_qm_dqalloc(
*/ */
if (!xfs_this_quota_on(dqp->q_mount, dqp->dq_flags)) { if (!xfs_this_quota_on(dqp->q_mount, dqp->dq_flags)) {
xfs_iunlock(quotip, XFS_ILOCK_EXCL); xfs_iunlock(quotip, XFS_ILOCK_EXCL);
return (ESRCH); return -ESRCH;
} }
xfs_trans_ijoin(tp, quotip, XFS_ILOCK_EXCL); xfs_trans_ijoin(tp, quotip, XFS_ILOCK_EXCL);
...@@ -354,7 +354,7 @@ xfs_qm_dqalloc( ...@@ -354,7 +354,7 @@ xfs_qm_dqalloc(
mp->m_quotainfo->qi_dqchunklen, mp->m_quotainfo->qi_dqchunklen,
0); 0);
if (!bp) { if (!bp) {
error = ENOMEM; error = -ENOMEM;
goto error1; goto error1;
} }
bp->b_ops = &xfs_dquot_buf_ops; bp->b_ops = &xfs_dquot_buf_ops;
...@@ -400,7 +400,7 @@ xfs_qm_dqalloc( ...@@ -400,7 +400,7 @@ xfs_qm_dqalloc(
error0: error0:
xfs_iunlock(quotip, XFS_ILOCK_EXCL); xfs_iunlock(quotip, XFS_ILOCK_EXCL);
return (error); return error;
} }
STATIC int STATIC int
...@@ -426,7 +426,7 @@ xfs_qm_dqrepair( ...@@ -426,7 +426,7 @@ xfs_qm_dqrepair(
if (error) { if (error) {
ASSERT(*bpp == NULL); ASSERT(*bpp == NULL);
return XFS_ERROR(error); return error;
} }
(*bpp)->b_ops = &xfs_dquot_buf_ops; (*bpp)->b_ops = &xfs_dquot_buf_ops;
...@@ -442,7 +442,7 @@ xfs_qm_dqrepair( ...@@ -442,7 +442,7 @@ xfs_qm_dqrepair(
if (error) { if (error) {
/* repair failed, we're screwed */ /* repair failed, we're screwed */
xfs_trans_brelse(tp, *bpp); xfs_trans_brelse(tp, *bpp);
return XFS_ERROR(EIO); return -EIO;
} }
} }
...@@ -480,7 +480,7 @@ xfs_qm_dqtobp( ...@@ -480,7 +480,7 @@ xfs_qm_dqtobp(
* didn't have the quota inode lock. * didn't have the quota inode lock.
*/ */
xfs_iunlock(quotip, lock_mode); xfs_iunlock(quotip, lock_mode);
return ESRCH; return -ESRCH;
} }
/* /*
...@@ -508,7 +508,7 @@ xfs_qm_dqtobp( ...@@ -508,7 +508,7 @@ xfs_qm_dqtobp(
* We don't allocate unless we're asked to * We don't allocate unless we're asked to
*/ */
if (!(flags & XFS_QMOPT_DQALLOC)) if (!(flags & XFS_QMOPT_DQALLOC))
return ENOENT; return -ENOENT;
ASSERT(tp); ASSERT(tp);
error = xfs_qm_dqalloc(tpp, mp, dqp, quotip, error = xfs_qm_dqalloc(tpp, mp, dqp, quotip,
...@@ -530,7 +530,7 @@ xfs_qm_dqtobp( ...@@ -530,7 +530,7 @@ xfs_qm_dqtobp(
mp->m_quotainfo->qi_dqchunklen, mp->m_quotainfo->qi_dqchunklen,
0, &bp, &xfs_dquot_buf_ops); 0, &bp, &xfs_dquot_buf_ops);
if (error == EFSCORRUPTED && (flags & XFS_QMOPT_DQREPAIR)) { if (error == -EFSCORRUPTED && (flags & XFS_QMOPT_DQREPAIR)) {
xfs_dqid_t firstid = (xfs_dqid_t)map.br_startoff * xfs_dqid_t firstid = (xfs_dqid_t)map.br_startoff *
mp->m_quotainfo->qi_dqperchunk; mp->m_quotainfo->qi_dqperchunk;
ASSERT(bp == NULL); ASSERT(bp == NULL);
...@@ -539,7 +539,7 @@ xfs_qm_dqtobp( ...@@ -539,7 +539,7 @@ xfs_qm_dqtobp(
if (error) { if (error) {
ASSERT(bp == NULL); ASSERT(bp == NULL);
return XFS_ERROR(error); return error;
} }
} }
...@@ -547,7 +547,7 @@ xfs_qm_dqtobp( ...@@ -547,7 +547,7 @@ xfs_qm_dqtobp(
*O_bpp = bp; *O_bpp = bp;
*O_ddpp = bp->b_addr + dqp->q_bufoffset; *O_ddpp = bp->b_addr + dqp->q_bufoffset;
return (0); return 0;
} }
...@@ -715,7 +715,7 @@ xfs_qm_dqget( ...@@ -715,7 +715,7 @@ xfs_qm_dqget(
if ((! XFS_IS_UQUOTA_ON(mp) && type == XFS_DQ_USER) || if ((! XFS_IS_UQUOTA_ON(mp) && type == XFS_DQ_USER) ||
(! XFS_IS_PQUOTA_ON(mp) && type == XFS_DQ_PROJ) || (! XFS_IS_PQUOTA_ON(mp) && type == XFS_DQ_PROJ) ||
(! XFS_IS_GQUOTA_ON(mp) && type == XFS_DQ_GROUP)) { (! XFS_IS_GQUOTA_ON(mp) && type == XFS_DQ_GROUP)) {
return (ESRCH); return -ESRCH;
} }
#ifdef DEBUG #ifdef DEBUG
...@@ -723,7 +723,7 @@ xfs_qm_dqget( ...@@ -723,7 +723,7 @@ xfs_qm_dqget(
if ((xfs_dqerror_target == mp->m_ddev_targp) && if ((xfs_dqerror_target == mp->m_ddev_targp) &&
(xfs_dqreq_num++ % xfs_dqerror_mod) == 0) { (xfs_dqreq_num++ % xfs_dqerror_mod) == 0) {
xfs_debug(mp, "Returning error in dqget"); xfs_debug(mp, "Returning error in dqget");
return (EIO); return -EIO;
} }
} }
...@@ -796,14 +796,14 @@ xfs_qm_dqget( ...@@ -796,14 +796,14 @@ xfs_qm_dqget(
} else { } else {
/* inode stays locked on return */ /* inode stays locked on return */
xfs_qm_dqdestroy(dqp); xfs_qm_dqdestroy(dqp);
return XFS_ERROR(ESRCH); return -ESRCH;
} }
} }
mutex_lock(&qi->qi_tree_lock); mutex_lock(&qi->qi_tree_lock);
error = -radix_tree_insert(tree, id, dqp); error = radix_tree_insert(tree, id, dqp);
if (unlikely(error)) { if (unlikely(error)) {
WARN_ON(error != EEXIST); WARN_ON(error != -EEXIST);
/* /*
* Duplicate found. Just throw away the new dquot and start * Duplicate found. Just throw away the new dquot and start
...@@ -829,7 +829,7 @@ xfs_qm_dqget( ...@@ -829,7 +829,7 @@ xfs_qm_dqget(
ASSERT((ip == NULL) || xfs_isilocked(ip, XFS_ILOCK_EXCL)); ASSERT((ip == NULL) || xfs_isilocked(ip, XFS_ILOCK_EXCL));
trace_xfs_dqget_miss(dqp); trace_xfs_dqget_miss(dqp);
*O_dqpp = dqp; *O_dqpp = dqp;
return (0); return 0;
} }
/* /*
...@@ -966,7 +966,7 @@ xfs_qm_dqflush( ...@@ -966,7 +966,7 @@ xfs_qm_dqflush(
SHUTDOWN_CORRUPT_INCORE); SHUTDOWN_CORRUPT_INCORE);
else else
spin_unlock(&mp->m_ail->xa_lock); spin_unlock(&mp->m_ail->xa_lock);
error = XFS_ERROR(EIO); error = -EIO;
goto out_unlock; goto out_unlock;
} }
...@@ -974,7 +974,8 @@ xfs_qm_dqflush( ...@@ -974,7 +974,8 @@ xfs_qm_dqflush(
* Get the buffer containing the on-disk dquot * Get the buffer containing the on-disk dquot
*/ */
error = xfs_trans_read_buf(mp, NULL, mp->m_ddev_targp, dqp->q_blkno, error = xfs_trans_read_buf(mp, NULL, mp->m_ddev_targp, dqp->q_blkno,
mp->m_quotainfo->qi_dqchunklen, 0, &bp, NULL); mp->m_quotainfo->qi_dqchunklen, 0, &bp,
&xfs_dquot_buf_ops);
if (error) if (error)
goto out_unlock; goto out_unlock;
...@@ -992,7 +993,7 @@ xfs_qm_dqflush( ...@@ -992,7 +993,7 @@ xfs_qm_dqflush(
xfs_buf_relse(bp); xfs_buf_relse(bp);
xfs_dqfunlock(dqp); xfs_dqfunlock(dqp);
xfs_force_shutdown(mp, SHUTDOWN_CORRUPT_INCORE); xfs_force_shutdown(mp, SHUTDOWN_CORRUPT_INCORE);
return XFS_ERROR(EIO); return -EIO;
} }
/* This is the only portion of data that needs to persist */ /* This is the only portion of data that needs to persist */
...@@ -1045,7 +1046,7 @@ xfs_qm_dqflush( ...@@ -1045,7 +1046,7 @@ xfs_qm_dqflush(
out_unlock: out_unlock:
xfs_dqfunlock(dqp); xfs_dqfunlock(dqp);
return XFS_ERROR(EIO); return -EIO;
} }
/* /*
......
...@@ -139,6 +139,21 @@ static inline xfs_dquot_t *xfs_inode_dquot(struct xfs_inode *ip, int type) ...@@ -139,6 +139,21 @@ static inline xfs_dquot_t *xfs_inode_dquot(struct xfs_inode *ip, int type)
} }
} }
/*
* Check whether a dquot is under low free space conditions. We assume the quota
* is enabled and enforced.
*/
static inline bool xfs_dquot_lowsp(struct xfs_dquot *dqp)
{
int64_t freesp;
freesp = be64_to_cpu(dqp->q_core.d_blk_hardlimit) - dqp->q_res_bcount;
if (freesp < dqp->q_low_space[XFS_QLOWSP_1_PCNT])
return true;
return false;
}
#define XFS_DQ_IS_LOCKED(dqp) (mutex_is_locked(&((dqp)->q_qlock))) #define XFS_DQ_IS_LOCKED(dqp) (mutex_is_locked(&((dqp)->q_qlock)))
#define XFS_DQ_IS_DIRTY(dqp) ((dqp)->dq_flags & XFS_DQ_DIRTY) #define XFS_DQ_IS_DIRTY(dqp) ((dqp)->dq_flags & XFS_DQ_DIRTY)
#define XFS_QM_ISUDQ(dqp) ((dqp)->dq_flags & XFS_DQ_USER) #define XFS_QM_ISUDQ(dqp) ((dqp)->dq_flags & XFS_DQ_USER)
......
...@@ -27,29 +27,6 @@ ...@@ -27,29 +27,6 @@
#ifdef DEBUG #ifdef DEBUG
int xfs_etrap[XFS_ERROR_NTRAP] = {
0,
};
int
xfs_error_trap(int e)
{
int i;
if (!e)
return 0;
for (i = 0; i < XFS_ERROR_NTRAP; i++) {
if (xfs_etrap[i] == 0)
break;
if (e != xfs_etrap[i])
continue;
xfs_notice(NULL, "%s: error %d", __func__, e);
BUG();
break;
}
return e;
}
int xfs_etest[XFS_NUM_INJECT_ERROR]; int xfs_etest[XFS_NUM_INJECT_ERROR];
int64_t xfs_etest_fsid[XFS_NUM_INJECT_ERROR]; int64_t xfs_etest_fsid[XFS_NUM_INJECT_ERROR];
char * xfs_etest_fsname[XFS_NUM_INJECT_ERROR]; char * xfs_etest_fsname[XFS_NUM_INJECT_ERROR];
...@@ -190,7 +167,7 @@ xfs_verifier_error( ...@@ -190,7 +167,7 @@ xfs_verifier_error(
struct xfs_mount *mp = bp->b_target->bt_mount; struct xfs_mount *mp = bp->b_target->bt_mount;
xfs_alert(mp, "Metadata %s detected at %pF, block 0x%llx", xfs_alert(mp, "Metadata %s detected at %pF, block 0x%llx",
bp->b_error == EFSBADCRC ? "CRC error" : "corruption", bp->b_error == -EFSBADCRC ? "CRC error" : "corruption",
__return_address, bp->b_bn); __return_address, bp->b_bn);
xfs_alert(mp, "Unmount and run xfs_repair"); xfs_alert(mp, "Unmount and run xfs_repair");
......
...@@ -18,15 +18,6 @@ ...@@ -18,15 +18,6 @@
#ifndef __XFS_ERROR_H__ #ifndef __XFS_ERROR_H__
#define __XFS_ERROR_H__ #define __XFS_ERROR_H__
#ifdef DEBUG
#define XFS_ERROR_NTRAP 10
extern int xfs_etrap[XFS_ERROR_NTRAP];
extern int xfs_error_trap(int);
#define XFS_ERROR(e) xfs_error_trap(e)
#else
#define XFS_ERROR(e) (e)
#endif
struct xfs_mount; struct xfs_mount;
extern void xfs_error_report(const char *tag, int level, struct xfs_mount *mp, extern void xfs_error_report(const char *tag, int level, struct xfs_mount *mp,
...@@ -56,7 +47,7 @@ extern void xfs_verifier_error(struct xfs_buf *bp); ...@@ -56,7 +47,7 @@ extern void xfs_verifier_error(struct xfs_buf *bp);
if (unlikely(!fs_is_ok)) { \ if (unlikely(!fs_is_ok)) { \
XFS_ERROR_REPORT("XFS_WANT_CORRUPTED_GOTO", \ XFS_ERROR_REPORT("XFS_WANT_CORRUPTED_GOTO", \
XFS_ERRLEVEL_LOW, NULL); \ XFS_ERRLEVEL_LOW, NULL); \
error = XFS_ERROR(EFSCORRUPTED); \ error = -EFSCORRUPTED; \
goto l; \ goto l; \
} \ } \
} }
...@@ -68,7 +59,7 @@ extern void xfs_verifier_error(struct xfs_buf *bp); ...@@ -68,7 +59,7 @@ extern void xfs_verifier_error(struct xfs_buf *bp);
if (unlikely(!fs_is_ok)) { \ if (unlikely(!fs_is_ok)) { \
XFS_ERROR_REPORT("XFS_WANT_CORRUPTED_RETURN", \ XFS_ERROR_REPORT("XFS_WANT_CORRUPTED_RETURN", \
XFS_ERRLEVEL_LOW, NULL); \ XFS_ERRLEVEL_LOW, NULL); \
return XFS_ERROR(EFSCORRUPTED); \ return -EFSCORRUPTED; \
} \ } \
} }
......
...@@ -147,9 +147,9 @@ xfs_nfs_get_inode( ...@@ -147,9 +147,9 @@ xfs_nfs_get_inode(
* We don't use ESTALE directly down the chain to not * We don't use ESTALE directly down the chain to not
* confuse applications using bulkstat that expect EINVAL. * confuse applications using bulkstat that expect EINVAL.
*/ */
if (error == EINVAL || error == ENOENT) if (error == -EINVAL || error == -ENOENT)
error = ESTALE; error = -ESTALE;
return ERR_PTR(-error); return ERR_PTR(error);
} }
if (ip->i_d.di_gen != generation) { if (ip->i_d.di_gen != generation) {
...@@ -217,7 +217,7 @@ xfs_fs_get_parent( ...@@ -217,7 +217,7 @@ xfs_fs_get_parent(
error = xfs_lookup(XFS_I(child->d_inode), &xfs_name_dotdot, &cip, NULL); error = xfs_lookup(XFS_I(child->d_inode), &xfs_name_dotdot, &cip, NULL);
if (unlikely(error)) if (unlikely(error))
return ERR_PTR(-error); return ERR_PTR(error);
return d_obtain_alias(VFS_I(cip)); return d_obtain_alias(VFS_I(cip));
} }
...@@ -237,7 +237,7 @@ xfs_fs_nfs_commit_metadata( ...@@ -237,7 +237,7 @@ xfs_fs_nfs_commit_metadata(
if (!lsn) if (!lsn)
return 0; return 0;
return -_xfs_log_force_lsn(mp, lsn, XFS_LOG_SYNC, NULL); return _xfs_log_force_lsn(mp, lsn, XFS_LOG_SYNC, NULL);
} }
const struct export_operations xfs_export_operations = { const struct export_operations xfs_export_operations = {
......
...@@ -298,7 +298,7 @@ xfs_efi_copy_format(xfs_log_iovec_t *buf, xfs_efi_log_format_t *dst_efi_fmt) ...@@ -298,7 +298,7 @@ xfs_efi_copy_format(xfs_log_iovec_t *buf, xfs_efi_log_format_t *dst_efi_fmt)
} }
return 0; return 0;
} }
return EFSCORRUPTED; return -EFSCORRUPTED;
} }
/* /*
......
...@@ -38,6 +38,7 @@ ...@@ -38,6 +38,7 @@
#include "xfs_trace.h" #include "xfs_trace.h"
#include "xfs_log.h" #include "xfs_log.h"
#include "xfs_dinode.h" #include "xfs_dinode.h"
#include "xfs_icache.h"
#include <linux/aio.h> #include <linux/aio.h>
#include <linux/dcache.h> #include <linux/dcache.h>
...@@ -155,7 +156,7 @@ xfs_dir_fsync( ...@@ -155,7 +156,7 @@ xfs_dir_fsync(
if (!lsn) if (!lsn)
return 0; return 0;
return -_xfs_log_force_lsn(mp, lsn, XFS_LOG_SYNC, NULL); return _xfs_log_force_lsn(mp, lsn, XFS_LOG_SYNC, NULL);
} }
STATIC int STATIC int
...@@ -179,7 +180,7 @@ xfs_file_fsync( ...@@ -179,7 +180,7 @@ xfs_file_fsync(
return error; return error;
if (XFS_FORCED_SHUTDOWN(mp)) if (XFS_FORCED_SHUTDOWN(mp))
return -XFS_ERROR(EIO); return -EIO;
xfs_iflags_clear(ip, XFS_ITRUNCATED); xfs_iflags_clear(ip, XFS_ITRUNCATED);
...@@ -225,7 +226,7 @@ xfs_file_fsync( ...@@ -225,7 +226,7 @@ xfs_file_fsync(
!log_flushed) !log_flushed)
xfs_blkdev_issue_flush(mp->m_ddev_targp); xfs_blkdev_issue_flush(mp->m_ddev_targp);
return -error; return error;
} }
STATIC ssize_t STATIC ssize_t
...@@ -246,11 +247,11 @@ xfs_file_read_iter( ...@@ -246,11 +247,11 @@ xfs_file_read_iter(
XFS_STATS_INC(xs_read_calls); XFS_STATS_INC(xs_read_calls);
if (unlikely(file->f_flags & O_DIRECT)) if (unlikely(file->f_flags & O_DIRECT))
ioflags |= IO_ISDIRECT; ioflags |= XFS_IO_ISDIRECT;
if (file->f_mode & FMODE_NOCMTIME) if (file->f_mode & FMODE_NOCMTIME)
ioflags |= IO_INVIS; ioflags |= XFS_IO_INVIS;
if (unlikely(ioflags & IO_ISDIRECT)) { if (unlikely(ioflags & XFS_IO_ISDIRECT)) {
xfs_buftarg_t *target = xfs_buftarg_t *target =
XFS_IS_REALTIME_INODE(ip) ? XFS_IS_REALTIME_INODE(ip) ?
mp->m_rtdev_targp : mp->m_ddev_targp; mp->m_rtdev_targp : mp->m_ddev_targp;
...@@ -258,7 +259,7 @@ xfs_file_read_iter( ...@@ -258,7 +259,7 @@ xfs_file_read_iter(
if ((pos | size) & target->bt_logical_sectormask) { if ((pos | size) & target->bt_logical_sectormask) {
if (pos == i_size_read(inode)) if (pos == i_size_read(inode))
return 0; return 0;
return -XFS_ERROR(EINVAL); return -EINVAL;
} }
} }
...@@ -283,7 +284,7 @@ xfs_file_read_iter( ...@@ -283,7 +284,7 @@ xfs_file_read_iter(
* proceeed concurrently without serialisation. * proceeed concurrently without serialisation.
*/ */
xfs_rw_ilock(ip, XFS_IOLOCK_SHARED); xfs_rw_ilock(ip, XFS_IOLOCK_SHARED);
if ((ioflags & IO_ISDIRECT) && inode->i_mapping->nrpages) { if ((ioflags & XFS_IO_ISDIRECT) && inode->i_mapping->nrpages) {
xfs_rw_iunlock(ip, XFS_IOLOCK_SHARED); xfs_rw_iunlock(ip, XFS_IOLOCK_SHARED);
xfs_rw_ilock(ip, XFS_IOLOCK_EXCL); xfs_rw_ilock(ip, XFS_IOLOCK_EXCL);
...@@ -325,7 +326,7 @@ xfs_file_splice_read( ...@@ -325,7 +326,7 @@ xfs_file_splice_read(
XFS_STATS_INC(xs_read_calls); XFS_STATS_INC(xs_read_calls);
if (infilp->f_mode & FMODE_NOCMTIME) if (infilp->f_mode & FMODE_NOCMTIME)
ioflags |= IO_INVIS; ioflags |= XFS_IO_INVIS;
if (XFS_FORCED_SHUTDOWN(ip->i_mount)) if (XFS_FORCED_SHUTDOWN(ip->i_mount))
return -EIO; return -EIO;
...@@ -524,7 +525,7 @@ xfs_file_aio_write_checks( ...@@ -524,7 +525,7 @@ xfs_file_aio_write_checks(
xfs_rw_ilock(ip, *iolock); xfs_rw_ilock(ip, *iolock);
goto restart; goto restart;
} }
error = -xfs_zero_eof(ip, *pos, i_size_read(inode)); error = xfs_zero_eof(ip, *pos, i_size_read(inode));
if (error) if (error)
return error; return error;
} }
...@@ -594,7 +595,7 @@ xfs_file_dio_aio_write( ...@@ -594,7 +595,7 @@ xfs_file_dio_aio_write(
/* DIO must be aligned to device logical sector size */ /* DIO must be aligned to device logical sector size */
if ((pos | count) & target->bt_logical_sectormask) if ((pos | count) & target->bt_logical_sectormask)
return -XFS_ERROR(EINVAL); return -EINVAL;
/* "unaligned" here means not aligned to a filesystem block */ /* "unaligned" here means not aligned to a filesystem block */
if ((pos & mp->m_blockmask) || ((pos + count) & mp->m_blockmask)) if ((pos & mp->m_blockmask) || ((pos + count) & mp->m_blockmask))
...@@ -689,14 +690,28 @@ xfs_file_buffered_aio_write( ...@@ -689,14 +690,28 @@ xfs_file_buffered_aio_write(
ret = generic_perform_write(file, from, pos); ret = generic_perform_write(file, from, pos);
if (likely(ret >= 0)) if (likely(ret >= 0))
iocb->ki_pos = pos + ret; iocb->ki_pos = pos + ret;
/* /*
* If we just got an ENOSPC, try to write back all dirty inodes to * If we hit a space limit, try to free up some lingering preallocated
* convert delalloc space to free up some of the excess reserved * space before returning an error. In the case of ENOSPC, first try to
* metadata space. * write back all dirty inodes to free up some of the excess reserved
* metadata space. This reduces the chances that the eofblocks scan
* waits on dirty mappings. Since xfs_flush_inodes() is serialized, this
* also behaves as a filter to prevent too many eofblocks scans from
* running at the same time.
*/ */
if (ret == -ENOSPC && !enospc) { if (ret == -EDQUOT && !enospc) {
enospc = xfs_inode_free_quota_eofblocks(ip);
if (enospc)
goto write_retry;
} else if (ret == -ENOSPC && !enospc) {
struct xfs_eofblocks eofb = {0};
enospc = 1; enospc = 1;
xfs_flush_inodes(ip->i_mount); xfs_flush_inodes(ip->i_mount);
eofb.eof_scan_owner = ip->i_ino; /* for locking */
eofb.eof_flags = XFS_EOF_FLAGS_SYNC;
xfs_icache_free_eofblocks(ip->i_mount, &eofb);
goto write_retry; goto write_retry;
} }
...@@ -772,7 +787,7 @@ xfs_file_fallocate( ...@@ -772,7 +787,7 @@ xfs_file_fallocate(
unsigned blksize_mask = (1 << inode->i_blkbits) - 1; unsigned blksize_mask = (1 << inode->i_blkbits) - 1;
if (offset & blksize_mask || len & blksize_mask) { if (offset & blksize_mask || len & blksize_mask) {
error = EINVAL; error = -EINVAL;
goto out_unlock; goto out_unlock;
} }
...@@ -781,7 +796,7 @@ xfs_file_fallocate( ...@@ -781,7 +796,7 @@ xfs_file_fallocate(
* in which case it is effectively a truncate operation * in which case it is effectively a truncate operation
*/ */
if (offset + len >= i_size_read(inode)) { if (offset + len >= i_size_read(inode)) {
error = EINVAL; error = -EINVAL;
goto out_unlock; goto out_unlock;
} }
...@@ -794,7 +809,7 @@ xfs_file_fallocate( ...@@ -794,7 +809,7 @@ xfs_file_fallocate(
if (!(mode & FALLOC_FL_KEEP_SIZE) && if (!(mode & FALLOC_FL_KEEP_SIZE) &&
offset + len > i_size_read(inode)) { offset + len > i_size_read(inode)) {
new_size = offset + len; new_size = offset + len;
error = -inode_newsize_ok(inode, new_size); error = inode_newsize_ok(inode, new_size);
if (error) if (error)
goto out_unlock; goto out_unlock;
} }
...@@ -844,7 +859,7 @@ xfs_file_fallocate( ...@@ -844,7 +859,7 @@ xfs_file_fallocate(
out_unlock: out_unlock:
xfs_iunlock(ip, XFS_IOLOCK_EXCL); xfs_iunlock(ip, XFS_IOLOCK_EXCL);
return -error; return error;
} }
...@@ -889,7 +904,7 @@ xfs_file_release( ...@@ -889,7 +904,7 @@ xfs_file_release(
struct inode *inode, struct inode *inode,
struct file *filp) struct file *filp)
{ {
return -xfs_release(XFS_I(inode)); return xfs_release(XFS_I(inode));
} }
STATIC int STATIC int
...@@ -918,7 +933,7 @@ xfs_file_readdir( ...@@ -918,7 +933,7 @@ xfs_file_readdir(
error = xfs_readdir(ip, ctx, bufsize); error = xfs_readdir(ip, ctx, bufsize);
if (error) if (error)
return -error; return error;
return 0; return 0;
} }
...@@ -1184,7 +1199,7 @@ xfs_seek_data( ...@@ -1184,7 +1199,7 @@ xfs_seek_data(
isize = i_size_read(inode); isize = i_size_read(inode);
if (start >= isize) { if (start >= isize) {
error = ENXIO; error = -ENXIO;
goto out_unlock; goto out_unlock;
} }
...@@ -1206,7 +1221,7 @@ xfs_seek_data( ...@@ -1206,7 +1221,7 @@ xfs_seek_data(
/* No extents at given offset, must be beyond EOF */ /* No extents at given offset, must be beyond EOF */
if (nmap == 0) { if (nmap == 0) {
error = ENXIO; error = -ENXIO;
goto out_unlock; goto out_unlock;
} }
...@@ -1237,7 +1252,7 @@ xfs_seek_data( ...@@ -1237,7 +1252,7 @@ xfs_seek_data(
* we are reading after EOF if nothing in map[1]. * we are reading after EOF if nothing in map[1].
*/ */
if (nmap == 1) { if (nmap == 1) {
error = ENXIO; error = -ENXIO;
goto out_unlock; goto out_unlock;
} }
...@@ -1250,7 +1265,7 @@ xfs_seek_data( ...@@ -1250,7 +1265,7 @@ xfs_seek_data(
fsbno = map[i - 1].br_startoff + map[i - 1].br_blockcount; fsbno = map[i - 1].br_startoff + map[i - 1].br_blockcount;
start = XFS_FSB_TO_B(mp, fsbno); start = XFS_FSB_TO_B(mp, fsbno);
if (start >= isize) { if (start >= isize) {
error = ENXIO; error = -ENXIO;
goto out_unlock; goto out_unlock;
} }
} }
...@@ -1262,7 +1277,7 @@ xfs_seek_data( ...@@ -1262,7 +1277,7 @@ xfs_seek_data(
xfs_iunlock(ip, lock); xfs_iunlock(ip, lock);
if (error) if (error)
return -error; return error;
return offset; return offset;
} }
...@@ -1282,13 +1297,13 @@ xfs_seek_hole( ...@@ -1282,13 +1297,13 @@ xfs_seek_hole(
int error; int error;
if (XFS_FORCED_SHUTDOWN(mp)) if (XFS_FORCED_SHUTDOWN(mp))
return -XFS_ERROR(EIO); return -EIO;
lock = xfs_ilock_data_map_shared(ip); lock = xfs_ilock_data_map_shared(ip);
isize = i_size_read(inode); isize = i_size_read(inode);
if (start >= isize) { if (start >= isize) {
error = ENXIO; error = -ENXIO;
goto out_unlock; goto out_unlock;
} }
...@@ -1307,7 +1322,7 @@ xfs_seek_hole( ...@@ -1307,7 +1322,7 @@ xfs_seek_hole(
/* No extents at given offset, must be beyond EOF */ /* No extents at given offset, must be beyond EOF */
if (nmap == 0) { if (nmap == 0) {
error = ENXIO; error = -ENXIO;
goto out_unlock; goto out_unlock;
} }
...@@ -1370,7 +1385,7 @@ xfs_seek_hole( ...@@ -1370,7 +1385,7 @@ xfs_seek_hole(
xfs_iunlock(ip, lock); xfs_iunlock(ip, lock);
if (error) if (error)
return -error; return error;
return offset; return offset;
} }
......
...@@ -258,7 +258,7 @@ xfs_filestream_pick_ag( ...@@ -258,7 +258,7 @@ xfs_filestream_pick_ag(
if (*agp == NULLAGNUMBER) if (*agp == NULLAGNUMBER)
return 0; return 0;
err = ENOMEM; err = -ENOMEM;
item = kmem_alloc(sizeof(*item), KM_MAYFAIL); item = kmem_alloc(sizeof(*item), KM_MAYFAIL);
if (!item) if (!item)
goto out_put_ag; goto out_put_ag;
...@@ -268,7 +268,7 @@ xfs_filestream_pick_ag( ...@@ -268,7 +268,7 @@ xfs_filestream_pick_ag(
err = xfs_mru_cache_insert(mp->m_filestream, ip->i_ino, &item->mru); err = xfs_mru_cache_insert(mp->m_filestream, ip->i_ino, &item->mru);
if (err) { if (err) {
if (err == EEXIST) if (err == -EEXIST)
err = 0; err = 0;
goto out_free_item; goto out_free_item;
} }
......
...@@ -255,8 +255,8 @@ typedef struct xfs_fsop_resblks { ...@@ -255,8 +255,8 @@ typedef struct xfs_fsop_resblks {
((2 * 1024 * 1024 * 1024ULL) - XFS_MIN_LOG_BYTES) ((2 * 1024 * 1024 * 1024ULL) - XFS_MIN_LOG_BYTES)
/* Used for sanity checks on superblock */ /* Used for sanity checks on superblock */
#define XFS_MAX_DBLOCKS(s) ((xfs_drfsbno_t)(s)->sb_agcount * (s)->sb_agblocks) #define XFS_MAX_DBLOCKS(s) ((xfs_rfsblock_t)(s)->sb_agcount * (s)->sb_agblocks)
#define XFS_MIN_DBLOCKS(s) ((xfs_drfsbno_t)((s)->sb_agcount - 1) * \ #define XFS_MIN_DBLOCKS(s) ((xfs_rfsblock_t)((s)->sb_agcount - 1) * \
(s)->sb_agblocks + XFS_MIN_AG_BLOCKS) (s)->sb_agblocks + XFS_MIN_AG_BLOCKS)
/* /*
...@@ -375,6 +375,9 @@ struct xfs_fs_eofblocks { ...@@ -375,6 +375,9 @@ struct xfs_fs_eofblocks {
#define XFS_EOF_FLAGS_GID (1 << 2) /* filter by gid */ #define XFS_EOF_FLAGS_GID (1 << 2) /* filter by gid */
#define XFS_EOF_FLAGS_PRID (1 << 3) /* filter by project id */ #define XFS_EOF_FLAGS_PRID (1 << 3) /* filter by project id */
#define XFS_EOF_FLAGS_MINFILESIZE (1 << 4) /* filter by min file size */ #define XFS_EOF_FLAGS_MINFILESIZE (1 << 4) /* filter by min file size */
#define XFS_EOF_FLAGS_UNION (1 << 5) /* union filter algorithm;
* kernel only, not included in
* valid mask */
#define XFS_EOF_FLAGS_VALID \ #define XFS_EOF_FLAGS_VALID \
(XFS_EOF_FLAGS_SYNC | \ (XFS_EOF_FLAGS_SYNC | \
XFS_EOF_FLAGS_UID | \ XFS_EOF_FLAGS_UID | \
......
...@@ -168,7 +168,7 @@ xfs_growfs_data_private( ...@@ -168,7 +168,7 @@ xfs_growfs_data_private(
nb = in->newblocks; nb = in->newblocks;
pct = in->imaxpct; pct = in->imaxpct;
if (nb < mp->m_sb.sb_dblocks || pct < 0 || pct > 100) if (nb < mp->m_sb.sb_dblocks || pct < 0 || pct > 100)
return XFS_ERROR(EINVAL); return -EINVAL;
if ((error = xfs_sb_validate_fsb_count(&mp->m_sb, nb))) if ((error = xfs_sb_validate_fsb_count(&mp->m_sb, nb)))
return error; return error;
dpct = pct - mp->m_sb.sb_imax_pct; dpct = pct - mp->m_sb.sb_imax_pct;
...@@ -176,7 +176,7 @@ xfs_growfs_data_private( ...@@ -176,7 +176,7 @@ xfs_growfs_data_private(
XFS_FSB_TO_BB(mp, nb) - XFS_FSS_TO_BB(mp, 1), XFS_FSB_TO_BB(mp, nb) - XFS_FSS_TO_BB(mp, 1),
XFS_FSS_TO_BB(mp, 1), 0, NULL); XFS_FSS_TO_BB(mp, 1), 0, NULL);
if (!bp) if (!bp)
return EIO; return -EIO;
if (bp->b_error) { if (bp->b_error) {
error = bp->b_error; error = bp->b_error;
xfs_buf_relse(bp); xfs_buf_relse(bp);
...@@ -191,7 +191,7 @@ xfs_growfs_data_private( ...@@ -191,7 +191,7 @@ xfs_growfs_data_private(
nagcount--; nagcount--;
nb = (xfs_rfsblock_t)nagcount * mp->m_sb.sb_agblocks; nb = (xfs_rfsblock_t)nagcount * mp->m_sb.sb_agblocks;
if (nb < mp->m_sb.sb_dblocks) if (nb < mp->m_sb.sb_dblocks)
return XFS_ERROR(EINVAL); return -EINVAL;
} }
new = nb - mp->m_sb.sb_dblocks; new = nb - mp->m_sb.sb_dblocks;
oagcount = mp->m_sb.sb_agcount; oagcount = mp->m_sb.sb_agcount;
...@@ -229,7 +229,7 @@ xfs_growfs_data_private( ...@@ -229,7 +229,7 @@ xfs_growfs_data_private(
XFS_FSS_TO_BB(mp, 1), 0, XFS_FSS_TO_BB(mp, 1), 0,
&xfs_agf_buf_ops); &xfs_agf_buf_ops);
if (!bp) { if (!bp) {
error = ENOMEM; error = -ENOMEM;
goto error0; goto error0;
} }
...@@ -270,7 +270,7 @@ xfs_growfs_data_private( ...@@ -270,7 +270,7 @@ xfs_growfs_data_private(
XFS_FSS_TO_BB(mp, 1), 0, XFS_FSS_TO_BB(mp, 1), 0,
&xfs_agfl_buf_ops); &xfs_agfl_buf_ops);
if (!bp) { if (!bp) {
error = ENOMEM; error = -ENOMEM;
goto error0; goto error0;
} }
...@@ -298,7 +298,7 @@ xfs_growfs_data_private( ...@@ -298,7 +298,7 @@ xfs_growfs_data_private(
XFS_FSS_TO_BB(mp, 1), 0, XFS_FSS_TO_BB(mp, 1), 0,
&xfs_agi_buf_ops); &xfs_agi_buf_ops);
if (!bp) { if (!bp) {
error = ENOMEM; error = -ENOMEM;
goto error0; goto error0;
} }
...@@ -336,7 +336,7 @@ xfs_growfs_data_private( ...@@ -336,7 +336,7 @@ xfs_growfs_data_private(
&xfs_allocbt_buf_ops); &xfs_allocbt_buf_ops);
if (!bp) { if (!bp) {
error = ENOMEM; error = -ENOMEM;
goto error0; goto error0;
} }
...@@ -365,7 +365,7 @@ xfs_growfs_data_private( ...@@ -365,7 +365,7 @@ xfs_growfs_data_private(
BTOBB(mp->m_sb.sb_blocksize), 0, BTOBB(mp->m_sb.sb_blocksize), 0,
&xfs_allocbt_buf_ops); &xfs_allocbt_buf_ops);
if (!bp) { if (!bp) {
error = ENOMEM; error = -ENOMEM;
goto error0; goto error0;
} }
...@@ -395,7 +395,7 @@ xfs_growfs_data_private( ...@@ -395,7 +395,7 @@ xfs_growfs_data_private(
BTOBB(mp->m_sb.sb_blocksize), 0, BTOBB(mp->m_sb.sb_blocksize), 0,
&xfs_inobt_buf_ops); &xfs_inobt_buf_ops);
if (!bp) { if (!bp) {
error = ENOMEM; error = -ENOMEM;
goto error0; goto error0;
} }
...@@ -420,7 +420,7 @@ xfs_growfs_data_private( ...@@ -420,7 +420,7 @@ xfs_growfs_data_private(
BTOBB(mp->m_sb.sb_blocksize), 0, BTOBB(mp->m_sb.sb_blocksize), 0,
&xfs_inobt_buf_ops); &xfs_inobt_buf_ops);
if (!bp) { if (!bp) {
error = ENOMEM; error = -ENOMEM;
goto error0; goto error0;
} }
...@@ -531,7 +531,7 @@ xfs_growfs_data_private( ...@@ -531,7 +531,7 @@ xfs_growfs_data_private(
bp->b_ops = &xfs_sb_buf_ops; bp->b_ops = &xfs_sb_buf_ops;
xfs_buf_zero(bp, 0, BBTOB(bp->b_length)); xfs_buf_zero(bp, 0, BBTOB(bp->b_length));
} else } else
error = ENOMEM; error = -ENOMEM;
} }
/* /*
...@@ -576,17 +576,17 @@ xfs_growfs_log_private( ...@@ -576,17 +576,17 @@ xfs_growfs_log_private(
nb = in->newblocks; nb = in->newblocks;
if (nb < XFS_MIN_LOG_BLOCKS || nb < XFS_B_TO_FSB(mp, XFS_MIN_LOG_BYTES)) if (nb < XFS_MIN_LOG_BLOCKS || nb < XFS_B_TO_FSB(mp, XFS_MIN_LOG_BYTES))
return XFS_ERROR(EINVAL); return -EINVAL;
if (nb == mp->m_sb.sb_logblocks && if (nb == mp->m_sb.sb_logblocks &&
in->isint == (mp->m_sb.sb_logstart != 0)) in->isint == (mp->m_sb.sb_logstart != 0))
return XFS_ERROR(EINVAL); return -EINVAL;
/* /*
* Moving the log is hard, need new interfaces to sync * Moving the log is hard, need new interfaces to sync
* the log first, hold off all activity while moving it. * the log first, hold off all activity while moving it.
* Can have shorter or longer log in the same space, * Can have shorter or longer log in the same space,
* or transform internal to external log or vice versa. * or transform internal to external log or vice versa.
*/ */
return XFS_ERROR(ENOSYS); return -ENOSYS;
} }
/* /*
...@@ -604,9 +604,9 @@ xfs_growfs_data( ...@@ -604,9 +604,9 @@ xfs_growfs_data(
int error; int error;
if (!capable(CAP_SYS_ADMIN)) if (!capable(CAP_SYS_ADMIN))
return XFS_ERROR(EPERM); return -EPERM;
if (!mutex_trylock(&mp->m_growlock)) if (!mutex_trylock(&mp->m_growlock))
return XFS_ERROR(EWOULDBLOCK); return -EWOULDBLOCK;
error = xfs_growfs_data_private(mp, in); error = xfs_growfs_data_private(mp, in);
mutex_unlock(&mp->m_growlock); mutex_unlock(&mp->m_growlock);
return error; return error;
...@@ -620,9 +620,9 @@ xfs_growfs_log( ...@@ -620,9 +620,9 @@ xfs_growfs_log(
int error; int error;
if (!capable(CAP_SYS_ADMIN)) if (!capable(CAP_SYS_ADMIN))
return XFS_ERROR(EPERM); return -EPERM;
if (!mutex_trylock(&mp->m_growlock)) if (!mutex_trylock(&mp->m_growlock))
return XFS_ERROR(EWOULDBLOCK); return -EWOULDBLOCK;
error = xfs_growfs_log_private(mp, in); error = xfs_growfs_log_private(mp, in);
mutex_unlock(&mp->m_growlock); mutex_unlock(&mp->m_growlock);
return error; return error;
...@@ -674,7 +674,7 @@ xfs_reserve_blocks( ...@@ -674,7 +674,7 @@ xfs_reserve_blocks(
/* If inval is null, report current values and return */ /* If inval is null, report current values and return */
if (inval == (__uint64_t *)NULL) { if (inval == (__uint64_t *)NULL) {
if (!outval) if (!outval)
return EINVAL; return -EINVAL;
outval->resblks = mp->m_resblks; outval->resblks = mp->m_resblks;
outval->resblks_avail = mp->m_resblks_avail; outval->resblks_avail = mp->m_resblks_avail;
return 0; return 0;
...@@ -757,7 +757,7 @@ xfs_reserve_blocks( ...@@ -757,7 +757,7 @@ xfs_reserve_blocks(
int error; int error;
error = xfs_icsb_modify_counters(mp, XFS_SBS_FDBLOCKS, error = xfs_icsb_modify_counters(mp, XFS_SBS_FDBLOCKS,
fdblks_delta, 0); fdblks_delta, 0);
if (error == ENOSPC) if (error == -ENOSPC)
goto retry; goto retry;
} }
return 0; return 0;
...@@ -818,7 +818,7 @@ xfs_fs_goingdown( ...@@ -818,7 +818,7 @@ xfs_fs_goingdown(
SHUTDOWN_FORCE_UMOUNT | SHUTDOWN_LOG_IO_ERROR); SHUTDOWN_FORCE_UMOUNT | SHUTDOWN_LOG_IO_ERROR);
break; break;
default: default:
return XFS_ERROR(EINVAL); return -EINVAL;
} }
return 0; return 0;
......
此差异已折叠。
...@@ -27,6 +27,7 @@ struct xfs_eofblocks { ...@@ -27,6 +27,7 @@ struct xfs_eofblocks {
kgid_t eof_gid; kgid_t eof_gid;
prid_t eof_prid; prid_t eof_prid;
__u64 eof_min_file_size; __u64 eof_min_file_size;
xfs_ino_t eof_scan_owner;
}; };
#define SYNC_WAIT 0x0001 /* wait for i/o to complete */ #define SYNC_WAIT 0x0001 /* wait for i/o to complete */
...@@ -57,6 +58,7 @@ void xfs_inode_set_reclaim_tag(struct xfs_inode *ip); ...@@ -57,6 +58,7 @@ void xfs_inode_set_reclaim_tag(struct xfs_inode *ip);
void xfs_inode_set_eofblocks_tag(struct xfs_inode *ip); void xfs_inode_set_eofblocks_tag(struct xfs_inode *ip);
void xfs_inode_clear_eofblocks_tag(struct xfs_inode *ip); void xfs_inode_clear_eofblocks_tag(struct xfs_inode *ip);
int xfs_icache_free_eofblocks(struct xfs_mount *, struct xfs_eofblocks *); int xfs_icache_free_eofblocks(struct xfs_mount *, struct xfs_eofblocks *);
int xfs_inode_free_quota_eofblocks(struct xfs_inode *ip);
void xfs_eofblocks_worker(struct work_struct *); void xfs_eofblocks_worker(struct work_struct *);
int xfs_inode_ag_iterator(struct xfs_mount *mp, int xfs_inode_ag_iterator(struct xfs_mount *mp,
...@@ -72,31 +74,32 @@ xfs_fs_eofblocks_from_user( ...@@ -72,31 +74,32 @@ xfs_fs_eofblocks_from_user(
struct xfs_eofblocks *dst) struct xfs_eofblocks *dst)
{ {
if (src->eof_version != XFS_EOFBLOCKS_VERSION) if (src->eof_version != XFS_EOFBLOCKS_VERSION)
return EINVAL; return -EINVAL;
if (src->eof_flags & ~XFS_EOF_FLAGS_VALID) if (src->eof_flags & ~XFS_EOF_FLAGS_VALID)
return EINVAL; return -EINVAL;
if (memchr_inv(&src->pad32, 0, sizeof(src->pad32)) || if (memchr_inv(&src->pad32, 0, sizeof(src->pad32)) ||
memchr_inv(src->pad64, 0, sizeof(src->pad64))) memchr_inv(src->pad64, 0, sizeof(src->pad64)))
return EINVAL; return -EINVAL;
dst->eof_flags = src->eof_flags; dst->eof_flags = src->eof_flags;
dst->eof_prid = src->eof_prid; dst->eof_prid = src->eof_prid;
dst->eof_min_file_size = src->eof_min_file_size; dst->eof_min_file_size = src->eof_min_file_size;
dst->eof_scan_owner = NULLFSINO;
dst->eof_uid = INVALID_UID; dst->eof_uid = INVALID_UID;
if (src->eof_flags & XFS_EOF_FLAGS_UID) { if (src->eof_flags & XFS_EOF_FLAGS_UID) {
dst->eof_uid = make_kuid(current_user_ns(), src->eof_uid); dst->eof_uid = make_kuid(current_user_ns(), src->eof_uid);
if (!uid_valid(dst->eof_uid)) if (!uid_valid(dst->eof_uid))
return EINVAL; return -EINVAL;
} }
dst->eof_gid = INVALID_GID; dst->eof_gid = INVALID_GID;
if (src->eof_flags & XFS_EOF_FLAGS_GID) { if (src->eof_flags & XFS_EOF_FLAGS_GID) {
dst->eof_gid = make_kgid(current_user_ns(), src->eof_gid); dst->eof_gid = make_kgid(current_user_ns(), src->eof_gid);
if (!gid_valid(dst->eof_gid)) if (!gid_valid(dst->eof_gid))
return EINVAL; return -EINVAL;
} }
return 0; return 0;
} }
......
此差异已折叠。
...@@ -398,4 +398,14 @@ do { \ ...@@ -398,4 +398,14 @@ do { \
extern struct kmem_zone *xfs_inode_zone; extern struct kmem_zone *xfs_inode_zone;
/*
* Flags for read/write calls
*/
#define XFS_IO_ISDIRECT 0x00001 /* bypass page cache */
#define XFS_IO_INVIS 0x00002 /* don't update inode timestamps */
#define XFS_IO_FLAGS \
{ XFS_IO_ISDIRECT, "DIRECT" }, \
{ XFS_IO_INVIS, "INVIS"}
#endif /* __XFS_INODE_H__ */ #endif /* __XFS_INODE_H__ */
...@@ -788,5 +788,5 @@ xfs_inode_item_format_convert( ...@@ -788,5 +788,5 @@ xfs_inode_item_format_convert(
in_f->ilf_boffset = in_f64->ilf_boffset; in_f->ilf_boffset = in_f64->ilf_boffset;
return 0; return 0;
} }
return EFSCORRUPTED; return -EFSCORRUPTED;
} }
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
...@@ -30,6 +30,22 @@ typedef int (*bulkstat_one_pf)(struct xfs_mount *mp, ...@@ -30,6 +30,22 @@ typedef int (*bulkstat_one_pf)(struct xfs_mount *mp,
int *ubused, int *ubused,
int *stat); int *stat);
struct xfs_bulkstat_agichunk {
xfs_ino_t ac_lastino; /* last inode returned */
char __user **ac_ubuffer;/* pointer into user's buffer */
int ac_ubleft; /* bytes left in user's buffer */
int ac_ubelem; /* spaces used in user's buffer */
};
int
xfs_bulkstat_ag_ichunk(
struct xfs_mount *mp,
xfs_agnumber_t agno,
struct xfs_inobt_rec_incore *irbp,
bulkstat_one_pf formatter,
size_t statstruct_size,
struct xfs_bulkstat_agichunk *acp);
/* /*
* Values for stat return value. * Values for stat return value.
*/ */
...@@ -50,13 +66,6 @@ xfs_bulkstat( ...@@ -50,13 +66,6 @@ xfs_bulkstat(
char __user *ubuffer,/* buffer with inode stats */ char __user *ubuffer,/* buffer with inode stats */
int *done); /* 1 if there are more stats to get */ int *done); /* 1 if there are more stats to get */
int
xfs_bulkstat_single(
xfs_mount_t *mp,
xfs_ino_t *lastinop,
char __user *buffer,
int *done);
typedef int (*bulkstat_one_fmt_pf)( /* used size in bytes or negative error */ typedef int (*bulkstat_one_fmt_pf)( /* used size in bytes or negative error */
void __user *ubuffer, /* buffer to write to */ void __user *ubuffer, /* buffer to write to */
int ubsize, /* remaining user buffer sz */ int ubsize, /* remaining user buffer sz */
......
此差异已折叠。
此差异已折叠。
此差异已折叠。
...@@ -405,6 +405,8 @@ struct xlog { ...@@ -405,6 +405,8 @@ struct xlog {
struct xlog_grant_head l_reserve_head; struct xlog_grant_head l_reserve_head;
struct xlog_grant_head l_write_head; struct xlog_grant_head l_write_head;
struct xfs_kobj l_kobj;
/* The following field are used for debugging; need to hold icloglock */ /* The following field are used for debugging; need to hold icloglock */
#ifdef DEBUG #ifdef DEBUG
char *l_iclog_bak[XLOG_MAX_ICLOGS]; char *l_iclog_bak[XLOG_MAX_ICLOGS];
......
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册