diff options
Diffstat (limited to 'fs/nilfs2/segment.c')
-rw-r--r-- | fs/nilfs2/segment.c | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/fs/nilfs2/segment.c b/fs/nilfs2/segment.c index ada2f1b947a3..6a7dbd8451db 100644 --- a/fs/nilfs2/segment.c +++ b/fs/nilfs2/segment.c | |||
@@ -32,6 +32,7 @@ | |||
32 | #include <linux/kthread.h> | 32 | #include <linux/kthread.h> |
33 | #include <linux/crc32.h> | 33 | #include <linux/crc32.h> |
34 | #include <linux/pagevec.h> | 34 | #include <linux/pagevec.h> |
35 | #include <linux/slab.h> | ||
35 | #include "nilfs.h" | 36 | #include "nilfs.h" |
36 | #include "btnode.h" | 37 | #include "btnode.h" |
37 | #include "page.h" | 38 | #include "page.h" |
@@ -141,7 +142,7 @@ int nilfs_init_transaction_cache(void) | |||
141 | } | 142 | } |
142 | 143 | ||
143 | /** | 144 | /** |
144 | * nilfs_detroy_transaction_cache - destroy the cache for transaction info | 145 | * nilfs_destroy_transaction_cache - destroy the cache for transaction info |
145 | * | 146 | * |
146 | * nilfs_destroy_transaction_cache() frees the slab cache for the struct | 147 | * nilfs_destroy_transaction_cache() frees the slab cache for the struct |
147 | * nilfs_transaction_info. | 148 | * nilfs_transaction_info. |
@@ -201,7 +202,7 @@ static int nilfs_prepare_segment_lock(struct nilfs_transaction_info *ti) | |||
201 | * This function allocates a nilfs_transaction_info struct to keep context | 202 | * This function allocates a nilfs_transaction_info struct to keep context |
202 | * information on it. It is initialized and hooked onto the current task in | 203 | * information on it. It is initialized and hooked onto the current task in |
203 | * the outermost call. If a pre-allocated struct is given to @ti, it is used | 204 | * the outermost call. If a pre-allocated struct is given to @ti, it is used |
204 | * instead; othewise a new struct is assigned from a slab. | 205 | * instead; otherwise a new struct is assigned from a slab. |
205 | * | 206 | * |
206 | * When @vacancy_check flag is set, this function will check the amount of | 207 | * When @vacancy_check flag is set, this function will check the amount of |
207 | * free space, and will wait for the GC to reclaim disk space if low capacity. | 208 | * free space, and will wait for the GC to reclaim disk space if low capacity. |
@@ -1510,6 +1511,12 @@ static int nilfs_segctor_collect(struct nilfs_sc_info *sci, | |||
1510 | if (mode != SC_LSEG_SR || sci->sc_stage.scnt < NILFS_ST_CPFILE) | 1511 | if (mode != SC_LSEG_SR || sci->sc_stage.scnt < NILFS_ST_CPFILE) |
1511 | break; | 1512 | break; |
1512 | 1513 | ||
1514 | nilfs_clear_logs(&sci->sc_segbufs); | ||
1515 | |||
1516 | err = nilfs_segctor_extend_segments(sci, nilfs, nadd); | ||
1517 | if (unlikely(err)) | ||
1518 | return err; | ||
1519 | |||
1513 | if (sci->sc_stage.flags & NILFS_CF_SUFREED) { | 1520 | if (sci->sc_stage.flags & NILFS_CF_SUFREED) { |
1514 | err = nilfs_sufile_cancel_freev(nilfs->ns_sufile, | 1521 | err = nilfs_sufile_cancel_freev(nilfs->ns_sufile, |
1515 | sci->sc_freesegs, | 1522 | sci->sc_freesegs, |
@@ -1517,12 +1524,6 @@ static int nilfs_segctor_collect(struct nilfs_sc_info *sci, | |||
1517 | NULL); | 1524 | NULL); |
1518 | WARN_ON(err); /* do not happen */ | 1525 | WARN_ON(err); /* do not happen */ |
1519 | } | 1526 | } |
1520 | nilfs_clear_logs(&sci->sc_segbufs); | ||
1521 | |||
1522 | err = nilfs_segctor_extend_segments(sci, nilfs, nadd); | ||
1523 | if (unlikely(err)) | ||
1524 | return err; | ||
1525 | |||
1526 | nadd = min_t(int, nadd << 1, SC_MAX_SEGDELTA); | 1527 | nadd = min_t(int, nadd << 1, SC_MAX_SEGDELTA); |
1527 | sci->sc_stage = prev_stage; | 1528 | sci->sc_stage = prev_stage; |
1528 | } | 1529 | } |
@@ -1897,8 +1898,7 @@ static void nilfs_segctor_abort_construction(struct nilfs_sc_info *sci, | |||
1897 | 1898 | ||
1898 | list_splice_tail_init(&sci->sc_write_logs, &logs); | 1899 | list_splice_tail_init(&sci->sc_write_logs, &logs); |
1899 | ret = nilfs_wait_on_logs(&logs); | 1900 | ret = nilfs_wait_on_logs(&logs); |
1900 | if (ret) | 1901 | nilfs_abort_logs(&logs, NULL, sci->sc_super_root, ret ? : err); |
1901 | nilfs_abort_logs(&logs, NULL, sci->sc_super_root, ret); | ||
1902 | 1902 | ||
1903 | list_splice_tail_init(&sci->sc_segbufs, &logs); | 1903 | list_splice_tail_init(&sci->sc_segbufs, &logs); |
1904 | nilfs_cancel_segusage(&logs, nilfs->ns_sufile); | 1904 | nilfs_cancel_segusage(&logs, nilfs->ns_sufile); |
@@ -2214,7 +2214,7 @@ static int nilfs_segctor_do_construct(struct nilfs_sc_info *sci, int mode) | |||
2214 | } | 2214 | } |
2215 | 2215 | ||
2216 | /** | 2216 | /** |
2217 | * nilfs_secgtor_start_timer - set timer of background write | 2217 | * nilfs_segctor_start_timer - set timer of background write |
2218 | * @sci: nilfs_sc_info | 2218 | * @sci: nilfs_sc_info |
2219 | * | 2219 | * |
2220 | * If the timer has already been set, it ignores the new request. | 2220 | * If the timer has already been set, it ignores the new request. |
@@ -2854,7 +2854,7 @@ static void nilfs_segctor_destroy(struct nilfs_sc_info *sci) | |||
2854 | * @sbi: nilfs_sb_info | 2854 | * @sbi: nilfs_sb_info |
2855 | * | 2855 | * |
2856 | * nilfs_attach_segment_constructor() allocates a struct nilfs_sc_info, | 2856 | * nilfs_attach_segment_constructor() allocates a struct nilfs_sc_info, |
2857 | * initilizes it, and starts the segment constructor. | 2857 | * initializes it, and starts the segment constructor. |
2858 | * | 2858 | * |
2859 | * Return Value: On success, 0 is returned. On error, one of the following | 2859 | * Return Value: On success, 0 is returned. On error, one of the following |
2860 | * negative error code is returned. | 2860 | * negative error code is returned. |