]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/commitdiff
Merge git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc-merge
authorLinus Torvalds <torvalds@g5.osdl.org>
Fri, 25 Nov 2005 17:42:19 +0000 (09:42 -0800)
committerLinus Torvalds <torvalds@g5.osdl.org>
Fri, 25 Nov 2005 17:42:19 +0000 (09:42 -0800)
fs/xfs/linux-2.6/xfs_aops.c
fs/xfs/xfs_attr_leaf.c
fs/xfs/xfs_fsops.c
fs/xfs/xfs_iomap.h
fs/xfs/xfs_log_priv.h
fs/xfs/xfs_vnodeops.c

index c6108971b4e6a4febd84be420c6da7b832acf768..94d3cdfbf9b8054a502b976fb8c7825837bbf85c 100644 (file)
@@ -941,13 +941,12 @@ __linvfs_get_block(
        int                     retpbbm = 1;
        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;
+       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,
                create ? flags : BMAPI_READ, &iomap, &retpbbm, error);
@@ -1007,7 +1006,7 @@ __linvfs_get_block(
                ASSERT(iomap.iomap_bsize - iomap.iomap_delta > 0);
                offset = min_t(xfs_off_t,
                                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);
        }
 
index 35e557b00db2175cdbda7a48ce4f4a2e93b0b0ad..1c7421840c1802441b5345ec766727a0f874b9eb 100644 (file)
@@ -310,7 +310,8 @@ xfs_attr_shortform_remove(xfs_da_args_t *args)
         * Fix up the start offset of the attribute fork
         */
        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
                 * 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);
                dp->i_d.di_forkoff = xfs_attr_shortform_bytesfit(dp, totsize);
                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 =
                        XFS_IFORK_ASIZE(dp) / (uint)sizeof(xfs_bmbt_rec_t);
                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
                                + 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(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;
 
        if (forkoff == -1) {
+               ASSERT(!(dp->i_mount->m_flags & XFS_MOUNT_COMPAT_ATTR));
+
                /*
                 * Last attribute was removed, revert to original
                 * inode format making all literal area available
index 7ceabd0e2d9d93c0abd771855efa245e86454e91..d1236d6f40455c96d188463c188dee42502447db 100644 (file)
@@ -550,7 +550,7 @@ xfs_fs_goingdown(
                struct vfs *vfsp = XFS_MTOVFS(mp);
                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);
                        thaw_bdev(sb->s_bdev, sb);
                }
index fcd6d63bb68ba4c4db7da17d15d8dfcb0572d8e4..3ce204a524b0665df59272cdc4425d0772f95619 100644 (file)
@@ -69,7 +69,7 @@ typedef struct xfs_iomap {
        xfs_buftarg_t           *iomap_target;
        xfs_off_t               iomap_offset;   /* offset 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;
 } xfs_iomap_t;
 
index 8f285149681fcb6c03f05685502c1d036adb24be..4518b188ade69d5e1ff44f850f2a2a5e0e9fd768 100644 (file)
@@ -494,10 +494,8 @@ typedef struct log {
 
 #define XLOG_FORCED_SHUTDOWN(log)      ((log)->l_flags & XLOG_IO_ERROR)
 
-#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)
-{
+#define XLOG_GRANT_SUB_SPACE(log,bytes,type)                           \
+    {                                                                  \
        if (type == 'w') {                                              \
                (log)->l_grant_write_bytes -= (bytes);                  \
                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--;                 \
                }                                                       \
         }                                                              \
-}
-
-#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)
-{
+    }
+#define XLOG_GRANT_ADD_SPACE(log,bytes,type)                           \
+    {                                                                  \
        if (type == 'w') {                                              \
                (log)->l_grant_write_bytes += (bytes);                  \
                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++;                 \
                }                                                       \
         }                                                              \
-}
-
-#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)
-{                                                      \
+    }
+#define XLOG_INS_TICKETQ(q, tic)                       \
+    {                                                  \
        if (q) {                                        \
                (tic)->t_next       = (q);              \
                (tic)->t_prev       = (q)->t_prev;      \
@@ -547,12 +538,9 @@ xlog_ins_ticketq(struct xlog_ticket *q, struct xlog_ticket *tic)
                (q) = (tic);                            \
        }                                               \
        (tic)->t_flags |= XLOG_TIC_IN_Q;                \
-}
-
-#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)
-{                                                      \
+    }
+#define XLOG_DEL_TICKETQ(q, tic)                       \
+    {                                                  \
        if ((tic) == (tic)->t_next) {                   \
                (q) = NULL;                             \
        } 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_flags &= ~XLOG_TIC_IN_Q;               \
-}
+    }
 
 /* common routines */
 extern xfs_lsn_t xlog_assign_tail_lsn(struct xfs_mount *mp);
index 7c1f74531463bb11cac411322a6366420c822921..e03fa2a3d5ed4bb2af022b31c4bf0309c481d702 100644 (file)
@@ -3958,8 +3958,9 @@ xfs_finish_reclaim_all(xfs_mount_t *mp, int noblock)
                                }
                        }
                        XFS_MOUNT_IUNLOCK(mp);
-                       xfs_finish_reclaim(ip, noblock,
-                               XFS_IFLUSH_DELWRI_ELSE_ASYNC);
+                       if (xfs_finish_reclaim(ip, noblock,
+                                       XFS_IFLUSH_DELWRI_ELSE_ASYNC))
+                               delay(1);
                        purged = 1;
                        break;
                }