aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/xfs/linux-2.6/xfs_lrw.c4
-rw-r--r--fs/xfs/linux-2.6/xfs_vfs.h7
-rw-r--r--fs/xfs/xfs_log.c2
-rw-r--r--fs/xfs/xfs_trans.c17
4 files changed, 11 insertions, 19 deletions
diff --git a/fs/xfs/linux-2.6/xfs_lrw.c b/fs/xfs/linux-2.6/xfs_lrw.c
index 8696096f8d22..3e76c5c9dda1 100644
--- a/fs/xfs/linux-2.6/xfs_lrw.c
+++ b/fs/xfs/linux-2.6/xfs_lrw.c
@@ -668,11 +668,11 @@ xfs_write(
668 io = &xip->i_iocore; 668 io = &xip->i_iocore;
669 mp = io->io_mount; 669 mp = io->io_mount;
670 670
671 vfs_wait_for_freeze(vp->v_vfsp, SB_FREEZE_WRITE);
672
671 if (XFS_FORCED_SHUTDOWN(mp)) 673 if (XFS_FORCED_SHUTDOWN(mp))
672 return -EIO; 674 return -EIO;
673 675
674 fs_check_frozen(vp->v_vfsp, SB_FREEZE_WRITE);
675
676 if (ioflags & IO_ISDIRECT) { 676 if (ioflags & IO_ISDIRECT) {
677 xfs_buftarg_t *target = 677 xfs_buftarg_t *target =
678 (xip->i_d.di_flags & XFS_DIFLAG_REALTIME) ? 678 (xip->i_d.di_flags & XFS_DIFLAG_REALTIME) ?
diff --git a/fs/xfs/linux-2.6/xfs_vfs.h b/fs/xfs/linux-2.6/xfs_vfs.h
index 7b88eeae0f26..91fc2c4b3353 100644
--- a/fs/xfs/linux-2.6/xfs_vfs.h
+++ b/fs/xfs/linux-2.6/xfs_vfs.h
@@ -190,6 +190,9 @@ extern void vfs_init_vnode(bhv_desc_t *, struct bhv_vnode *, bhv_desc_t *, int);
190extern void vfs_force_shutdown(bhv_desc_t *, int, char *, int); 190extern void vfs_force_shutdown(bhv_desc_t *, int, char *, int);
191extern void vfs_freeze(bhv_desc_t *); 191extern void vfs_freeze(bhv_desc_t *);
192 192
193#define vfs_test_for_freeze(vfs) ((vfs)->vfs_super->s_frozen)
194#define vfs_wait_for_freeze(vfs,l) vfs_check_frozen((vfs)->vfs_super, (l))
195
193typedef struct bhv_module_vfsops { 196typedef struct bhv_module_vfsops {
194 struct bhv_vfsops bhv_common; 197 struct bhv_vfsops bhv_common;
195 void * bhv_custom; 198 void * bhv_custom;
@@ -211,8 +214,4 @@ extern void bhv_insert_all_vfsops(struct bhv_vfs *);
211extern void bhv_remove_all_vfsops(struct bhv_vfs *, int); 214extern void bhv_remove_all_vfsops(struct bhv_vfs *, int);
212extern void bhv_remove_vfsops(struct bhv_vfs *, int); 215extern void bhv_remove_vfsops(struct bhv_vfs *, int);
213 216
214#define fs_frozen(vfsp) ((vfsp)->vfs_super->s_frozen)
215#define fs_check_frozen(vfsp, level) \
216 vfs_check_frozen(vfsp->vfs_super, level);
217
218#endif /* __XFS_VFS_H__ */ 217#endif /* __XFS_VFS_H__ */
diff --git a/fs/xfs/xfs_log.c b/fs/xfs/xfs_log.c
index 9f70ab3e0983..95d679cd4e75 100644
--- a/fs/xfs/xfs_log.c
+++ b/fs/xfs/xfs_log.c
@@ -817,7 +817,7 @@ xfs_log_need_covered(xfs_mount_t *mp)
817 xlog_t *log = mp->m_log; 817 xlog_t *log = mp->m_log;
818 bhv_vfs_t *vfsp = XFS_MTOVFS(mp); 818 bhv_vfs_t *vfsp = XFS_MTOVFS(mp);
819 819
820 if (fs_frozen(vfsp) || XFS_FORCED_SHUTDOWN(mp) || 820 if (vfs_test_for_freeze(vfsp) || XFS_FORCED_SHUTDOWN(mp) ||
821 (vfsp->vfs_flag & VFS_RDONLY)) 821 (vfsp->vfs_flag & VFS_RDONLY))
822 return 0; 822 return 0;
823 823
diff --git a/fs/xfs/xfs_trans.c b/fs/xfs/xfs_trans.c
index 7a99ed3b187f..39f0b1ed3224 100644
--- a/fs/xfs/xfs_trans.c
+++ b/fs/xfs/xfs_trans.c
@@ -236,11 +236,8 @@ xfs_trans_alloc(
236 xfs_mount_t *mp, 236 xfs_mount_t *mp,
237 uint type) 237 uint type)
238{ 238{
239 fs_check_frozen(XFS_MTOVFS(mp), SB_FREEZE_TRANS); 239 vfs_wait_for_freeze(XFS_MTOVFS(mp), SB_FREEZE_TRANS);
240 atomic_inc(&mp->m_active_trans); 240 return _xfs_trans_alloc(mp, type);
241
242 return (_xfs_trans_alloc(mp, type));
243
244} 241}
245 242
246xfs_trans_t * 243xfs_trans_t *
@@ -250,12 +247,9 @@ _xfs_trans_alloc(
250{ 247{
251 xfs_trans_t *tp; 248 xfs_trans_t *tp;
252 249
253 ASSERT(xfs_trans_zone != NULL); 250 atomic_inc(&mp->m_active_trans);
254 tp = kmem_zone_zalloc(xfs_trans_zone, KM_SLEEP);
255 251
256 /* 252 tp = kmem_zone_zalloc(xfs_trans_zone, KM_SLEEP);
257 * Initialize the transaction structure.
258 */
259 tp->t_magic = XFS_TRANS_MAGIC; 253 tp->t_magic = XFS_TRANS_MAGIC;
260 tp->t_type = type; 254 tp->t_type = type;
261 tp->t_mountp = mp; 255 tp->t_mountp = mp;
@@ -263,8 +257,7 @@ _xfs_trans_alloc(
263 tp->t_busy_free = XFS_LBC_NUM_SLOTS; 257 tp->t_busy_free = XFS_LBC_NUM_SLOTS;
264 XFS_LIC_INIT(&(tp->t_items)); 258 XFS_LIC_INIT(&(tp->t_items));
265 XFS_LBC_INIT(&(tp->t_busy)); 259 XFS_LBC_INIT(&(tp->t_busy));
266 260 return tp;
267 return (tp);
268} 261}
269 262
270/* 263/*