Merge tag 'asm-generic-4.7' of git://git.kernel.org/pub/scm/linux/kernel/git/arnd...
[deliverable/linux.git] / fs / nilfs2 / segment.c
index 4317f72568e60651709149497c8c027e608cf773..e78b68a81aec15824d0129528e7284f773fa19a4 100644 (file)
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
  *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * Written by Ryusuke Konishi <ryusuke@osrg.net>
+ * Written by Ryusuke Konishi.
  *
  */
 
  */
 #define SC_N_INODEVEC  16   /* Size of locally allocated inode vector */
 
-#define SC_MAX_SEGDELTA 64   /* Upper limit of the number of segments
-                               appended in collection retry loop */
+#define SC_MAX_SEGDELTA 64   /*
+                             * Upper limit of the number of segments
+                             * appended in collection retry loop
+                             */
 
 /* Construction mode */
 enum {
        SC_LSEG_SR = 1, /* Make a logical segment having a super root */
-       SC_LSEG_DSYNC,  /* Flush data blocks of a given file and make
-                          a logical segment without a super root */
-       SC_FLUSH_FILE,  /* Flush data files, leads to segment writes without
-                          creating a checkpoint */
-       SC_FLUSH_DAT,   /* Flush DAT file. This also creates segments without
-                          a checkpoint */
+       SC_LSEG_DSYNC,  /*
+                        * Flush data blocks of a given file and make
+                        * a logical segment without a super root.
+                        */
+       SC_FLUSH_FILE,  /*
+                        * Flush data files, leads to segment writes without
+                        * creating a checkpoint.
+                        */
+       SC_FLUSH_DAT,   /*
+                        * Flush DAT file.  This also creates segments
+                        * without a checkpoint.
+                        */
 };
 
 /* Stage numbers of dirty block collection */
