tux3: Drop codes for older than kernel v3.12 Signed-off-by: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
diff --git a/fs/tux3/buffer_writeback.c b/fs/tux3/buffer_writeback.c index 8f4a1a5..95a1c17 100644 --- a/fs/tux3/buffer_writeback.c +++ b/fs/tux3/buffer_writeback.c
@@ -262,7 +262,6 @@ static void bufvec_page_end_io(struct page *page, int uptodate, int quiet) { end_page_writeback(page); - tux3_accout_clear_writeback(page); } /* Completion of buffer for I/O */
diff --git a/fs/tux3/buffer_writebacklib.c b/fs/tux3/buffer_writebacklib.c index 1b398d3..917e80b 100644 --- a/fs/tux3/buffer_writebacklib.c +++ b/fs/tux3/buffer_writebacklib.c
@@ -109,10 +109,8 @@ PAGECACHE_TAG_TOWRITE); spin_unlock_irqrestore(&mapping->tree_lock, flags); } - if (!old_writeback) { + if (!old_writeback) account_page_writeback(page); - tux3_accout_set_writeback(page); - } #if 0 /* FIXME */ mem_cgroup_end_update_page_stat(page, &locked, &memcg_flags); #endif
diff --git a/fs/tux3/commit_flusher.h b/fs/tux3/commit_flusher.h index 41a204e..2c0a144 100644 --- a/fs/tux3/commit_flusher.h +++ b/fs/tux3/commit_flusher.h
@@ -5,15 +5,9 @@ #if TUX3_FLUSHER == TUX3_FLUSHER_ASYNC_HACK /* Hack for BDI_CAP_NO_WRITEBACK */ -void tux3_accout_set_writeback(struct page *page); -void tux3_accout_clear_writeback(struct page *page); void tux3_set_mapping_bdi(struct inode *inode); -void tux3_start_periodical_flusher(struct sb *sb); #else -static inline void tux3_accout_set_writeback(struct page *page) { } -static inline void tux3_accout_clear_writeback(struct page *page) { } static inline void tux3_set_mapping_bdi(struct inode *inode) { } -static inline void tux3_start_periodical_flusher(struct sb *sb) { } #endif int tux3_init_flusher(struct sb *sb);
diff --git a/fs/tux3/commit_flusher_hack.c b/fs/tux3/commit_flusher_hack.c index 3925a0e..b5d67ff 100644 --- a/fs/tux3/commit_flusher_hack.c +++ b/fs/tux3/commit_flusher_hack.c
@@ -236,7 +236,7 @@ return work; } -static long tux3_do_writeback(struct bdi_writeback *wb, int force_wait) +static long tux3_do_writeback(struct bdi_writeback *wb) { struct backing_dev_info *bdi = wb->bdi; struct wb_writeback_work *work = NULL; @@ -252,14 +252,6 @@ work->range_cyclic, work->for_background, work->reason, work->done); -#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0) - /* - * Override sync mode, in case we must wait for completion - * because this thread is exiting now. - */ - if (force_wait) - work->sync_mode = WB_SYNC_ALL; -#endif wrote += tux3_wb_writeback(wb, work); /* @@ -283,176 +275,6 @@ return wrote; } -#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0) -#define TUX3_BDI_CAP (BDI_CAP_NO_WRITEBACK | BDI_CAP_MAP_COPY) - -/* - * HACK: We set BDI_CAP_NO_WRITEBACK to bdi to disable flusher task - * management to overwrite flusher task. - * - * But, BDI_CAP_NO_WRITEBACK disables also some functionality. So, we - * replace some check by own check. - * - * FIXME: Remove this file after implement of flusher interface - */ - -void tux3_accout_set_writeback(struct page *page) -{ - /* - * Hack: BDI_CAP_NO_WRITEBACK disables this accouting, so we - * do ourself instead. - */ - struct address_space *mapping = page->mapping; - if (mapping) - inc_bdi_stat(mapping->backing_dev_info, BDI_WRITEBACK); -} - -void tux3_accout_clear_writeback(struct page *page) -{ - /* - * Hack: BDI_CAP_NO_WRITEBACK disables this accouting, so we - * do ourself instead. - */ - struct address_space *mapping = page->mapping; - if (mapping) { - dec_bdi_stat(mapping->backing_dev_info, BDI_WRITEBACK); - bdi_writeout_inc(mapping->backing_dev_info); - } -} - -/* - * If dirty inode list was empty, we start the timer for periodical - * flush. (based on bdi_wakeup_thread_delayed()) - * - * Hack: BDI_CAP_NO_WRITEBACK disables to wakeup flusher. So, we do - * ourself instead. - */ -void tux3_start_periodical_flusher(struct sb *sb) -{ - struct backing_dev_info *bdi = vfs_sb(sb)->s_bdi; - unsigned long timeout; - - timeout = msecs_to_jiffies(dirty_writeback_interval * 10); - mod_timer(&bdi->wb.wakeup_timer, jiffies + timeout); -} - -/* - * Handle writeback of dirty data for the device backed by this bdi. Also - * wakes up periodically and does kupdated style flushing. - */ -static int tux3_writeback_thread(void *data) -{ - struct bdi_writeback *wb = data; - struct backing_dev_info *bdi = wb->bdi; - long pages_written; - - current->flags |= PF_SWAPWRITE; - set_freezable(); - wb->last_active = jiffies; - - /* - * Our parent may run at a different priority, just set us to normal - */ - set_user_nice(current, 0); - - while (!kthread_freezable_should_stop(NULL)) { - /* - * Remove own delayed wake-up timer, since we are already awake - * and we'll take care of the preriodic write-back. - */ - del_timer(&wb->wakeup_timer); -#if 0 - { - struct inode *inode; - spin_lock(&wb->list_lock); - list_for_each_entry(inode, &wb->b_dirty, i_wb_list) { - trace("inum %Lx", tux_inode(inode)->inum); - } - spin_unlock(&wb->list_lock); - } -#endif - pages_written = tux3_do_writeback(wb, 0); - - if (pages_written) - wb->last_active = jiffies; - - set_current_state(TASK_INTERRUPTIBLE); - if (!list_empty(&bdi->work_list) || kthread_should_stop()) { - __set_current_state(TASK_RUNNING); - continue; - } - - if (wb_has_dirty_io(wb) && dirty_writeback_interval) - schedule_timeout(msecs_to_jiffies(dirty_writeback_interval * 10)); - else { - /* - * We have nothing to do, so can go sleep without any - * timeout and save power. When a work is queued or - * something is made dirty - we will be woken up. - */ - schedule(); - } - } - - /* Flush any work that raced with us exiting */ - if (!list_empty(&bdi->work_list)) - tux3_do_writeback(wb, 1); - - return 0; -} - -static int tux3_setup_writeback(struct sb *sb, struct backing_dev_info *bdi) -{ - dev_t dev = vfs_sb(sb)->s_bdev->bd_dev; - struct task_struct *task; - - task = kthread_create(tux3_writeback_thread, &bdi->wb, - "flush-%s-%u:%u", - bdi->name, MAJOR(dev), MINOR(dev)); - if (IS_ERR(task)) - return PTR_ERR(task); - - /* - * The spinlock makes sure we do not lose wake-ups when racing - * with 'bdi_queue_work()'. And as soon as the bdi thread is - * visible, we can start it. - */ - spin_lock_bh(&bdi->wb_lock); - bdi->wb.task = task; - spin_unlock_bh(&bdi->wb_lock); - - return 0; -} - -static void tux3_wakeup_writeback(struct backing_dev_info *bdi) -{ - wake_up_process(bdi->wb.task); -} - -static void tux3_destroy_writeback(struct backing_dev_info *bdi) -{ - /* - * If bdi has BDI_CAP_NO_WRITEBACK, bdi_destory() doesn't - * cleanup bdi. So, this remove it from capabilities. - */ - bdi->capabilities &= ~BDI_CAP_NO_WRITEBACK; - bdi_destroy(bdi); -} -#else /* LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0) */ -#define TUX3_BDI_CAP BDI_CAP_MAP_COPY - -void tux3_accout_set_writeback(struct page *page) -{ -} - -void tux3_accout_clear_writeback(struct page *page) -{ -} - -void tux3_start_periodical_flusher(struct sb *sb) -{ -} - /* Dirty hack to get bdi_wq address from module */ static struct workqueue_struct *kernel_bdi_wq; @@ -486,7 +308,7 @@ * rescuer as work_list needs to be drained. */ do { - pages_written = tux3_do_writeback(wb, 0); + pages_written = tux3_do_writeback(wb); // trace_writeback_pages_written(pages_written); } while (!list_empty(&bdi->work_list)); } @@ -532,16 +354,6 @@ return 0; } -static void tux3_wakeup_writeback(struct backing_dev_info *bdi) -{ -} - -static void tux3_destroy_writeback(struct backing_dev_info *bdi) -{ - bdi_destroy(bdi); -} -#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0) */ - static int tux3_congested_fn(void *congested_data, int bdi_bits) { return bdi_congested(congested_data, bdi_bits); @@ -561,7 +373,7 @@ bdi->congested_fn = tux3_congested_fn; bdi->congested_data = vfs_sb(sb)->s_bdi; - err = bdi_setup_and_register(bdi, "tux3", TUX3_BDI_CAP); + err = bdi_setup_and_register(bdi, "tux3", BDI_CAP_MAP_COPY); if (err) return err; @@ -573,8 +385,6 @@ vfs_sb(sb)->s_bdi = bdi; - tux3_wakeup_writeback(bdi); - return 0; } @@ -582,7 +392,7 @@ { struct backing_dev_info *bdi = vfs_sb(sb)->s_bdi; if (bdi == &sb->bdi) - tux3_destroy_writeback(bdi); + bdi_destroy(bdi); } static void schedule_flush_delta(struct sb *sb)
diff --git a/fs/tux3/inode_vfslib.c b/fs/tux3/inode_vfslib.c index 7b91d33..cc09623 100644 --- a/fs/tux3/inode_vfslib.c +++ b/fs/tux3/inode_vfslib.c
@@ -31,19 +31,11 @@ change_end_if_needed(sb); mutex_unlock(&inode->i_mutex); -#if LINUX_VERSION_CODE < KERNEL_VERSION(3,12,0) - if (ret > 0 || ret == -EIOCBQUEUED) { -#else if (ret > 0) { -#endif ssize_t err; err = generic_write_sync(file, iocb->ki_pos - ret, ret); -#if LINUX_VERSION_CODE < KERNEL_VERSION(3,12,0) - if (err < 0 && ret > 0) -#else if (err < 0) -#endif ret = err; } return ret;
diff --git a/fs/tux3/kcompat.h b/fs/tux3/kcompat.h index 19a65fe..b6acb2e 100644 --- a/fs/tux3/kcompat.h +++ b/fs/tux3/kcompat.h
@@ -9,14 +9,5 @@ #include <linux/version.h> -#if LINUX_VERSION_CODE < KERNEL_VERSION(3,9,0) -static inline struct inode *file_inode(struct file *file) -{ - return file->f_dentry->d_inode; -} - -#define MODULE_ALIAS_FS(x) -#endif - #endif /* !__KERNEL__ */ #endif /* !TUX3_KCOMPAT_H */
diff --git a/fs/tux3/writeback.c b/fs/tux3/writeback.c index 80a3a91..df4f4bf 100644 --- a/fs/tux3/writeback.c +++ b/fs/tux3/writeback.c
@@ -182,7 +182,7 @@ unsigned mask = tux3_dirty_mask(flags, delta); struct sb_delta_dirty *s_ddc; struct inode_delta_dirty *i_ddc; - int re_dirtied = 0, initial_dirty = 0; + int re_dirtied = 0; if ((tuxnode->flags & mask) == mask) return; @@ -206,7 +206,6 @@ if (s_ddc) { spin_lock(&sb->dirty_inodes_lock); - initial_dirty = list_empty(&s_ddc->dirty_inodes); if (list_empty(&i_ddc->dirty_list)) { list_add_tail(&i_ddc->dirty_list, &s_ddc->dirty_inodes); @@ -224,13 +223,6 @@ */ if (re_dirtied) tux3_inode_wb_update_dirtied_when(inode); - - /* - * If dirty inode list was empty, we start the timer for - * periodical flush. - */ - if (initial_dirty) - tux3_start_periodical_flusher(sb); } /*