Merge git://oss.sgi.com:8090/oss/git/xfs-2.6
This commit is contained in:
commit
4ad5bd2568
|
@ -941,13 +941,12 @@ __linvfs_get_block(
|
||||||
int retpbbm = 1;
|
int retpbbm = 1;
|
||||||
int error;
|
int error;
|
||||||
|
|
||||||
if (blocks) {
|
|
||||||
offset = blocks << inode->i_blkbits; /* 64 bit goodness */
|
|
||||||
size = (ssize_t) min_t(xfs_off_t, offset, LONG_MAX);
|
|
||||||
} else {
|
|
||||||
size = 1 << inode->i_blkbits;
|
|
||||||
}
|
|
||||||
offset = (xfs_off_t)iblock << inode->i_blkbits;
|
offset = (xfs_off_t)iblock << inode->i_blkbits;
|
||||||
|
if (blocks)
|
||||||
|
size = (ssize_t) min_t(xfs_off_t, LONG_MAX,
|
||||||
|
(xfs_off_t)blocks << inode->i_blkbits);
|
||||||
|
else
|
||||||
|
size = 1 << inode->i_blkbits;
|
||||||
|
|
||||||
VOP_BMAP(vp, offset, size,
|
VOP_BMAP(vp, offset, size,
|
||||||
create ? flags : BMAPI_READ, &iomap, &retpbbm, error);
|
create ? flags : BMAPI_READ, &iomap, &retpbbm, error);
|
||||||
|
@ -1007,7 +1006,7 @@ __linvfs_get_block(
|
||||||
ASSERT(iomap.iomap_bsize - iomap.iomap_delta > 0);
|
ASSERT(iomap.iomap_bsize - iomap.iomap_delta > 0);
|
||||||
offset = min_t(xfs_off_t,
|
offset = min_t(xfs_off_t,
|
||||||
iomap.iomap_bsize - iomap.iomap_delta,
|
iomap.iomap_bsize - iomap.iomap_delta,
|
||||||
blocks << inode->i_blkbits);
|
(xfs_off_t)blocks << inode->i_blkbits);
|
||||||
bh_result->b_size = (u32) min_t(xfs_off_t, UINT_MAX, offset);
|
bh_result->b_size = (u32) min_t(xfs_off_t, UINT_MAX, offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -310,7 +310,8 @@ xfs_attr_shortform_remove(xfs_da_args_t *args)
|
||||||
* Fix up the start offset of the attribute fork
|
* Fix up the start offset of the attribute fork
|
||||||
*/
|
*/
|
||||||
totsize -= size;
|
totsize -= size;
|
||||||
if (totsize == sizeof(xfs_attr_sf_hdr_t) && !args->addname) {
|
if (totsize == sizeof(xfs_attr_sf_hdr_t) && !args->addname &&
|
||||||
|
!(mp->m_flags & XFS_MOUNT_COMPAT_ATTR)) {
|
||||||
/*
|
/*
|
||||||
* Last attribute now removed, revert to original
|
* Last attribute now removed, revert to original
|
||||||
* inode format making all literal area available
|
* inode format making all literal area available
|
||||||
|
@ -328,7 +329,8 @@ xfs_attr_shortform_remove(xfs_da_args_t *args)
|
||||||
xfs_idata_realloc(dp, -size, XFS_ATTR_FORK);
|
xfs_idata_realloc(dp, -size, XFS_ATTR_FORK);
|
||||||
dp->i_d.di_forkoff = xfs_attr_shortform_bytesfit(dp, totsize);
|
dp->i_d.di_forkoff = xfs_attr_shortform_bytesfit(dp, totsize);
|
||||||
ASSERT(dp->i_d.di_forkoff);
|
ASSERT(dp->i_d.di_forkoff);
|
||||||
ASSERT(totsize > sizeof(xfs_attr_sf_hdr_t) || args->addname);
|
ASSERT(totsize > sizeof(xfs_attr_sf_hdr_t) || args->addname ||
|
||||||
|
(mp->m_flags & XFS_MOUNT_COMPAT_ATTR));
|
||||||
dp->i_afp->if_ext_max =
|
dp->i_afp->if_ext_max =
|
||||||
XFS_IFORK_ASIZE(dp) / (uint)sizeof(xfs_bmbt_rec_t);
|
XFS_IFORK_ASIZE(dp) / (uint)sizeof(xfs_bmbt_rec_t);
|
||||||
dp->i_df.if_ext_max =
|
dp->i_df.if_ext_max =
|
||||||
|
@ -737,7 +739,8 @@ xfs_attr_shortform_allfit(xfs_dabuf_t *bp, xfs_inode_t *dp)
|
||||||
+ name_loc->namelen
|
+ name_loc->namelen
|
||||||
+ INT_GET(name_loc->valuelen, ARCH_CONVERT);
|
+ INT_GET(name_loc->valuelen, ARCH_CONVERT);
|
||||||
}
|
}
|
||||||
if (bytes == sizeof(struct xfs_attr_sf_hdr))
|
if (!(dp->i_mount->m_flags & XFS_MOUNT_COMPAT_ATTR) &&
|
||||||
|
(bytes == sizeof(struct xfs_attr_sf_hdr)))
|
||||||
return(-1);
|
return(-1);
|
||||||
return(xfs_attr_shortform_bytesfit(dp, bytes));
|
return(xfs_attr_shortform_bytesfit(dp, bytes));
|
||||||
}
|
}
|
||||||
|
@ -775,6 +778,8 @@ xfs_attr_leaf_to_shortform(xfs_dabuf_t *bp, xfs_da_args_t *args, int forkoff)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
if (forkoff == -1) {
|
if (forkoff == -1) {
|
||||||
|
ASSERT(!(dp->i_mount->m_flags & XFS_MOUNT_COMPAT_ATTR));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Last attribute was removed, revert to original
|
* Last attribute was removed, revert to original
|
||||||
* inode format making all literal area available
|
* inode format making all literal area available
|
||||||
|
|
|
@ -550,7 +550,7 @@ xfs_fs_goingdown(
|
||||||
struct vfs *vfsp = XFS_MTOVFS(mp);
|
struct vfs *vfsp = XFS_MTOVFS(mp);
|
||||||
struct super_block *sb = freeze_bdev(vfsp->vfs_super->s_bdev);
|
struct super_block *sb = freeze_bdev(vfsp->vfs_super->s_bdev);
|
||||||
|
|
||||||
if (sb) {
|
if (sb && !IS_ERR(sb)) {
|
||||||
xfs_force_shutdown(mp, XFS_FORCE_UMOUNT);
|
xfs_force_shutdown(mp, XFS_FORCE_UMOUNT);
|
||||||
thaw_bdev(sb->s_bdev, sb);
|
thaw_bdev(sb->s_bdev, sb);
|
||||||
}
|
}
|
||||||
|
|
|
@ -69,7 +69,7 @@ typedef struct xfs_iomap {
|
||||||
xfs_buftarg_t *iomap_target;
|
xfs_buftarg_t *iomap_target;
|
||||||
xfs_off_t iomap_offset; /* offset of mapping, bytes */
|
xfs_off_t iomap_offset; /* offset of mapping, bytes */
|
||||||
xfs_off_t iomap_bsize; /* size of mapping, bytes */
|
xfs_off_t iomap_bsize; /* size of mapping, bytes */
|
||||||
size_t iomap_delta; /* offset into mapping, bytes */
|
xfs_off_t iomap_delta; /* offset into mapping, bytes */
|
||||||
iomap_flags_t iomap_flags;
|
iomap_flags_t iomap_flags;
|
||||||
} xfs_iomap_t;
|
} xfs_iomap_t;
|
||||||
|
|
||||||
|
|
|
@ -494,10 +494,8 @@ typedef struct log {
|
||||||
|
|
||||||
#define XLOG_FORCED_SHUTDOWN(log) ((log)->l_flags & XLOG_IO_ERROR)
|
#define XLOG_FORCED_SHUTDOWN(log) ((log)->l_flags & XLOG_IO_ERROR)
|
||||||
|
|
||||||
#define XLOG_GRANT_SUB_SPACE(log,bytes,type) \
|
#define XLOG_GRANT_SUB_SPACE(log,bytes,type) \
|
||||||
xlog_grant_sub_space(log,bytes,type)
|
{ \
|
||||||
static inline void xlog_grant_sub_space(struct log *log, int bytes, int type)
|
|
||||||
{
|
|
||||||
if (type == 'w') { \
|
if (type == 'w') { \
|
||||||
(log)->l_grant_write_bytes -= (bytes); \
|
(log)->l_grant_write_bytes -= (bytes); \
|
||||||
if ((log)->l_grant_write_bytes < 0) { \
|
if ((log)->l_grant_write_bytes < 0) { \
|
||||||
|
@ -511,13 +509,9 @@ static inline void xlog_grant_sub_space(struct log *log, int bytes, int type)
|
||||||
(log)->l_grant_reserve_cycle--; \
|
(log)->l_grant_reserve_cycle--; \
|
||||||
} \
|
} \
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
|
#define XLOG_GRANT_ADD_SPACE(log,bytes,type) \
|
||||||
#define XLOG_GRANT_ADD_SPACE(log,bytes,type) \
|
{ \
|
||||||
xlog_grant_add_space(log,bytes,type)
|
|
||||||
static inline void
|
|
||||||
xlog_grant_add_space(struct log *log, int bytes, int type)
|
|
||||||
{
|
|
||||||
if (type == 'w') { \
|
if (type == 'w') { \
|
||||||
(log)->l_grant_write_bytes += (bytes); \
|
(log)->l_grant_write_bytes += (bytes); \
|
||||||
if ((log)->l_grant_write_bytes > (log)->l_logsize) { \
|
if ((log)->l_grant_write_bytes > (log)->l_logsize) { \
|
||||||
|
@ -531,12 +525,9 @@ xlog_grant_add_space(struct log *log, int bytes, int type)
|
||||||
(log)->l_grant_reserve_cycle++; \
|
(log)->l_grant_reserve_cycle++; \
|
||||||
} \
|
} \
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
|
#define XLOG_INS_TICKETQ(q, tic) \
|
||||||
#define XLOG_INS_TICKETQ(q, tic) xlog_ins_ticketq(q, tic)
|
{ \
|
||||||
static inline void
|
|
||||||
xlog_ins_ticketq(struct xlog_ticket *q, struct xlog_ticket *tic)
|
|
||||||
{ \
|
|
||||||
if (q) { \
|
if (q) { \
|
||||||
(tic)->t_next = (q); \
|
(tic)->t_next = (q); \
|
||||||
(tic)->t_prev = (q)->t_prev; \
|
(tic)->t_prev = (q)->t_prev; \
|
||||||
|
@ -547,12 +538,9 @@ xlog_ins_ticketq(struct xlog_ticket *q, struct xlog_ticket *tic)
|
||||||
(q) = (tic); \
|
(q) = (tic); \
|
||||||
} \
|
} \
|
||||||
(tic)->t_flags |= XLOG_TIC_IN_Q; \
|
(tic)->t_flags |= XLOG_TIC_IN_Q; \
|
||||||
}
|
}
|
||||||
|
#define XLOG_DEL_TICKETQ(q, tic) \
|
||||||
#define XLOG_DEL_TICKETQ(q, tic) xlog_del_ticketq(q, tic)
|
{ \
|
||||||
static inline void
|
|
||||||
xlog_del_ticketq(struct xlog_ticket *q, struct xlog_ticket *tic)
|
|
||||||
{ \
|
|
||||||
if ((tic) == (tic)->t_next) { \
|
if ((tic) == (tic)->t_next) { \
|
||||||
(q) = NULL; \
|
(q) = NULL; \
|
||||||
} else { \
|
} else { \
|
||||||
|
@ -562,7 +550,7 @@ xlog_del_ticketq(struct xlog_ticket *q, struct xlog_ticket *tic)
|
||||||
} \
|
} \
|
||||||
(tic)->t_next = (tic)->t_prev = NULL; \
|
(tic)->t_next = (tic)->t_prev = NULL; \
|
||||||
(tic)->t_flags &= ~XLOG_TIC_IN_Q; \
|
(tic)->t_flags &= ~XLOG_TIC_IN_Q; \
|
||||||
}
|
}
|
||||||
|
|
||||||
/* common routines */
|
/* common routines */
|
||||||
extern xfs_lsn_t xlog_assign_tail_lsn(struct xfs_mount *mp);
|
extern xfs_lsn_t xlog_assign_tail_lsn(struct xfs_mount *mp);
|
||||||
|
|
|
@ -3958,8 +3958,9 @@ xfs_finish_reclaim_all(xfs_mount_t *mp, int noblock)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
XFS_MOUNT_IUNLOCK(mp);
|
XFS_MOUNT_IUNLOCK(mp);
|
||||||
xfs_finish_reclaim(ip, noblock,
|
if (xfs_finish_reclaim(ip, noblock,
|
||||||
XFS_IFLUSH_DELWRI_ELSE_ASYNC);
|
XFS_IFLUSH_DELWRI_ELSE_ASYNC))
|
||||||
|
delay(1);
|
||||||
purged = 1;
|
purged = 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue