]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - fs/nilfs2/segment.c
Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/djbw/async_tx
[karo-tx-linux.git] / fs / nilfs2 / segment.c
index c9201649cc49f65e92a42cb3cd1fbe6c81e9184d..9fd051a33c4f34edef3ce62a240c696d7227f285 100644 (file)
@@ -1914,12 +1914,12 @@ static void nilfs_segctor_complete_write(struct nilfs_sc_info *sci)
                        }
                }
 
-               if (!NILFS_SEG_SIMPLEX(&segbuf->sb_sum)) {
-                       if (NILFS_SEG_LOGBGN(&segbuf->sb_sum)) {
+               if (!nilfs_segbuf_simplex(segbuf)) {
+                       if (segbuf->sb_sum.flags & NILFS_SS_LOGBGN) {
                                set_bit(NILFS_SC_UNCLOSED, &sci->sc_flags);
                                sci->sc_lseg_stime = jiffies;
                        }
-                       if (NILFS_SEG_LOGEND(&segbuf->sb_sum))
+                       if (segbuf->sb_sum.flags & NILFS_SS_LOGEND)
                                clear_bit(NILFS_SC_UNCLOSED, &sci->sc_flags);
                }
        }
@@ -1951,7 +1951,6 @@ static void nilfs_segctor_complete_write(struct nilfs_sc_info *sci)
        if (update_sr) {
                nilfs_set_last_segment(nilfs, segbuf->sb_pseg_start,
                                       segbuf->sb_sum.seg_seq, nilfs->ns_cno++);
-               set_nilfs_sb_dirty(nilfs);
 
                clear_bit(NILFS_SC_HAVE_DELTA, &sci->sc_flags);
                clear_bit(NILFS_SC_DIRTY, &sci->sc_flags);
@@ -2082,7 +2081,7 @@ static int nilfs_segctor_do_construct(struct nilfs_sc_info *sci, int mode)
 
                /* Avoid empty segment */
                if (sci->sc_stage.scnt == NILFS_ST_DONE &&
-                   NILFS_SEG_EMPTY(&sci->sc_curseg->sb_sum)) {
+                   nilfs_segbuf_empty(sci->sc_curseg)) {
                        nilfs_segctor_abort_construction(sci, nilfs, 1);
                        goto out;
                }
@@ -2408,6 +2407,7 @@ static int nilfs_segctor_construct(struct nilfs_sc_info *sci, int mode)
 {
        struct nilfs_sb_info *sbi = sci->sc_sbi;
        struct the_nilfs *nilfs = sbi->s_nilfs;
+       struct nilfs_super_block **sbp;
        int err = 0;
 
        nilfs_segctor_accept(sci);
@@ -2423,8 +2423,13 @@ static int nilfs_segctor_construct(struct nilfs_sc_info *sci, int mode)
                if (test_bit(NILFS_SC_SUPER_ROOT, &sci->sc_flags) &&
                    nilfs_discontinued(nilfs)) {
                        down_write(&nilfs->ns_sem);
-                       err = nilfs_commit_super(
-                               sbi, nilfs_altsb_need_update(nilfs));
+                       err = -EIO;
+                       sbp = nilfs_prepare_super(sbi,
+                                                 nilfs_sb_will_flip(nilfs));
+                       if (likely(sbp)) {
+                               nilfs_set_log_cursor(sbp[0], nilfs);
+                               err = nilfs_commit_super(sbi, NILFS_SB_COMMIT);
+                       }
                        up_write(&nilfs->ns_sem);
                }
        }