@@ -154,17 +158,15 @@ static int nilfs_prepare_segment_lock(struct nilfs_transaction_info *ti)
        if (cur_ti) {
                if (cur_ti->ti_magic == NILFS_TI_MAGIC)
                        return ++cur_ti->ti_count;
-               else {
-                       /*
-                        * If journal_info field is occupied by other FS,
-                        * it is saved and will be restored on
-                        * nilfs_transaction_commit().
-                        */
-                       printk(KERN_WARNING
-                              "NILFS warning: journal info from a different "
-                              "FS\n");
-                       save = current->journal_info;
-               }
+
+               /*
+                * If journal_info field is occupied by other FS,
+                * it is saved and will be restored on
+                * nilfs_transaction_commit().
+                */
+               printk(KERN_WARNING
+                      "NILFS warning: journal info from a different FS\n");
+               save = current->journal_info;
        }
        if (!ti) {
                ti = kmem_cache_alloc(nilfs_transaction_cachep, GFP_NOFS);
@@ -397,10 +399,10 @@ static void nilfs_transaction_unlock(struct super_block *sb)
 
 static void *nilfs_segctor_map_segsum_entry(struct nilfs_sc_info *sci,
                                            struct nilfs_segsum_pointer *ssp,
-                                           unsigned bytes)
+                                           unsigned int bytes)
 {
        struct nilfs_segment_buffer *segbuf = sci->sc_curseg;
-       unsigned blocksize = sci->sc_super->s_blocksize;
+       unsigned int blocksize = sci->sc_super->s_blocksize;
        void *p;
 
        if (unlikely(ssp->offset + bytes > blocksize)) {
@@ -422,8 +424,8 @@ static int nilfs_segctor_reset_segment_buffer(struct nilfs_sc_info *sci)
 {
        struct nilfs_segment_buffer *segbuf = sci->sc_curseg;
        struct buffer_head *sumbh;
-       unsigned sumbytes;
-       unsigned flags = 0;
+       unsigned int sumbytes;
+       unsigned int flags = 0;
        int err;
 
        if (nilfs_doing_gc())
@@ -444,8 +446,10 @@ static int nilfs_segctor_feed_segment(struct nilfs_sc_info *sci)
 {
        sci->sc_nblk_this_inc += sci->sc_curseg->sb_sum.nblocks;
        if (NILFS_SEGBUF_IS_LAST(sci->sc_curseg, &sci->sc_segbufs))
-               return -E2BIG; /* The current segment is filled up
-                                 (internal code) */
+               return -E2BIG; /*
+                               * The current segment is filled up
+                               * (internal code)
+                               */
        sci->sc_curseg = NILFS_NEXT_SEGBUF(sci->sc_curseg);
        return nilfs_segctor_reset_segment_buffer(sci);
 }
@@ -472,9 +476,9 @@ static int nilfs_segctor_add_super_root(struct nilfs_sc_info *sci)
  */
 static int nilfs_segctor_segsum_block_required(
        struct nilfs_sc_info *sci, const struct nilfs_segsum_pointer *ssp,
-       unsigned binfo_size)
+       unsigned int binfo_size)
 {
-       unsigned blocksize = sci->sc_super->s_blocksize;
+       unsigned int blocksize = sci->sc_super->s_blocksize;
        /* Size of finfo and binfo is enough small against blocksize */
 
        return ssp->offset + binfo_size +
@@ -533,7 +537,7 @@ static void nilfs_segctor_end_finfo(struct nilfs_sc_info *sci,
 static int nilfs_segctor_add_file_block(struct nilfs_sc_info *sci,
                                        struct buffer_head *bh,
                                        struct inode *inode,
-                                       unsigned binfo_size)
+                                       unsigned int binfo_size)
 {
        struct nilfs_segment_buffer *segbuf;
        int required, err = 0;
@@ -617,7 +621,7 @@ static void nilfs_write_file_node_binfo(struct nilfs_sc_info *sci,
        *vblocknr = binfo->bi_v.bi_vblocknr;
 }
 
-static struct nilfs_sc_operations nilfs_sc_file_ops = {
+static const struct nilfs_sc_operations nilfs_sc_file_ops = {
        .collect_data = nilfs_collect_file_data,
        .collect_node = nilfs_collect_file_node,
        .collect_bmap = nilfs_collect_file_bmap,
@@ -666,7 +670,7 @@ static void nilfs_write_dat_node_binfo(struct nilfs_sc_info *sci,
        *binfo_dat = binfo->bi_dat;
 }
 
-static struct nilfs_sc_operations nilfs_sc_dat_ops = {
+static const struct nilfs_sc_operations nilfs_sc_dat_ops = {
        .collect_data = nilfs_collect_dat_data,
        .collect_node = nilfs_collect_file_node,
        .collect_bmap = nilfs_collect_dat_bmap,
@@ -674,7 +678,7 @@ static struct nilfs_sc_operations nilfs_sc_dat_ops = {
        .write_node_binfo = nilfs_write_dat_node_binfo,
 };
 
-static struct nilfs_sc_operations nilfs_sc_dsync_ops = {
+static const struct nilfs_sc_operations nilfs_sc_dsync_ops = {
        .collect_data = nilfs_collect_file_data,
        .collect_node = NULL,
        .collect_bmap = NULL,
@@ -777,7 +781,7 @@ static void nilfs_dispose_list(struct the_nilfs *nilfs,
 {
        struct nilfs_inode_info *ii, *n;
        struct nilfs_inode_info *ivec[SC_N_INODEVEC], **pii;
-       unsigned nv = 0;
+       unsigned int nv = 0;
 
        while (!list_empty(head)) {
                spin_lock(&nilfs->ns_inode_lock);
@@ -875,9 +879,11 @@ static int nilfs_segctor_create_checkpoint(struct nilfs_sc_info *sci)
        err = nilfs_cpfile_get_checkpoint(nilfs->ns_cpfile, nilfs->ns_cno, 1,
                                          &raw_cp, &bh_cp);
        if (likely(!err)) {
-               /* The following code is duplicated with cpfile.  But, it is
-                  needed to collect the checkpoint even if it was not newly
-                  created */
+               /*
+                * The following code is duplicated with cpfile.  But, it is
+                * needed to collect the checkpoint even if it was not newly
+                * created.
+                */
                mark_buffer_dirty(bh_cp);
                nilfs_mdt_mark_dirty(nilfs->ns_cpfile);
                nilfs_cpfile_put_checkpoint(
@@ -958,7 +964,7 @@ static void nilfs_segctor_fill_in_super_root(struct nilfs_sc_info *sci,
 {
        struct buffer_head *bh_sr;
        struct nilfs_super_root *raw_sr;
-       unsigned isz, srsz;
+       unsigned int isz, srsz;
 
        bh_sr = NILFS_LAST_SEGBUF(&sci->sc_segbufs)->sb_super_root;
        raw_sr = (struct nilfs_super_root *)bh_sr->b_data;
@@ -1043,7 +1049,7 @@ static size_t nilfs_segctor_buffer_rest(struct nilfs_sc_info *sci)
 
 static int nilfs_segctor_scan_file(struct nilfs_sc_info *sci,
                                   struct inode *inode,
-                                  struct nilfs_sc_operations *sc_ops)
+                                  const struct nilfs_sc_operations *sc_ops)
 {
        LIST_HEAD(data_buffers);
        LIST_HEAD(node_buffers);
@@ -1406,8 +1412,10 @@ static void nilfs_free_incomplete_logs(struct list_head *logs,
        if (atomic_read(&segbuf->sb_err)) {
                /* Case 1: The first segment failed */
                if (segbuf->sb_pseg_start != segbuf->sb_fseg_start)
-                       /* Case 1a:  Partial segment appended into an existing
-                          segment */
+                       /*
+                        * Case 1a:  Partial segment appended into an existing
+                        * segment
+                        */
                        nilfs_terminate_segment(nilfs, segbuf->sb_fseg_start,
                                                segbuf->sb_fseg_end);
                else /* Case 1b:  New full segment */
@@ -1550,7 +1558,7 @@ nilfs_segctor_update_payload_blocknr(struct nilfs_sc_info *sci,
        sector_t blocknr;
        unsigned long nfinfo = segbuf->sb_sum.nfinfo;
        unsigned long nblocks = 0, ndatablk = 0;
-       struct nilfs_sc_operations *sc_op = NULL;
+       const struct nilfs_sc_operations *sc_op = NULL;
        struct nilfs_segsum_pointer ssp;
        struct nilfs_finfo *finfo = NULL;
        union nilfs_binfo binfo;
@@ -1631,8 +1639,10 @@ static int nilfs_segctor_assign(struct nilfs_sc_info *sci, int mode)
 static void nilfs_begin_page_io(struct page *page)
 {
        if (!page || PageWriteback(page))
-               /* For split b-tree node pages, this function may be called
-                  twice.  We ignore the 2nd or later calls by this check. */
+               /*
+                * For split b-tree node pages, this function may be called
+                * twice.  We ignore the 2nd or later calls by this check.
+                */
                return;
 
        lock_page(page);
@@ -1942,7 +1952,7 @@ static int nilfs_segctor_collect_dirty_files(struct nilfs_sc_info *sci,
                                ifile, ii->vfs_inode.i_ino, &ibh);
                        if (unlikely(err)) {
                                nilfs_warning(sci->sc_super, __func__,
-                                             "failed to get inode block.\n");
+                                             "failed to get inode block.");
                                return err;
                        }
                        mark_buffer_dirty(ibh);
@@ -2395,6 +2405,7 @@ static int nilfs_segctor_construct(struct nilfs_sc_info *sci, int mode)
 static void nilfs_construction_timeout(unsigned long data)
 {
        struct task_struct *p = (struct task_struct *)data;
+
        wake_up_process(p);
 }
 
@@ -2555,10 +2566,10 @@ static int nilfs_segctor_thread(void *arg)
 
                if (timeout || sci->sc_seq_request != sci->sc_seq_done)
                        mode = SC_LSEG_SR;
-               else if (!sci->sc_flush_request)
-                       break;
-               else
+               else if (sci->sc_flush_request)
                        mode = nilfs_segctor_flush_mode(sci);
+               else
+                       break;
 
                spin_unlock(&sci->sc_state_lock);
                nilfs_segctor_thread_construct(sci, mode);
@@ -2684,8 +2695,10 @@ static void nilfs_segctor_write_out(struct nilfs_sc_info *sci)
 {
        int ret, retrycount = NILFS_SC_CLEANUP_RETRY;
 
-       /* The segctord thread was stopped and its timer was removed.
-          But some tasks remain. */
+       /*
+        * The segctord thread was stopped and its timer was removed.
+        * But some tasks remain.
+        */
        do {
                struct nilfs_transaction_info ti;
 
@@ -2727,13 +2740,13 @@ static void nilfs_segctor_destroy(struct nilfs_sc_info *sci)
 
        if (!list_empty(&sci->sc_dirty_files)) {
                nilfs_warning(sci->sc_super, __func__,
-                             "dirty file(s) after the final construction\n");
+                             "dirty file(s) after the final construction");
                nilfs_dispose_list(nilfs, &sci->sc_dirty_files, 1);
        }
 
        if (!list_empty(&sci->sc_iput_queue)) {
                nilfs_warning(sci->sc_super, __func__,
-                             "iput queue is not empty\n");
+                             "iput queue is not empty");
                nilfs_dispose_list(nilfs, &sci->sc_iput_queue, 1);
        }
 
@@ -2810,7 +2823,7 @@ void nilfs_detach_log_writer(struct super_block *sb)
        if (!list_empty(&nilfs->ns_dirty_files)) {
                list_splice_init(&nilfs->ns_dirty_files, &garbage_list);
                nilfs_warning(sb, __func__,
-                             "Hit dirty file after stopped log writer\n");
+                             "Hit dirty file after stopped log writer");
        }
        spin_unlock(&nilfs->ns_inode_lock);
        up_write(&nilfs->ns_segctor_sem);
This page took 0.030788 seconds and 5 git commands to generate.