MD: Bitmap version cleanup.
[pandora-kernel.git] / drivers / md / bitmap.c
1 /*
2  * bitmap.c two-level bitmap (C) Peter T. Breuer (ptb@ot.uc3m.es) 2003
3  *
4  * bitmap_create  - sets up the bitmap structure
5  * bitmap_destroy - destroys the bitmap structure
6  *
7  * additions, Copyright (C) 2003-2004, Paul Clements, SteelEye Technology, Inc.:
8  * - added disk storage for bitmap
9  * - changes to allow various bitmap chunk sizes
10  */
11
12 /*
13  * Still to do:
14  *
15  * flush after percent set rather than just time based. (maybe both).
16  */
17
18 #include <linux/blkdev.h>
19 #include <linux/module.h>
20 #include <linux/errno.h>
21 #include <linux/slab.h>
22 #include <linux/init.h>
23 #include <linux/timer.h>
24 #include <linux/sched.h>
25 #include <linux/list.h>
26 #include <linux/file.h>
27 #include <linux/mount.h>
28 #include <linux/buffer_head.h>
29 #include <linux/seq_file.h>
30 #include "md.h"
31 #include "bitmap.h"
32
33 static inline char *bmname(struct bitmap *bitmap)
34 {
35         return bitmap->mddev ? mdname(bitmap->mddev) : "mdX";
36 }
37
38 /*
39  * check a page and, if necessary, allocate it (or hijack it if the alloc fails)
40  *
41  * 1) check to see if this page is allocated, if it's not then try to alloc
42  * 2) if the alloc fails, set the page's hijacked flag so we'll use the
43  *    page pointer directly as a counter
44  *
45  * if we find our page, we increment the page's refcount so that it stays
46  * allocated while we're using it
47  */
48 static int bitmap_checkpage(struct bitmap *bitmap,
49                             unsigned long page, int create)
50 __releases(bitmap->lock)
51 __acquires(bitmap->lock)
52 {
53         unsigned char *mappage;
54
55         if (page >= bitmap->pages) {
56                 /* This can happen if bitmap_start_sync goes beyond
57                  * End-of-device while looking for a whole page.
58                  * It is harmless.
59                  */
60                 return -EINVAL;
61         }
62
63         if (bitmap->bp[page].hijacked) /* it's hijacked, don't try to alloc */
64                 return 0;
65
66         if (bitmap->bp[page].map) /* page is already allocated, just return */
67                 return 0;
68
69         if (!create)
70                 return -ENOENT;
71
72         /* this page has not been allocated yet */
73
74         spin_unlock_irq(&bitmap->lock);
75         mappage = kzalloc(PAGE_SIZE, GFP_NOIO);
76         spin_lock_irq(&bitmap->lock);
77
78         if (mappage == NULL) {
79                 pr_debug("%s: bitmap map page allocation failed, hijacking\n",
80                          bmname(bitmap));
81                 /* failed - set the hijacked flag so that we can use the
82                  * pointer as a counter */
83                 if (!bitmap->bp[page].map)
84                         bitmap->bp[page].hijacked = 1;
85         } else if (bitmap->bp[page].map ||
86                    bitmap->bp[page].hijacked) {
87                 /* somebody beat us to getting the page */
88                 kfree(mappage);
89                 return 0;
90         } else {
91
92                 /* no page was in place and we have one, so install it */
93
94                 bitmap->bp[page].map = mappage;
95                 bitmap->missing_pages--;
96         }
97         return 0;
98 }
99
100 /* if page is completely empty, put it back on the free list, or dealloc it */
101 /* if page was hijacked, unmark the flag so it might get alloced next time */
102 /* Note: lock should be held when calling this */
103 static void bitmap_checkfree(struct bitmap *bitmap, unsigned long page)
104 {
105         char *ptr;
106
107         if (bitmap->bp[page].count) /* page is still busy */
108                 return;
109
110         /* page is no longer in use, it can be released */
111
112         if (bitmap->bp[page].hijacked) { /* page was hijacked, undo this now */
113                 bitmap->bp[page].hijacked = 0;
114                 bitmap->bp[page].map = NULL;
115         } else {
116                 /* normal case, free the page */
117                 ptr = bitmap->bp[page].map;
118                 bitmap->bp[page].map = NULL;
119                 bitmap->missing_pages++;
120                 kfree(ptr);
121         }
122 }
123
124 /*
125  * bitmap file handling - read and write the bitmap file and its superblock
126  */
127
128 /*
129  * basic page I/O operations
130  */
131
132 /* IO operations when bitmap is stored near all superblocks */
133 static struct page *read_sb_page(struct mddev *mddev, loff_t offset,
134                                  struct page *page,
135                                  unsigned long index, int size)
136 {
137         /* choose a good rdev and read the page from there */
138
139         struct md_rdev *rdev;
140         sector_t target;
141         int did_alloc = 0;
142
143         if (!page) {
144                 page = alloc_page(GFP_KERNEL);
145                 if (!page)
146                         return ERR_PTR(-ENOMEM);
147                 did_alloc = 1;
148         }
149
150         rdev_for_each(rdev, mddev) {
151                 if (! test_bit(In_sync, &rdev->flags)
152                     || test_bit(Faulty, &rdev->flags))
153                         continue;
154
155                 target = offset + index * (PAGE_SIZE/512);
156
157                 if (sync_page_io(rdev, target,
158                                  roundup(size, bdev_logical_block_size(rdev->bdev)),
159                                  page, READ, true)) {
160                         page->index = index;
161                         attach_page_buffers(page, NULL); /* so that free_buffer will
162                                                           * quietly no-op */
163                         return page;
164                 }
165         }
166         if (did_alloc)
167                 put_page(page);
168         return ERR_PTR(-EIO);
169
170 }
171
172 static struct md_rdev *next_active_rdev(struct md_rdev *rdev, struct mddev *mddev)
173 {
174         /* Iterate the disks of an mddev, using rcu to protect access to the
175          * linked list, and raising the refcount of devices we return to ensure
176          * they don't disappear while in use.
177          * As devices are only added or removed when raid_disk is < 0 and
178          * nr_pending is 0 and In_sync is clear, the entries we return will
179          * still be in the same position on the list when we re-enter
180          * list_for_each_continue_rcu.
181          */
182         struct list_head *pos;
183         rcu_read_lock();
184         if (rdev == NULL)
185                 /* start at the beginning */
186                 pos = &mddev->disks;
187         else {
188                 /* release the previous rdev and start from there. */
189                 rdev_dec_pending(rdev, mddev);
190                 pos = &rdev->same_set;
191         }
192         list_for_each_continue_rcu(pos, &mddev->disks) {
193                 rdev = list_entry(pos, struct md_rdev, same_set);
194                 if (rdev->raid_disk >= 0 &&
195                     !test_bit(Faulty, &rdev->flags)) {
196                         /* this is a usable devices */
197                         atomic_inc(&rdev->nr_pending);
198                         rcu_read_unlock();
199                         return rdev;
200                 }
201         }
202         rcu_read_unlock();
203         return NULL;
204 }
205
206 static int write_sb_page(struct bitmap *bitmap, struct page *page, int wait)
207 {
208         struct md_rdev *rdev = NULL;
209         struct block_device *bdev;
210         struct mddev *mddev = bitmap->mddev;
211
212         while ((rdev = next_active_rdev(rdev, mddev)) != NULL) {
213                 int size = PAGE_SIZE;
214                 loff_t offset = mddev->bitmap_info.offset;
215
216                 bdev = (rdev->meta_bdev) ? rdev->meta_bdev : rdev->bdev;
217
218                 if (page->index == bitmap->file_pages-1)
219                         size = roundup(bitmap->last_page_size,
220                                        bdev_logical_block_size(bdev));
221                 /* Just make sure we aren't corrupting data or
222                  * metadata
223                  */
224                 if (mddev->external) {
225                         /* Bitmap could be anywhere. */
226                         if (rdev->sb_start + offset + (page->index
227                                                        * (PAGE_SIZE/512))
228                             > rdev->data_offset
229                             &&
230                             rdev->sb_start + offset
231                             < (rdev->data_offset + mddev->dev_sectors
232                              + (PAGE_SIZE/512)))
233                                 goto bad_alignment;
234                 } else if (offset < 0) {
235                         /* DATA  BITMAP METADATA  */
236                         if (offset
237                             + (long)(page->index * (PAGE_SIZE/512))
238                             + size/512 > 0)
239                                 /* bitmap runs in to metadata */
240                                 goto bad_alignment;
241                         if (rdev->data_offset + mddev->dev_sectors
242                             > rdev->sb_start + offset)
243                                 /* data runs in to bitmap */
244                                 goto bad_alignment;
245                 } else if (rdev->sb_start < rdev->data_offset) {
246                         /* METADATA BITMAP DATA */
247                         if (rdev->sb_start
248                             + offset
249                             + page->index*(PAGE_SIZE/512) + size/512
250                             > rdev->data_offset)
251                                 /* bitmap runs in to data */
252                                 goto bad_alignment;
253                 } else {
254                         /* DATA METADATA BITMAP - no problems */
255                 }
256                 md_super_write(mddev, rdev,
257                                rdev->sb_start + offset
258                                + page->index * (PAGE_SIZE/512),
259                                size,
260                                page);
261         }
262
263         if (wait)
264                 md_super_wait(mddev);
265         return 0;
266
267  bad_alignment:
268         return -EINVAL;
269 }
270
271 static void bitmap_file_kick(struct bitmap *bitmap);
272 /*
273  * write out a page to a file
274  */
275 static void write_page(struct bitmap *bitmap, struct page *page, int wait)
276 {
277         struct buffer_head *bh;
278
279         if (bitmap->file == NULL) {
280                 switch (write_sb_page(bitmap, page, wait)) {
281                 case -EINVAL:
282                         bitmap->flags |= BITMAP_WRITE_ERROR;
283                 }
284         } else {
285
286                 bh = page_buffers(page);
287
288                 while (bh && bh->b_blocknr) {
289                         atomic_inc(&bitmap->pending_writes);
290                         set_buffer_locked(bh);
291                         set_buffer_mapped(bh);
292                         submit_bh(WRITE | REQ_SYNC, bh);
293                         bh = bh->b_this_page;
294                 }
295
296                 if (wait)
297                         wait_event(bitmap->write_wait,
298                                    atomic_read(&bitmap->pending_writes)==0);
299         }
300         if (bitmap->flags & BITMAP_WRITE_ERROR)
301                 bitmap_file_kick(bitmap);
302 }
303
304 static void end_bitmap_write(struct buffer_head *bh, int uptodate)
305 {
306         struct bitmap *bitmap = bh->b_private;
307         unsigned long flags;
308
309         if (!uptodate) {
310                 spin_lock_irqsave(&bitmap->lock, flags);
311                 bitmap->flags |= BITMAP_WRITE_ERROR;
312                 spin_unlock_irqrestore(&bitmap->lock, flags);
313         }
314         if (atomic_dec_and_test(&bitmap->pending_writes))
315                 wake_up(&bitmap->write_wait);
316 }
317
318 /* copied from buffer.c */
319 static void
320 __clear_page_buffers(struct page *page)
321 {
322         ClearPagePrivate(page);
323         set_page_private(page, 0);
324         page_cache_release(page);
325 }
326 static void free_buffers(struct page *page)
327 {
328         struct buffer_head *bh = page_buffers(page);
329
330         while (bh) {
331                 struct buffer_head *next = bh->b_this_page;
332                 free_buffer_head(bh);
333                 bh = next;
334         }
335         __clear_page_buffers(page);
336         put_page(page);
337 }
338
339 /* read a page from a file.
340  * We both read the page, and attach buffers to the page to record the
341  * address of each block (using bmap).  These addresses will be used
342  * to write the block later, completely bypassing the filesystem.
343  * This usage is similar to how swap files are handled, and allows us
344  * to write to a file with no concerns of memory allocation failing.
345  */
346 static struct page *read_page(struct file *file, unsigned long index,
347                               struct bitmap *bitmap,
348                               unsigned long count)
349 {
350         struct page *page = NULL;
351         struct inode *inode = file->f_path.dentry->d_inode;
352         struct buffer_head *bh;
353         sector_t block;
354
355         pr_debug("read bitmap file (%dB @ %llu)\n", (int)PAGE_SIZE,
356                  (unsigned long long)index << PAGE_SHIFT);
357
358         page = alloc_page(GFP_KERNEL);
359         if (!page)
360                 page = ERR_PTR(-ENOMEM);
361         if (IS_ERR(page))
362                 goto out;
363
364         bh = alloc_page_buffers(page, 1<<inode->i_blkbits, 0);
365         if (!bh) {
366                 put_page(page);
367                 page = ERR_PTR(-ENOMEM);
368                 goto out;
369         }
370         attach_page_buffers(page, bh);
371         block = index << (PAGE_SHIFT - inode->i_blkbits);
372         while (bh) {
373                 if (count == 0)
374                         bh->b_blocknr = 0;
375                 else {
376                         bh->b_blocknr = bmap(inode, block);
377                         if (bh->b_blocknr == 0) {
378                                 /* Cannot use this file! */
379                                 free_buffers(page);
380                                 page = ERR_PTR(-EINVAL);
381                                 goto out;
382                         }
383                         bh->b_bdev = inode->i_sb->s_bdev;
384                         if (count < (1<<inode->i_blkbits))
385                                 count = 0;
386                         else
387                                 count -= (1<<inode->i_blkbits);
388
389                         bh->b_end_io = end_bitmap_write;
390                         bh->b_private = bitmap;
391                         atomic_inc(&bitmap->pending_writes);
392                         set_buffer_locked(bh);
393                         set_buffer_mapped(bh);
394                         submit_bh(READ, bh);
395                 }
396                 block++;
397                 bh = bh->b_this_page;
398         }
399         page->index = index;
400
401         wait_event(bitmap->write_wait,
402                    atomic_read(&bitmap->pending_writes)==0);
403         if (bitmap->flags & BITMAP_WRITE_ERROR) {
404                 free_buffers(page);
405                 page = ERR_PTR(-EIO);
406         }
407 out:
408         if (IS_ERR(page))
409                 printk(KERN_ALERT "md: bitmap read error: (%dB @ %llu): %ld\n",
410                         (int)PAGE_SIZE,
411                         (unsigned long long)index << PAGE_SHIFT,
412                         PTR_ERR(page));
413         return page;
414 }
415
416 /*
417  * bitmap file superblock operations
418  */
419
420 /* update the event counter and sync the superblock to disk */
421 void bitmap_update_sb(struct bitmap *bitmap)
422 {
423         bitmap_super_t *sb;
424
425         if (!bitmap || !bitmap->mddev) /* no bitmap for this array */
426                 return;
427         if (bitmap->mddev->bitmap_info.external)
428                 return;
429         if (!bitmap->sb_page) /* no superblock */
430                 return;
431         sb = kmap_atomic(bitmap->sb_page);
432         sb->events = cpu_to_le64(bitmap->mddev->events);
433         if (bitmap->mddev->events < bitmap->events_cleared)
434                 /* rocking back to read-only */
435                 bitmap->events_cleared = bitmap->mddev->events;
436         sb->events_cleared = cpu_to_le64(bitmap->events_cleared);
437         sb->state = cpu_to_le32(bitmap->flags);
438         /* Just in case these have been changed via sysfs: */
439         sb->daemon_sleep = cpu_to_le32(bitmap->mddev->bitmap_info.daemon_sleep/HZ);
440         sb->write_behind = cpu_to_le32(bitmap->mddev->bitmap_info.max_write_behind);
441         kunmap_atomic(sb);
442         write_page(bitmap, bitmap->sb_page, 1);
443 }
444
445 /* print out the bitmap file superblock */
446 void bitmap_print_sb(struct bitmap *bitmap)
447 {
448         bitmap_super_t *sb;
449
450         if (!bitmap || !bitmap->sb_page)
451                 return;
452         sb = kmap_atomic(bitmap->sb_page);
453         printk(KERN_DEBUG "%s: bitmap file superblock:\n", bmname(bitmap));
454         printk(KERN_DEBUG "         magic: %08x\n", le32_to_cpu(sb->magic));
455         printk(KERN_DEBUG "       version: %d\n", le32_to_cpu(sb->version));
456         printk(KERN_DEBUG "          uuid: %08x.%08x.%08x.%08x\n",
457                                         *(__u32 *)(sb->uuid+0),
458                                         *(__u32 *)(sb->uuid+4),
459                                         *(__u32 *)(sb->uuid+8),
460                                         *(__u32 *)(sb->uuid+12));
461         printk(KERN_DEBUG "        events: %llu\n",
462                         (unsigned long long) le64_to_cpu(sb->events));
463         printk(KERN_DEBUG "events cleared: %llu\n",
464                         (unsigned long long) le64_to_cpu(sb->events_cleared));
465         printk(KERN_DEBUG "         state: %08x\n", le32_to_cpu(sb->state));
466         printk(KERN_DEBUG "     chunksize: %d B\n", le32_to_cpu(sb->chunksize));
467         printk(KERN_DEBUG "  daemon sleep: %ds\n", le32_to_cpu(sb->daemon_sleep));
468         printk(KERN_DEBUG "     sync size: %llu KB\n",
469                         (unsigned long long)le64_to_cpu(sb->sync_size)/2);
470         printk(KERN_DEBUG "max write behind: %d\n", le32_to_cpu(sb->write_behind));
471         kunmap_atomic(sb);
472 }
473
474 /*
475  * bitmap_new_disk_sb
476  * @bitmap
477  *
478  * This function is somewhat the reverse of bitmap_read_sb.  bitmap_read_sb
479  * reads and verifies the on-disk bitmap superblock and populates bitmap_info.
480  * This function verifies 'bitmap_info' and populates the on-disk bitmap
481  * structure, which is to be written to disk.
482  *
483  * Returns: 0 on success, -Exxx on error
484  */
485 static int bitmap_new_disk_sb(struct bitmap *bitmap)
486 {
487         bitmap_super_t *sb;
488         unsigned long chunksize, daemon_sleep, write_behind;
489         int err = -EINVAL;
490
491         bitmap->sb_page = alloc_page(GFP_KERNEL);
492         if (IS_ERR(bitmap->sb_page)) {
493                 err = PTR_ERR(bitmap->sb_page);
494                 bitmap->sb_page = NULL;
495                 return err;
496         }
497         bitmap->sb_page->index = 0;
498
499         sb = kmap_atomic(bitmap->sb_page);
500
501         sb->magic = cpu_to_le32(BITMAP_MAGIC);
502         sb->version = cpu_to_le32(BITMAP_MAJOR_HI);
503
504         chunksize = bitmap->mddev->bitmap_info.chunksize;
505         BUG_ON(!chunksize);
506         if (!is_power_of_2(chunksize)) {
507                 kunmap_atomic(sb);
508                 printk(KERN_ERR "bitmap chunksize not a power of 2\n");
509                 return -EINVAL;
510         }
511         sb->chunksize = cpu_to_le32(chunksize);
512
513         daemon_sleep = bitmap->mddev->bitmap_info.daemon_sleep;
514         if (!daemon_sleep ||
515             (daemon_sleep < 1) || (daemon_sleep > MAX_SCHEDULE_TIMEOUT)) {
516                 printk(KERN_INFO "Choosing daemon_sleep default (5 sec)\n");
517                 daemon_sleep = 5 * HZ;
518         }
519         sb->daemon_sleep = cpu_to_le32(daemon_sleep);
520         bitmap->mddev->bitmap_info.daemon_sleep = daemon_sleep;
521
522         /*
523          * FIXME: write_behind for RAID1.  If not specified, what
524          * is a good choice?  We choose COUNTER_MAX / 2 arbitrarily.
525          */
526         write_behind = bitmap->mddev->bitmap_info.max_write_behind;
527         if (write_behind > COUNTER_MAX)
528                 write_behind = COUNTER_MAX / 2;
529         sb->write_behind = cpu_to_le32(write_behind);
530         bitmap->mddev->bitmap_info.max_write_behind = write_behind;
531
532         /* keep the array size field of the bitmap superblock up to date */
533         sb->sync_size = cpu_to_le64(bitmap->mddev->resync_max_sectors);
534
535         memcpy(sb->uuid, bitmap->mddev->uuid, 16);
536
537         bitmap->flags |= BITMAP_STALE;
538         sb->state |= cpu_to_le32(BITMAP_STALE);
539         bitmap->events_cleared = bitmap->mddev->events;
540         sb->events_cleared = cpu_to_le64(bitmap->mddev->events);
541
542         kunmap_atomic(sb);
543
544         return 0;
545 }
546
547 /* read the superblock from the bitmap file and initialize some bitmap fields */
548 static int bitmap_read_sb(struct bitmap *bitmap)
549 {
550         char *reason = NULL;
551         bitmap_super_t *sb;
552         unsigned long chunksize, daemon_sleep, write_behind;
553         unsigned long long events;
554         int err = -EINVAL;
555
556         /* page 0 is the superblock, read it... */
557         if (bitmap->file) {
558                 loff_t isize = i_size_read(bitmap->file->f_mapping->host);
559                 int bytes = isize > PAGE_SIZE ? PAGE_SIZE : isize;
560
561                 bitmap->sb_page = read_page(bitmap->file, 0, bitmap, bytes);
562         } else {
563                 bitmap->sb_page = read_sb_page(bitmap->mddev,
564                                                bitmap->mddev->bitmap_info.offset,
565                                                NULL,
566                                                0, sizeof(bitmap_super_t));
567         }
568         if (IS_ERR(bitmap->sb_page)) {
569                 err = PTR_ERR(bitmap->sb_page);
570                 bitmap->sb_page = NULL;
571                 return err;
572         }
573
574         sb = kmap_atomic(bitmap->sb_page);
575
576         chunksize = le32_to_cpu(sb->chunksize);
577         daemon_sleep = le32_to_cpu(sb->daemon_sleep) * HZ;
578         write_behind = le32_to_cpu(sb->write_behind);
579
580         /* verify that the bitmap-specific fields are valid */
581         if (sb->magic != cpu_to_le32(BITMAP_MAGIC))
582                 reason = "bad magic";
583         else if (le32_to_cpu(sb->version) < BITMAP_MAJOR_LO ||
584                  le32_to_cpu(sb->version) > BITMAP_MAJOR_HI)
585                 reason = "unrecognized superblock version";
586         else if (chunksize < 512)
587                 reason = "bitmap chunksize too small";
588         else if (!is_power_of_2(chunksize))
589                 reason = "bitmap chunksize not a power of 2";
590         else if (daemon_sleep < 1 || daemon_sleep > MAX_SCHEDULE_TIMEOUT)
591                 reason = "daemon sleep period out of range";
592         else if (write_behind > COUNTER_MAX)
593                 reason = "write-behind limit out of range (0 - 16383)";
594         if (reason) {
595                 printk(KERN_INFO "%s: invalid bitmap file superblock: %s\n",
596                         bmname(bitmap), reason);
597                 goto out;
598         }
599
600         /* keep the array size field of the bitmap superblock up to date */
601         sb->sync_size = cpu_to_le64(bitmap->mddev->resync_max_sectors);
602
603         if (bitmap->mddev->persistent) {
604                 /*
605                  * We have a persistent array superblock, so compare the
606                  * bitmap's UUID and event counter to the mddev's
607                  */
608                 if (memcmp(sb->uuid, bitmap->mddev->uuid, 16)) {
609                         printk(KERN_INFO
610                                "%s: bitmap superblock UUID mismatch\n",
611                                bmname(bitmap));
612                         goto out;
613                 }
614                 events = le64_to_cpu(sb->events);
615                 if (events < bitmap->mddev->events) {
616                         printk(KERN_INFO
617                                "%s: bitmap file is out of date (%llu < %llu) "
618                                "-- forcing full recovery\n",
619                                bmname(bitmap), events,
620                                (unsigned long long) bitmap->mddev->events);
621                         sb->state |= cpu_to_le32(BITMAP_STALE);
622                 }
623         }
624
625         /* assign fields using values from superblock */
626         bitmap->mddev->bitmap_info.chunksize = chunksize;
627         bitmap->mddev->bitmap_info.daemon_sleep = daemon_sleep;
628         bitmap->mddev->bitmap_info.max_write_behind = write_behind;
629         bitmap->flags |= le32_to_cpu(sb->state);
630         if (le32_to_cpu(sb->version) == BITMAP_MAJOR_HOSTENDIAN)
631                 bitmap->flags |= BITMAP_HOSTENDIAN;
632         bitmap->events_cleared = le64_to_cpu(sb->events_cleared);
633         if (bitmap->flags & BITMAP_STALE)
634                 bitmap->events_cleared = bitmap->mddev->events;
635         err = 0;
636 out:
637         kunmap_atomic(sb);
638         if (err)
639                 bitmap_print_sb(bitmap);
640         return err;
641 }
642
643 enum bitmap_mask_op {
644         MASK_SET,
645         MASK_UNSET
646 };
647
648 /* record the state of the bitmap in the superblock.  Return the old value */
649 static int bitmap_mask_state(struct bitmap *bitmap, enum bitmap_state bits,
650                              enum bitmap_mask_op op)
651 {
652         bitmap_super_t *sb;
653         int old;
654
655         if (!bitmap->sb_page) /* can't set the state */
656                 return 0;
657         sb = kmap_atomic(bitmap->sb_page);
658         old = le32_to_cpu(sb->state) & bits;
659         switch (op) {
660         case MASK_SET:
661                 sb->state |= cpu_to_le32(bits);
662                 bitmap->flags |= bits;
663                 break;
664         case MASK_UNSET:
665                 sb->state &= cpu_to_le32(~bits);
666                 bitmap->flags &= ~bits;
667                 break;
668         default:
669                 BUG();
670         }
671         kunmap_atomic(sb);
672         return old;
673 }
674
675 /*
676  * general bitmap file operations
677  */
678
679 /*
680  * on-disk bitmap:
681  *
682  * Use one bit per "chunk" (block set). We do the disk I/O on the bitmap
683  * file a page at a time. There's a superblock at the start of the file.
684  */
685 /* calculate the index of the page that contains this bit */
686 static inline unsigned long file_page_index(struct bitmap *bitmap, unsigned long chunk)
687 {
688         if (!bitmap->mddev->bitmap_info.external)
689                 chunk += sizeof(bitmap_super_t) << 3;
690         return chunk >> PAGE_BIT_SHIFT;
691 }
692
693 /* calculate the (bit) offset of this bit within a page */
694 static inline unsigned long file_page_offset(struct bitmap *bitmap, unsigned long chunk)
695 {
696         if (!bitmap->mddev->bitmap_info.external)
697                 chunk += sizeof(bitmap_super_t) << 3;
698         return chunk & (PAGE_BITS - 1);
699 }
700
701 /*
702  * return a pointer to the page in the filemap that contains the given bit
703  *
704  * this lookup is complicated by the fact that the bitmap sb might be exactly
705  * 1 page (e.g., x86) or less than 1 page -- so the bitmap might start on page
706  * 0 or page 1
707  */
708 static inline struct page *filemap_get_page(struct bitmap *bitmap,
709                                             unsigned long chunk)
710 {
711         if (file_page_index(bitmap, chunk) >= bitmap->file_pages)
712                 return NULL;
713         return bitmap->filemap[file_page_index(bitmap, chunk)
714                                - file_page_index(bitmap, 0)];
715 }
716
717 static void bitmap_file_unmap(struct bitmap *bitmap)
718 {
719         struct page **map, *sb_page;
720         unsigned long *attr;
721         int pages;
722         unsigned long flags;
723
724         spin_lock_irqsave(&bitmap->lock, flags);
725         map = bitmap->filemap;
726         bitmap->filemap = NULL;
727         attr = bitmap->filemap_attr;
728         bitmap->filemap_attr = NULL;
729         pages = bitmap->file_pages;
730         bitmap->file_pages = 0;
731         sb_page = bitmap->sb_page;
732         bitmap->sb_page = NULL;
733         spin_unlock_irqrestore(&bitmap->lock, flags);
734
735         while (pages--)
736                 if (map[pages] != sb_page) /* 0 is sb_page, release it below */
737                         free_buffers(map[pages]);
738         kfree(map);
739         kfree(attr);
740
741         if (sb_page)
742                 free_buffers(sb_page);
743 }
744
745 static void bitmap_file_put(struct bitmap *bitmap)
746 {
747         struct file *file;
748         unsigned long flags;
749
750         spin_lock_irqsave(&bitmap->lock, flags);
751         file = bitmap->file;
752         bitmap->file = NULL;
753         spin_unlock_irqrestore(&bitmap->lock, flags);
754
755         if (file)
756                 wait_event(bitmap->write_wait,
757                            atomic_read(&bitmap->pending_writes)==0);
758         bitmap_file_unmap(bitmap);
759
760         if (file) {
761                 struct inode *inode = file->f_path.dentry->d_inode;
762                 invalidate_mapping_pages(inode->i_mapping, 0, -1);
763                 fput(file);
764         }
765 }
766
767 /*
768  * bitmap_file_kick - if an error occurs while manipulating the bitmap file
769  * then it is no longer reliable, so we stop using it and we mark the file
770  * as failed in the superblock
771  */
772 static void bitmap_file_kick(struct bitmap *bitmap)
773 {
774         char *path, *ptr = NULL;
775
776         if (bitmap_mask_state(bitmap, BITMAP_STALE, MASK_SET) == 0) {
777                 bitmap_update_sb(bitmap);
778
779                 if (bitmap->file) {
780                         path = kmalloc(PAGE_SIZE, GFP_KERNEL);
781                         if (path)
782                                 ptr = d_path(&bitmap->file->f_path, path,
783                                              PAGE_SIZE);
784
785                         printk(KERN_ALERT
786                               "%s: kicking failed bitmap file %s from array!\n",
787                               bmname(bitmap), IS_ERR(ptr) ? "" : ptr);
788
789                         kfree(path);
790                 } else
791                         printk(KERN_ALERT
792                                "%s: disabling internal bitmap due to errors\n",
793                                bmname(bitmap));
794         }
795
796         bitmap_file_put(bitmap);
797
798         return;
799 }
800
801 enum bitmap_page_attr {
802         BITMAP_PAGE_DIRTY = 0,     /* there are set bits that need to be synced */
803         BITMAP_PAGE_PENDING = 1,   /* there are bits that are being cleaned.
804                                     * i.e. counter is 1 or 2. */
805         BITMAP_PAGE_NEEDWRITE = 2, /* there are cleared bits that need to be synced */
806 };
807
808 static inline void set_page_attr(struct bitmap *bitmap, struct page *page,
809                                 enum bitmap_page_attr attr)
810 {
811         __set_bit((page->index<<2) + attr, bitmap->filemap_attr);
812 }
813
814 static inline void clear_page_attr(struct bitmap *bitmap, struct page *page,
815                                 enum bitmap_page_attr attr)
816 {
817         __clear_bit((page->index<<2) + attr, bitmap->filemap_attr);
818 }
819
820 static inline unsigned long test_page_attr(struct bitmap *bitmap, struct page *page,
821                                            enum bitmap_page_attr attr)
822 {
823         return test_bit((page->index<<2) + attr, bitmap->filemap_attr);
824 }
825
826 /*
827  * bitmap_file_set_bit -- called before performing a write to the md device
828  * to set (and eventually sync) a particular bit in the bitmap file
829  *
830  * we set the bit immediately, then we record the page number so that
831  * when an unplug occurs, we can flush the dirty pages out to disk
832  */
833 static void bitmap_file_set_bit(struct bitmap *bitmap, sector_t block)
834 {
835         unsigned long bit;
836         struct page *page;
837         void *kaddr;
838         unsigned long chunk = block >> bitmap->chunkshift;
839
840         if (!bitmap->filemap)
841                 return;
842
843         page = filemap_get_page(bitmap, chunk);
844         if (!page)
845                 return;
846         bit = file_page_offset(bitmap, chunk);
847
848         /* set the bit */
849         kaddr = kmap_atomic(page);
850         if (bitmap->flags & BITMAP_HOSTENDIAN)
851                 set_bit(bit, kaddr);
852         else
853                 __set_bit_le(bit, kaddr);
854         kunmap_atomic(kaddr);
855         pr_debug("set file bit %lu page %lu\n", bit, page->index);
856         /* record page number so it gets flushed to disk when unplug occurs */
857         set_page_attr(bitmap, page, BITMAP_PAGE_DIRTY);
858 }
859
860 /* this gets called when the md device is ready to unplug its underlying
861  * (slave) device queues -- before we let any writes go down, we need to
862  * sync the dirty pages of the bitmap file to disk */
863 void bitmap_unplug(struct bitmap *bitmap)
864 {
865         unsigned long i, flags;
866         int dirty, need_write;
867         struct page *page;
868         int wait = 0;
869
870         if (!bitmap)
871                 return;
872
873         /* look at each page to see if there are any set bits that need to be
874          * flushed out to disk */
875         for (i = 0; i < bitmap->file_pages; i++) {
876                 spin_lock_irqsave(&bitmap->lock, flags);
877                 if (!bitmap->filemap) {
878                         spin_unlock_irqrestore(&bitmap->lock, flags);
879                         return;
880                 }
881                 page = bitmap->filemap[i];
882                 dirty = test_page_attr(bitmap, page, BITMAP_PAGE_DIRTY);
883                 need_write = test_page_attr(bitmap, page, BITMAP_PAGE_NEEDWRITE);
884                 clear_page_attr(bitmap, page, BITMAP_PAGE_DIRTY);
885                 clear_page_attr(bitmap, page, BITMAP_PAGE_NEEDWRITE);
886                 if (dirty)
887                         wait = 1;
888                 spin_unlock_irqrestore(&bitmap->lock, flags);
889
890                 if (dirty || need_write)
891                         write_page(bitmap, page, 0);
892         }
893         if (wait) { /* if any writes were performed, we need to wait on them */
894                 if (bitmap->file)
895                         wait_event(bitmap->write_wait,
896                                    atomic_read(&bitmap->pending_writes)==0);
897                 else
898                         md_super_wait(bitmap->mddev);
899         }
900         if (bitmap->flags & BITMAP_WRITE_ERROR)
901                 bitmap_file_kick(bitmap);
902 }
903 EXPORT_SYMBOL(bitmap_unplug);
904
905 static void bitmap_set_memory_bits(struct bitmap *bitmap, sector_t offset, int needed);
906 /* * bitmap_init_from_disk -- called at bitmap_create time to initialize
907  * the in-memory bitmap from the on-disk bitmap -- also, sets up the
908  * memory mapping of the bitmap file
909  * Special cases:
910  *   if there's no bitmap file, or if the bitmap file had been
911  *   previously kicked from the array, we mark all the bits as
912  *   1's in order to cause a full resync.
913  *
914  * We ignore all bits for sectors that end earlier than 'start'.
915  * This is used when reading an out-of-date bitmap...
916  */
917 static int bitmap_init_from_disk(struct bitmap *bitmap, sector_t start)
918 {
919         unsigned long i, chunks, index, oldindex, bit;
920         struct page *page = NULL, *oldpage = NULL;
921         unsigned long num_pages, bit_cnt = 0;
922         struct file *file;
923         unsigned long bytes, offset;
924         int outofdate;
925         int ret = -ENOSPC;
926         void *paddr;
927
928         chunks = bitmap->chunks;
929         file = bitmap->file;
930
931         BUG_ON(!file && !bitmap->mddev->bitmap_info.offset);
932
933         outofdate = bitmap->flags & BITMAP_STALE;
934         if (outofdate)
935                 printk(KERN_INFO "%s: bitmap file is out of date, doing full "
936                         "recovery\n", bmname(bitmap));
937
938         bytes = DIV_ROUND_UP(bitmap->chunks, 8);
939         if (!bitmap->mddev->bitmap_info.external)
940                 bytes += sizeof(bitmap_super_t);
941
942         num_pages = DIV_ROUND_UP(bytes, PAGE_SIZE);
943
944         if (file && i_size_read(file->f_mapping->host) < bytes) {
945                 printk(KERN_INFO "%s: bitmap file too short %lu < %lu\n",
946                         bmname(bitmap),
947                         (unsigned long) i_size_read(file->f_mapping->host),
948                         bytes);
949                 goto err;
950         }
951
952         ret = -ENOMEM;
953
954         bitmap->filemap = kmalloc(sizeof(struct page *) * num_pages, GFP_KERNEL);
955         if (!bitmap->filemap)
956                 goto err;
957
958         /* We need 4 bits per page, rounded up to a multiple of sizeof(unsigned long) */
959         bitmap->filemap_attr = kzalloc(
960                 roundup(DIV_ROUND_UP(num_pages*4, 8), sizeof(unsigned long)),
961                 GFP_KERNEL);
962         if (!bitmap->filemap_attr)
963                 goto err;
964
965         oldindex = ~0L;
966
967         for (i = 0; i < chunks; i++) {
968                 int b;
969                 index = file_page_index(bitmap, i);
970                 bit = file_page_offset(bitmap, i);
971                 if (index != oldindex) { /* this is a new page, read it in */
972                         int count;
973                         /* unmap the old page, we're done with it */
974                         if (index == num_pages-1)
975                                 count = bytes - index * PAGE_SIZE;
976                         else
977                                 count = PAGE_SIZE;
978                         if (index == 0 && bitmap->sb_page) {
979                                 /*
980                                  * if we're here then the superblock page
981                                  * contains some bits (PAGE_SIZE != sizeof sb)
982                                  * we've already read it in, so just use it
983                                  */
984                                 page = bitmap->sb_page;
985                                 offset = sizeof(bitmap_super_t);
986                                 if (!file)
987                                         page = read_sb_page(
988                                                 bitmap->mddev,
989                                                 bitmap->mddev->bitmap_info.offset,
990                                                 page,
991                                                 index, count);
992                         } else if (file) {
993                                 page = read_page(file, index, bitmap, count);
994                                 offset = 0;
995                         } else {
996                                 page = read_sb_page(bitmap->mddev,
997                                                     bitmap->mddev->bitmap_info.offset,
998                                                     NULL,
999                                                     index, count);
1000                                 offset = 0;
1001                         }
1002                         if (IS_ERR(page)) { /* read error */
1003                                 ret = PTR_ERR(page);
1004                                 goto err;
1005                         }
1006
1007                         oldindex = index;
1008                         oldpage = page;
1009
1010                         bitmap->filemap[bitmap->file_pages++] = page;
1011                         bitmap->last_page_size = count;
1012
1013                         if (outofdate) {
1014                                 /*
1015                                  * if bitmap is out of date, dirty the
1016                                  * whole page and write it out
1017                                  */
1018                                 paddr = kmap_atomic(page);
1019                                 memset(paddr + offset, 0xff,
1020                                        PAGE_SIZE - offset);
1021                                 kunmap_atomic(paddr);
1022                                 write_page(bitmap, page, 1);
1023
1024                                 ret = -EIO;
1025                                 if (bitmap->flags & BITMAP_WRITE_ERROR)
1026                                         goto err;
1027                         }
1028                 }
1029                 paddr = kmap_atomic(page);
1030                 if (bitmap->flags & BITMAP_HOSTENDIAN)
1031                         b = test_bit(bit, paddr);
1032                 else
1033                         b = test_bit_le(bit, paddr);
1034                 kunmap_atomic(paddr);
1035                 if (b) {
1036                         /* if the disk bit is set, set the memory bit */
1037                         int needed = ((sector_t)(i+1) << bitmap->chunkshift
1038                                       >= start);
1039                         bitmap_set_memory_bits(bitmap,
1040                                                (sector_t)i << bitmap->chunkshift,
1041                                                needed);
1042                         bit_cnt++;
1043                 }
1044         }
1045
1046         /* everything went OK */
1047         ret = 0;
1048         bitmap_mask_state(bitmap, BITMAP_STALE, MASK_UNSET);
1049
1050         if (bit_cnt) { /* Kick recovery if any bits were set */
1051                 set_bit(MD_RECOVERY_NEEDED, &bitmap->mddev->recovery);
1052                 md_wakeup_thread(bitmap->mddev->thread);
1053         }
1054
1055         printk(KERN_INFO "%s: bitmap initialized from disk: "
1056                "read %lu/%lu pages, set %lu of %lu bits\n",
1057                bmname(bitmap), bitmap->file_pages, num_pages, bit_cnt, chunks);
1058
1059         return 0;
1060
1061  err:
1062         printk(KERN_INFO "%s: bitmap initialisation failed: %d\n",
1063                bmname(bitmap), ret);
1064         return ret;
1065 }
1066
1067 void bitmap_write_all(struct bitmap *bitmap)
1068 {
1069         /* We don't actually write all bitmap blocks here,
1070          * just flag them as needing to be written
1071          */
1072         int i;
1073
1074         spin_lock_irq(&bitmap->lock);
1075         for (i = 0; i < bitmap->file_pages; i++)
1076                 set_page_attr(bitmap, bitmap->filemap[i],
1077                               BITMAP_PAGE_NEEDWRITE);
1078         bitmap->allclean = 0;
1079         spin_unlock_irq(&bitmap->lock);
1080 }
1081
1082 static void bitmap_count_page(struct bitmap *bitmap, sector_t offset, int inc)
1083 {
1084         sector_t chunk = offset >> bitmap->chunkshift;
1085         unsigned long page = chunk >> PAGE_COUNTER_SHIFT;
1086         bitmap->bp[page].count += inc;
1087         bitmap_checkfree(bitmap, page);
1088 }
1089 static bitmap_counter_t *bitmap_get_counter(struct bitmap *bitmap,
1090                                             sector_t offset, sector_t *blocks,
1091                                             int create);
1092
1093 /*
1094  * bitmap daemon -- periodically wakes up to clean bits and flush pages
1095  *                      out to disk
1096  */
1097
1098 void bitmap_daemon_work(struct mddev *mddev)
1099 {
1100         struct bitmap *bitmap;
1101         unsigned long j;
1102         unsigned long flags;
1103         struct page *page = NULL, *lastpage = NULL;
1104         sector_t blocks;
1105         void *paddr;
1106
1107         /* Use a mutex to guard daemon_work against
1108          * bitmap_destroy.
1109          */
1110         mutex_lock(&mddev->bitmap_info.mutex);
1111         bitmap = mddev->bitmap;
1112         if (bitmap == NULL) {
1113                 mutex_unlock(&mddev->bitmap_info.mutex);
1114                 return;
1115         }
1116         if (time_before(jiffies, bitmap->daemon_lastrun
1117                         + mddev->bitmap_info.daemon_sleep))
1118                 goto done;
1119
1120         bitmap->daemon_lastrun = jiffies;
1121         if (bitmap->allclean) {
1122                 mddev->thread->timeout = MAX_SCHEDULE_TIMEOUT;
1123                 goto done;
1124         }
1125         bitmap->allclean = 1;
1126
1127         spin_lock_irqsave(&bitmap->lock, flags);
1128         for (j = 0; j < bitmap->chunks; j++) {
1129                 bitmap_counter_t *bmc;
1130                 if (!bitmap->filemap)
1131                         /* error or shutdown */
1132                         break;
1133
1134                 page = filemap_get_page(bitmap, j);
1135
1136                 if (page != lastpage) {
1137                         /* skip this page unless it's marked as needing cleaning */
1138                         if (!test_page_attr(bitmap, page, BITMAP_PAGE_PENDING)) {
1139                                 int need_write = test_page_attr(bitmap, page,
1140                                                                 BITMAP_PAGE_NEEDWRITE);
1141                                 if (need_write)
1142                                         clear_page_attr(bitmap, page, BITMAP_PAGE_NEEDWRITE);
1143
1144                                 spin_unlock_irqrestore(&bitmap->lock, flags);
1145                                 if (need_write)
1146                                         write_page(bitmap, page, 0);
1147                                 spin_lock_irqsave(&bitmap->lock, flags);
1148                                 j |= (PAGE_BITS - 1);
1149                                 continue;
1150                         }
1151
1152                         /* grab the new page, sync and release the old */
1153                         if (lastpage != NULL) {
1154                                 if (test_page_attr(bitmap, lastpage,
1155                                                    BITMAP_PAGE_NEEDWRITE)) {
1156                                         clear_page_attr(bitmap, lastpage,
1157                                                         BITMAP_PAGE_NEEDWRITE);
1158                                         spin_unlock_irqrestore(&bitmap->lock, flags);
1159                                         write_page(bitmap, lastpage, 0);
1160                                 } else {
1161                                         set_page_attr(bitmap, lastpage,
1162                                                       BITMAP_PAGE_NEEDWRITE);
1163                                         bitmap->allclean = 0;
1164                                         spin_unlock_irqrestore(&bitmap->lock, flags);
1165                                 }
1166                         } else
1167                                 spin_unlock_irqrestore(&bitmap->lock, flags);
1168                         lastpage = page;
1169
1170                         /* We are possibly going to clear some bits, so make
1171                          * sure that events_cleared is up-to-date.
1172                          */
1173                         if (bitmap->need_sync &&
1174                             mddev->bitmap_info.external == 0) {
1175                                 bitmap_super_t *sb;
1176                                 bitmap->need_sync = 0;
1177                                 sb = kmap_atomic(bitmap->sb_page);
1178                                 sb->events_cleared =
1179                                         cpu_to_le64(bitmap->events_cleared);
1180                                 kunmap_atomic(sb);
1181                                 write_page(bitmap, bitmap->sb_page, 1);
1182                         }
1183                         spin_lock_irqsave(&bitmap->lock, flags);
1184                         if (!bitmap->need_sync)
1185                                 clear_page_attr(bitmap, page, BITMAP_PAGE_PENDING);
1186                         else
1187                                 bitmap->allclean = 0;
1188                 }
1189                 bmc = bitmap_get_counter(bitmap,
1190                                          (sector_t)j << bitmap->chunkshift,
1191                                          &blocks, 0);
1192                 if (!bmc)
1193                         j |= PAGE_COUNTER_MASK;
1194                 else if (*bmc) {
1195                         if (*bmc == 1 && !bitmap->need_sync) {
1196                                 /* we can clear the bit */
1197                                 *bmc = 0;
1198                                 bitmap_count_page(bitmap,
1199                                                   (sector_t)j << bitmap->chunkshift,
1200                                                   -1);
1201
1202                                 /* clear the bit */
1203                                 paddr = kmap_atomic(page);
1204                                 if (bitmap->flags & BITMAP_HOSTENDIAN)
1205                                         clear_bit(file_page_offset(bitmap, j),
1206                                                   paddr);
1207                                 else
1208                                         __clear_bit_le(
1209                                                 file_page_offset(bitmap,
1210                                                                  j),
1211                                                 paddr);
1212                                 kunmap_atomic(paddr);
1213                         } else if (*bmc <= 2) {
1214                                 *bmc = 1; /* maybe clear the bit next time */
1215                                 set_page_attr(bitmap, page, BITMAP_PAGE_PENDING);
1216                                 bitmap->allclean = 0;
1217                         }
1218                 }
1219         }
1220         spin_unlock_irqrestore(&bitmap->lock, flags);
1221
1222         /* now sync the final page */
1223         if (lastpage != NULL) {
1224                 spin_lock_irqsave(&bitmap->lock, flags);
1225                 if (test_page_attr(bitmap, lastpage, BITMAP_PAGE_NEEDWRITE)) {
1226                         clear_page_attr(bitmap, lastpage, BITMAP_PAGE_NEEDWRITE);
1227                         spin_unlock_irqrestore(&bitmap->lock, flags);
1228                         write_page(bitmap, lastpage, 0);
1229                 } else {
1230                         set_page_attr(bitmap, lastpage, BITMAP_PAGE_NEEDWRITE);
1231                         bitmap->allclean = 0;
1232                         spin_unlock_irqrestore(&bitmap->lock, flags);
1233                 }
1234         }
1235
1236  done:
1237         if (bitmap->allclean == 0)
1238                 mddev->thread->timeout =
1239                         mddev->bitmap_info.daemon_sleep;
1240         mutex_unlock(&mddev->bitmap_info.mutex);
1241 }
1242
1243 static bitmap_counter_t *bitmap_get_counter(struct bitmap *bitmap,
1244                                             sector_t offset, sector_t *blocks,
1245                                             int create)
1246 __releases(bitmap->lock)
1247 __acquires(bitmap->lock)
1248 {
1249         /* If 'create', we might release the lock and reclaim it.
1250          * The lock must have been taken with interrupts enabled.
1251          * If !create, we don't release the lock.
1252          */
1253         sector_t chunk = offset >> bitmap->chunkshift;
1254         unsigned long page = chunk >> PAGE_COUNTER_SHIFT;
1255         unsigned long pageoff = (chunk & PAGE_COUNTER_MASK) << COUNTER_BYTE_SHIFT;
1256         sector_t csize;
1257         int err;
1258
1259         err = bitmap_checkpage(bitmap, page, create);
1260
1261         if (bitmap->bp[page].hijacked ||
1262             bitmap->bp[page].map == NULL)
1263                 csize = ((sector_t)1) << (bitmap->chunkshift +
1264                                           PAGE_COUNTER_SHIFT - 1);
1265         else
1266                 csize = ((sector_t)1) << bitmap->chunkshift;
1267         *blocks = csize - (offset & (csize - 1));
1268
1269         if (err < 0)
1270                 return NULL;
1271
1272         /* now locked ... */
1273
1274         if (bitmap->bp[page].hijacked) { /* hijacked pointer */
1275                 /* should we use the first or second counter field
1276                  * of the hijacked pointer? */
1277                 int hi = (pageoff > PAGE_COUNTER_MASK);
1278                 return  &((bitmap_counter_t *)
1279                           &bitmap->bp[page].map)[hi];
1280         } else /* page is allocated */
1281                 return (bitmap_counter_t *)
1282                         &(bitmap->bp[page].map[pageoff]);
1283 }
1284
1285 int bitmap_startwrite(struct bitmap *bitmap, sector_t offset, unsigned long sectors, int behind)
1286 {
1287         if (!bitmap)
1288                 return 0;
1289
1290         if (behind) {
1291                 int bw;
1292                 atomic_inc(&bitmap->behind_writes);
1293                 bw = atomic_read(&bitmap->behind_writes);
1294                 if (bw > bitmap->behind_writes_used)
1295                         bitmap->behind_writes_used = bw;
1296
1297                 pr_debug("inc write-behind count %d/%lu\n",
1298                          bw, bitmap->mddev->bitmap_info.max_write_behind);
1299         }
1300
1301         while (sectors) {
1302                 sector_t blocks;
1303                 bitmap_counter_t *bmc;
1304
1305                 spin_lock_irq(&bitmap->lock);
1306                 bmc = bitmap_get_counter(bitmap, offset, &blocks, 1);
1307                 if (!bmc) {
1308                         spin_unlock_irq(&bitmap->lock);
1309                         return 0;
1310                 }
1311
1312                 if (unlikely(COUNTER(*bmc) == COUNTER_MAX)) {
1313                         DEFINE_WAIT(__wait);
1314                         /* note that it is safe to do the prepare_to_wait
1315                          * after the test as long as we do it before dropping
1316                          * the spinlock.
1317                          */
1318                         prepare_to_wait(&bitmap->overflow_wait, &__wait,
1319                                         TASK_UNINTERRUPTIBLE);
1320                         spin_unlock_irq(&bitmap->lock);
1321                         io_schedule();
1322                         finish_wait(&bitmap->overflow_wait, &__wait);
1323                         continue;
1324                 }
1325
1326                 switch (*bmc) {
1327                 case 0:
1328                         bitmap_file_set_bit(bitmap, offset);
1329                         bitmap_count_page(bitmap, offset, 1);
1330                         /* fall through */
1331                 case 1:
1332                         *bmc = 2;
1333                 }
1334
1335                 (*bmc)++;
1336
1337                 spin_unlock_irq(&bitmap->lock);
1338
1339                 offset += blocks;
1340                 if (sectors > blocks)
1341                         sectors -= blocks;
1342                 else
1343                         sectors = 0;
1344         }
1345         return 0;
1346 }
1347 EXPORT_SYMBOL(bitmap_startwrite);
1348
1349 void bitmap_endwrite(struct bitmap *bitmap, sector_t offset, unsigned long sectors,
1350                      int success, int behind)
1351 {
1352         if (!bitmap)
1353                 return;
1354         if (behind) {
1355                 if (atomic_dec_and_test(&bitmap->behind_writes))
1356                         wake_up(&bitmap->behind_wait);
1357                 pr_debug("dec write-behind count %d/%lu\n",
1358                          atomic_read(&bitmap->behind_writes),
1359                          bitmap->mddev->bitmap_info.max_write_behind);
1360         }
1361
1362         while (sectors) {
1363                 sector_t blocks;
1364                 unsigned long flags;
1365                 bitmap_counter_t *bmc;
1366
1367                 spin_lock_irqsave(&bitmap->lock, flags);
1368                 bmc = bitmap_get_counter(bitmap, offset, &blocks, 0);
1369                 if (!bmc) {
1370                         spin_unlock_irqrestore(&bitmap->lock, flags);
1371                         return;
1372                 }
1373
1374                 if (success && !bitmap->mddev->degraded &&
1375                     bitmap->events_cleared < bitmap->mddev->events) {
1376                         bitmap->events_cleared = bitmap->mddev->events;
1377                         bitmap->need_sync = 1;
1378                         sysfs_notify_dirent_safe(bitmap->sysfs_can_clear);
1379                 }
1380
1381                 if (!success && !NEEDED(*bmc))
1382                         *bmc |= NEEDED_MASK;
1383
1384                 if (COUNTER(*bmc) == COUNTER_MAX)
1385                         wake_up(&bitmap->overflow_wait);
1386
1387                 (*bmc)--;
1388                 if (*bmc <= 2) {
1389                         set_page_attr(bitmap,
1390                                       filemap_get_page(
1391                                               bitmap,
1392                                               offset >> bitmap->chunkshift),
1393                                       BITMAP_PAGE_PENDING);
1394                         bitmap->allclean = 0;
1395                 }
1396                 spin_unlock_irqrestore(&bitmap->lock, flags);
1397                 offset += blocks;
1398                 if (sectors > blocks)
1399                         sectors -= blocks;
1400                 else
1401                         sectors = 0;
1402         }
1403 }
1404 EXPORT_SYMBOL(bitmap_endwrite);
1405
1406 static int __bitmap_start_sync(struct bitmap *bitmap, sector_t offset, sector_t *blocks,
1407                                int degraded)
1408 {
1409         bitmap_counter_t *bmc;
1410         int rv;
1411         if (bitmap == NULL) {/* FIXME or bitmap set as 'failed' */
1412                 *blocks = 1024;
1413                 return 1; /* always resync if no bitmap */
1414         }
1415         spin_lock_irq(&bitmap->lock);
1416         bmc = bitmap_get_counter(bitmap, offset, blocks, 0);
1417         rv = 0;
1418         if (bmc) {
1419                 /* locked */
1420                 if (RESYNC(*bmc))
1421                         rv = 1;
1422                 else if (NEEDED(*bmc)) {
1423                         rv = 1;
1424                         if (!degraded) { /* don't set/clear bits if degraded */
1425                                 *bmc |= RESYNC_MASK;
1426                                 *bmc &= ~NEEDED_MASK;
1427                         }
1428                 }
1429         }
1430         spin_unlock_irq(&bitmap->lock);
1431         return rv;
1432 }
1433
1434 int bitmap_start_sync(struct bitmap *bitmap, sector_t offset, sector_t *blocks,
1435                       int degraded)
1436 {
1437         /* bitmap_start_sync must always report on multiples of whole
1438          * pages, otherwise resync (which is very PAGE_SIZE based) will
1439          * get confused.
1440          * So call __bitmap_start_sync repeatedly (if needed) until
1441          * At least PAGE_SIZE>>9 blocks are covered.
1442          * Return the 'or' of the result.
1443          */
1444         int rv = 0;
1445         sector_t blocks1;
1446
1447         *blocks = 0;
1448         while (*blocks < (PAGE_SIZE>>9)) {
1449                 rv |= __bitmap_start_sync(bitmap, offset,
1450                                           &blocks1, degraded);
1451                 offset += blocks1;
1452                 *blocks += blocks1;
1453         }
1454         return rv;
1455 }
1456 EXPORT_SYMBOL(bitmap_start_sync);
1457
1458 void bitmap_end_sync(struct bitmap *bitmap, sector_t offset, sector_t *blocks, int aborted)
1459 {
1460         bitmap_counter_t *bmc;
1461         unsigned long flags;
1462
1463         if (bitmap == NULL) {
1464                 *blocks = 1024;
1465                 return;
1466         }
1467         spin_lock_irqsave(&bitmap->lock, flags);
1468         bmc = bitmap_get_counter(bitmap, offset, blocks, 0);
1469         if (bmc == NULL)
1470                 goto unlock;
1471         /* locked */
1472         if (RESYNC(*bmc)) {
1473                 *bmc &= ~RESYNC_MASK;
1474
1475                 if (!NEEDED(*bmc) && aborted)
1476                         *bmc |= NEEDED_MASK;
1477                 else {
1478                         if (*bmc <= 2) {
1479                                 set_page_attr(bitmap,
1480                                               filemap_get_page(bitmap, offset >> bitmap->chunkshift),
1481                                               BITMAP_PAGE_PENDING);
1482                                 bitmap->allclean = 0;
1483                         }
1484                 }
1485         }
1486  unlock:
1487         spin_unlock_irqrestore(&bitmap->lock, flags);
1488 }
1489 EXPORT_SYMBOL(bitmap_end_sync);
1490
1491 void bitmap_close_sync(struct bitmap *bitmap)
1492 {
1493         /* Sync has finished, and any bitmap chunks that weren't synced
1494          * properly have been aborted.  It remains to us to clear the
1495          * RESYNC bit wherever it is still on
1496          */
1497         sector_t sector = 0;
1498         sector_t blocks;
1499         if (!bitmap)
1500                 return;
1501         while (sector < bitmap->mddev->resync_max_sectors) {
1502                 bitmap_end_sync(bitmap, sector, &blocks, 0);
1503                 sector += blocks;
1504         }
1505 }
1506 EXPORT_SYMBOL(bitmap_close_sync);
1507
1508 void bitmap_cond_end_sync(struct bitmap *bitmap, sector_t sector)
1509 {
1510         sector_t s = 0;
1511         sector_t blocks;
1512
1513         if (!bitmap)
1514                 return;
1515         if (sector == 0) {
1516                 bitmap->last_end_sync = jiffies;
1517                 return;
1518         }
1519         if (time_before(jiffies, (bitmap->last_end_sync
1520                                   + bitmap->mddev->bitmap_info.daemon_sleep)))
1521                 return;
1522         wait_event(bitmap->mddev->recovery_wait,
1523                    atomic_read(&bitmap->mddev->recovery_active) == 0);
1524
1525         bitmap->mddev->curr_resync_completed = sector;
1526         set_bit(MD_CHANGE_CLEAN, &bitmap->mddev->flags);
1527         sector &= ~((1ULL << bitmap->chunkshift) - 1);
1528         s = 0;
1529         while (s < sector && s < bitmap->mddev->resync_max_sectors) {
1530                 bitmap_end_sync(bitmap, s, &blocks, 0);
1531                 s += blocks;
1532         }
1533         bitmap->last_end_sync = jiffies;
1534         sysfs_notify(&bitmap->mddev->kobj, NULL, "sync_completed");
1535 }
1536 EXPORT_SYMBOL(bitmap_cond_end_sync);
1537
1538 static void bitmap_set_memory_bits(struct bitmap *bitmap, sector_t offset, int needed)
1539 {
1540         /* For each chunk covered by any of these sectors, set the
1541          * counter to 1 and set resync_needed.  They should all
1542          * be 0 at this point
1543          */
1544
1545         sector_t secs;
1546         bitmap_counter_t *bmc;
1547         spin_lock_irq(&bitmap->lock);
1548         bmc = bitmap_get_counter(bitmap, offset, &secs, 1);
1549         if (!bmc) {
1550                 spin_unlock_irq(&bitmap->lock);
1551                 return;
1552         }
1553         if (!*bmc) {
1554                 struct page *page;
1555                 *bmc = 2 | (needed ? NEEDED_MASK : 0);
1556                 bitmap_count_page(bitmap, offset, 1);
1557                 page = filemap_get_page(bitmap, offset >> bitmap->chunkshift);
1558                 set_page_attr(bitmap, page, BITMAP_PAGE_PENDING);
1559                 bitmap->allclean = 0;
1560         }
1561         spin_unlock_irq(&bitmap->lock);
1562 }
1563
1564 /* dirty the memory and file bits for bitmap chunks "s" to "e" */
1565 void bitmap_dirty_bits(struct bitmap *bitmap, unsigned long s, unsigned long e)
1566 {
1567         unsigned long chunk;
1568
1569         for (chunk = s; chunk <= e; chunk++) {
1570                 sector_t sec = (sector_t)chunk << bitmap->chunkshift;
1571                 bitmap_set_memory_bits(bitmap, sec, 1);
1572                 spin_lock_irq(&bitmap->lock);
1573                 bitmap_file_set_bit(bitmap, sec);
1574                 spin_unlock_irq(&bitmap->lock);
1575                 if (sec < bitmap->mddev->recovery_cp)
1576                         /* We are asserting that the array is dirty,
1577                          * so move the recovery_cp address back so
1578                          * that it is obvious that it is dirty
1579                          */
1580                         bitmap->mddev->recovery_cp = sec;
1581         }
1582 }
1583
1584 /*
1585  * flush out any pending updates
1586  */
1587 void bitmap_flush(struct mddev *mddev)
1588 {
1589         struct bitmap *bitmap = mddev->bitmap;
1590         long sleep;
1591
1592         if (!bitmap) /* there was no bitmap */
1593                 return;
1594
1595         /* run the daemon_work three time to ensure everything is flushed
1596          * that can be
1597          */
1598         sleep = mddev->bitmap_info.daemon_sleep * 2;
1599         bitmap->daemon_lastrun -= sleep;
1600         bitmap_daemon_work(mddev);
1601         bitmap->daemon_lastrun -= sleep;
1602         bitmap_daemon_work(mddev);
1603         bitmap->daemon_lastrun -= sleep;
1604         bitmap_daemon_work(mddev);
1605         bitmap_update_sb(bitmap);
1606 }
1607
1608 /*
1609  * free memory that was allocated
1610  */
1611 static void bitmap_free(struct bitmap *bitmap)
1612 {
1613         unsigned long k, pages;
1614         struct bitmap_page *bp;
1615
1616         if (!bitmap) /* there was no bitmap */
1617                 return;
1618
1619         /* release the bitmap file and kill the daemon */
1620         bitmap_file_put(bitmap);
1621
1622         bp = bitmap->bp;
1623         pages = bitmap->pages;
1624
1625         /* free all allocated memory */
1626
1627         if (bp) /* deallocate the page memory */
1628                 for (k = 0; k < pages; k++)
1629                         if (bp[k].map && !bp[k].hijacked)
1630                                 kfree(bp[k].map);
1631         kfree(bp);
1632         kfree(bitmap);
1633 }
1634
1635 void bitmap_destroy(struct mddev *mddev)
1636 {
1637         struct bitmap *bitmap = mddev->bitmap;
1638
1639         if (!bitmap) /* there was no bitmap */
1640                 return;
1641
1642         mutex_lock(&mddev->bitmap_info.mutex);
1643         mddev->bitmap = NULL; /* disconnect from the md device */
1644         mutex_unlock(&mddev->bitmap_info.mutex);
1645         if (mddev->thread)
1646                 mddev->thread->timeout = MAX_SCHEDULE_TIMEOUT;
1647
1648         if (bitmap->sysfs_can_clear)
1649                 sysfs_put(bitmap->sysfs_can_clear);
1650
1651         bitmap_free(bitmap);
1652 }
1653
1654 /*
1655  * initialize the bitmap structure
1656  * if this returns an error, bitmap_destroy must be called to do clean up
1657  */
1658 int bitmap_create(struct mddev *mddev)
1659 {
1660         struct bitmap *bitmap;
1661         sector_t blocks = mddev->resync_max_sectors;
1662         unsigned long chunks;
1663         unsigned long pages;
1664         struct file *file = mddev->bitmap_info.file;
1665         int err;
1666         struct sysfs_dirent *bm = NULL;
1667
1668         BUILD_BUG_ON(sizeof(bitmap_super_t) != 256);
1669
1670         if (!file
1671             && !mddev->bitmap_info.offset) /* bitmap disabled, nothing to do */
1672                 return 0;
1673
1674         BUG_ON(file && mddev->bitmap_info.offset);
1675
1676         bitmap = kzalloc(sizeof(*bitmap), GFP_KERNEL);
1677         if (!bitmap)
1678                 return -ENOMEM;
1679
1680         spin_lock_init(&bitmap->lock);
1681         atomic_set(&bitmap->pending_writes, 0);
1682         init_waitqueue_head(&bitmap->write_wait);
1683         init_waitqueue_head(&bitmap->overflow_wait);
1684         init_waitqueue_head(&bitmap->behind_wait);
1685
1686         bitmap->mddev = mddev;
1687
1688         if (mddev->kobj.sd)
1689                 bm = sysfs_get_dirent(mddev->kobj.sd, NULL, "bitmap");
1690         if (bm) {
1691                 bitmap->sysfs_can_clear = sysfs_get_dirent(bm, NULL, "can_clear");
1692                 sysfs_put(bm);
1693         } else
1694                 bitmap->sysfs_can_clear = NULL;
1695
1696         bitmap->file = file;
1697         if (file) {
1698                 get_file(file);
1699                 /* As future accesses to this file will use bmap,
1700                  * and bypass the page cache, we must sync the file
1701                  * first.
1702                  */
1703                 vfs_fsync(file, 1);
1704         }
1705         /* read superblock from bitmap file (this sets mddev->bitmap_info.chunksize) */
1706         if (!mddev->bitmap_info.external) {
1707                 /*
1708                  * If 'MD_ARRAY_FIRST_USE' is set, then device-mapper is
1709                  * instructing us to create a new on-disk bitmap instance.
1710                  */
1711                 if (test_and_clear_bit(MD_ARRAY_FIRST_USE, &mddev->flags))
1712                         err = bitmap_new_disk_sb(bitmap);
1713                 else
1714                         err = bitmap_read_sb(bitmap);
1715         } else {
1716                 err = 0;
1717                 if (mddev->bitmap_info.chunksize == 0 ||
1718                     mddev->bitmap_info.daemon_sleep == 0)
1719                         /* chunksize and time_base need to be
1720                          * set first. */
1721                         err = -EINVAL;
1722         }
1723         if (err)
1724                 goto error;
1725
1726         bitmap->daemon_lastrun = jiffies;
1727         bitmap->chunkshift = (ffz(~mddev->bitmap_info.chunksize)
1728                               - BITMAP_BLOCK_SHIFT);
1729
1730         /* now that chunksize and chunkshift are set, we can use these macros */
1731         chunks = (blocks + bitmap->chunkshift - 1) >>
1732                         bitmap->chunkshift;
1733         pages = (chunks + PAGE_COUNTER_RATIO - 1) / PAGE_COUNTER_RATIO;
1734
1735         BUG_ON(!pages);
1736
1737         bitmap->chunks = chunks;
1738         bitmap->pages = pages;
1739         bitmap->missing_pages = pages;
1740
1741         bitmap->bp = kzalloc(pages * sizeof(*bitmap->bp), GFP_KERNEL);
1742
1743         err = -ENOMEM;
1744         if (!bitmap->bp)
1745                 goto error;
1746
1747         printk(KERN_INFO "created bitmap (%lu pages) for device %s\n",
1748                 pages, bmname(bitmap));
1749
1750         mddev->bitmap = bitmap;
1751
1752
1753         return (bitmap->flags & BITMAP_WRITE_ERROR) ? -EIO : 0;
1754
1755  error:
1756         bitmap_free(bitmap);
1757         return err;
1758 }
1759
1760 int bitmap_load(struct mddev *mddev)
1761 {
1762         int err = 0;
1763         sector_t start = 0;
1764         sector_t sector = 0;
1765         struct bitmap *bitmap = mddev->bitmap;
1766
1767         if (!bitmap)
1768                 goto out;
1769
1770         /* Clear out old bitmap info first:  Either there is none, or we
1771          * are resuming after someone else has possibly changed things,
1772          * so we should forget old cached info.
1773          * All chunks should be clean, but some might need_sync.
1774          */
1775         while (sector < mddev->resync_max_sectors) {
1776                 sector_t blocks;
1777                 bitmap_start_sync(bitmap, sector, &blocks, 0);
1778                 sector += blocks;
1779         }
1780         bitmap_close_sync(bitmap);
1781
1782         if (mddev->degraded == 0
1783             || bitmap->events_cleared == mddev->events)
1784                 /* no need to keep dirty bits to optimise a
1785                  * re-add of a missing device */
1786                 start = mddev->recovery_cp;
1787
1788         err = bitmap_init_from_disk(bitmap, start);
1789
1790         if (err)
1791                 goto out;
1792
1793         mddev->thread->timeout = mddev->bitmap_info.daemon_sleep;
1794         md_wakeup_thread(mddev->thread);
1795
1796         bitmap_update_sb(bitmap);
1797
1798         if (bitmap->flags & BITMAP_WRITE_ERROR)
1799                 err = -EIO;
1800 out:
1801         return err;
1802 }
1803 EXPORT_SYMBOL_GPL(bitmap_load);
1804
1805 void bitmap_status(struct seq_file *seq, struct bitmap *bitmap)
1806 {
1807         unsigned long chunk_kb;
1808         unsigned long flags;
1809
1810         if (!bitmap)
1811                 return;
1812
1813         spin_lock_irqsave(&bitmap->lock, flags);
1814         chunk_kb = bitmap->mddev->bitmap_info.chunksize >> 10;
1815         seq_printf(seq, "bitmap: %lu/%lu pages [%luKB], "
1816                    "%lu%s chunk",
1817                    bitmap->pages - bitmap->missing_pages,
1818                    bitmap->pages,
1819                    (bitmap->pages - bitmap->missing_pages)
1820                    << (PAGE_SHIFT - 10),
1821                    chunk_kb ? chunk_kb : bitmap->mddev->bitmap_info.chunksize,
1822                    chunk_kb ? "KB" : "B");
1823         if (bitmap->file) {
1824                 seq_printf(seq, ", file: ");
1825                 seq_path(seq, &bitmap->file->f_path, " \t\n");
1826         }
1827
1828         seq_printf(seq, "\n");
1829         spin_unlock_irqrestore(&bitmap->lock, flags);
1830 }
1831
1832 static ssize_t
1833 location_show(struct mddev *mddev, char *page)
1834 {
1835         ssize_t len;
1836         if (mddev->bitmap_info.file)
1837                 len = sprintf(page, "file");
1838         else if (mddev->bitmap_info.offset)
1839                 len = sprintf(page, "%+lld", (long long)mddev->bitmap_info.offset);
1840         else
1841                 len = sprintf(page, "none");
1842         len += sprintf(page+len, "\n");
1843         return len;
1844 }
1845
1846 static ssize_t
1847 location_store(struct mddev *mddev, const char *buf, size_t len)
1848 {
1849
1850         if (mddev->pers) {
1851                 if (!mddev->pers->quiesce)
1852                         return -EBUSY;
1853                 if (mddev->recovery || mddev->sync_thread)
1854                         return -EBUSY;
1855         }
1856
1857         if (mddev->bitmap || mddev->bitmap_info.file ||
1858             mddev->bitmap_info.offset) {
1859                 /* bitmap already configured.  Only option is to clear it */
1860                 if (strncmp(buf, "none", 4) != 0)
1861                         return -EBUSY;
1862                 if (mddev->pers) {
1863                         mddev->pers->quiesce(mddev, 1);
1864                         bitmap_destroy(mddev);
1865                         mddev->pers->quiesce(mddev, 0);
1866                 }
1867                 mddev->bitmap_info.offset = 0;
1868                 if (mddev->bitmap_info.file) {
1869                         struct file *f = mddev->bitmap_info.file;
1870                         mddev->bitmap_info.file = NULL;
1871                         restore_bitmap_write_access(f);
1872                         fput(f);
1873                 }
1874         } else {
1875                 /* No bitmap, OK to set a location */
1876                 long long offset;
1877                 if (strncmp(buf, "none", 4) == 0)
1878                         /* nothing to be done */;
1879                 else if (strncmp(buf, "file:", 5) == 0) {
1880                         /* Not supported yet */
1881                         return -EINVAL;
1882                 } else {
1883                         int rv;
1884                         if (buf[0] == '+')
1885                                 rv = strict_strtoll(buf+1, 10, &offset);
1886                         else
1887                                 rv = strict_strtoll(buf, 10, &offset);
1888                         if (rv)
1889                                 return rv;
1890                         if (offset == 0)
1891                                 return -EINVAL;
1892                         if (mddev->bitmap_info.external == 0 &&
1893                             mddev->major_version == 0 &&
1894                             offset != mddev->bitmap_info.default_offset)
1895                                 return -EINVAL;
1896                         mddev->bitmap_info.offset = offset;
1897                         if (mddev->pers) {
1898                                 mddev->pers->quiesce(mddev, 1);
1899                                 rv = bitmap_create(mddev);
1900                                 if (!rv)
1901                                         rv = bitmap_load(mddev);
1902                                 if (rv) {
1903                                         bitmap_destroy(mddev);
1904                                         mddev->bitmap_info.offset = 0;
1905                                 }
1906                                 mddev->pers->quiesce(mddev, 0);
1907                                 if (rv)
1908                                         return rv;
1909                         }
1910                 }
1911         }
1912         if (!mddev->external) {
1913                 /* Ensure new bitmap info is stored in
1914                  * metadata promptly.
1915                  */
1916                 set_bit(MD_CHANGE_DEVS, &mddev->flags);
1917                 md_wakeup_thread(mddev->thread);
1918         }
1919         return len;
1920 }
1921
1922 static struct md_sysfs_entry bitmap_location =
1923 __ATTR(location, S_IRUGO|S_IWUSR, location_show, location_store);
1924
1925 static ssize_t
1926 timeout_show(struct mddev *mddev, char *page)
1927 {
1928         ssize_t len;
1929         unsigned long secs = mddev->bitmap_info.daemon_sleep / HZ;
1930         unsigned long jifs = mddev->bitmap_info.daemon_sleep % HZ;
1931
1932         len = sprintf(page, "%lu", secs);
1933         if (jifs)
1934                 len += sprintf(page+len, ".%03u", jiffies_to_msecs(jifs));
1935         len += sprintf(page+len, "\n");
1936         return len;
1937 }
1938
1939 static ssize_t
1940 timeout_store(struct mddev *mddev, const char *buf, size_t len)
1941 {
1942         /* timeout can be set at any time */
1943         unsigned long timeout;
1944         int rv = strict_strtoul_scaled(buf, &timeout, 4);
1945         if (rv)
1946                 return rv;
1947
1948         /* just to make sure we don't overflow... */
1949         if (timeout >= LONG_MAX / HZ)
1950                 return -EINVAL;
1951
1952         timeout = timeout * HZ / 10000;
1953
1954         if (timeout >= MAX_SCHEDULE_TIMEOUT)
1955                 timeout = MAX_SCHEDULE_TIMEOUT-1;
1956         if (timeout < 1)
1957                 timeout = 1;
1958         mddev->bitmap_info.daemon_sleep = timeout;
1959         if (mddev->thread) {
1960                 /* if thread->timeout is MAX_SCHEDULE_TIMEOUT, then
1961                  * the bitmap is all clean and we don't need to
1962                  * adjust the timeout right now
1963                  */
1964                 if (mddev->thread->timeout < MAX_SCHEDULE_TIMEOUT) {
1965                         mddev->thread->timeout = timeout;
1966                         md_wakeup_thread(mddev->thread);
1967                 }
1968         }
1969         return len;
1970 }
1971
1972 static struct md_sysfs_entry bitmap_timeout =
1973 __ATTR(time_base, S_IRUGO|S_IWUSR, timeout_show, timeout_store);
1974
1975 static ssize_t
1976 backlog_show(struct mddev *mddev, char *page)
1977 {
1978         return sprintf(page, "%lu\n", mddev->bitmap_info.max_write_behind);
1979 }
1980
1981 static ssize_t
1982 backlog_store(struct mddev *mddev, const char *buf, size_t len)
1983 {
1984         unsigned long backlog;
1985         int rv = strict_strtoul(buf, 10, &backlog);
1986         if (rv)
1987                 return rv;
1988         if (backlog > COUNTER_MAX)
1989                 return -EINVAL;
1990         mddev->bitmap_info.max_write_behind = backlog;
1991         return len;
1992 }
1993
1994 static struct md_sysfs_entry bitmap_backlog =
1995 __ATTR(backlog, S_IRUGO|S_IWUSR, backlog_show, backlog_store);
1996
1997 static ssize_t
1998 chunksize_show(struct mddev *mddev, char *page)
1999 {
2000         return sprintf(page, "%lu\n", mddev->bitmap_info.chunksize);
2001 }
2002
2003 static ssize_t
2004 chunksize_store(struct mddev *mddev, const char *buf, size_t len)
2005 {
2006         /* Can only be changed when no bitmap is active */
2007         int rv;
2008         unsigned long csize;
2009         if (mddev->bitmap)
2010                 return -EBUSY;
2011         rv = strict_strtoul(buf, 10, &csize);
2012         if (rv)
2013                 return rv;
2014         if (csize < 512 ||
2015             !is_power_of_2(csize))
2016                 return -EINVAL;
2017         mddev->bitmap_info.chunksize = csize;
2018         return len;
2019 }
2020
2021 static struct md_sysfs_entry bitmap_chunksize =
2022 __ATTR(chunksize, S_IRUGO|S_IWUSR, chunksize_show, chunksize_store);
2023
2024 static ssize_t metadata_show(struct mddev *mddev, char *page)
2025 {
2026         return sprintf(page, "%s\n", (mddev->bitmap_info.external
2027                                       ? "external" : "internal"));
2028 }
2029
2030 static ssize_t metadata_store(struct mddev *mddev, const char *buf, size_t len)
2031 {
2032         if (mddev->bitmap ||
2033             mddev->bitmap_info.file ||
2034             mddev->bitmap_info.offset)
2035                 return -EBUSY;
2036         if (strncmp(buf, "external", 8) == 0)
2037                 mddev->bitmap_info.external = 1;
2038         else if (strncmp(buf, "internal", 8) == 0)
2039                 mddev->bitmap_info.external = 0;
2040         else
2041                 return -EINVAL;
2042         return len;
2043 }
2044
2045 static struct md_sysfs_entry bitmap_metadata =
2046 __ATTR(metadata, S_IRUGO|S_IWUSR, metadata_show, metadata_store);
2047
2048 static ssize_t can_clear_show(struct mddev *mddev, char *page)
2049 {
2050         int len;
2051         if (mddev->bitmap)
2052                 len = sprintf(page, "%s\n", (mddev->bitmap->need_sync ?
2053                                              "false" : "true"));
2054         else
2055                 len = sprintf(page, "\n");
2056         return len;
2057 }
2058
2059 static ssize_t can_clear_store(struct mddev *mddev, const char *buf, size_t len)
2060 {
2061         if (mddev->bitmap == NULL)
2062                 return -ENOENT;
2063         if (strncmp(buf, "false", 5) == 0)
2064                 mddev->bitmap->need_sync = 1;
2065         else if (strncmp(buf, "true", 4) == 0) {
2066                 if (mddev->degraded)
2067                         return -EBUSY;
2068                 mddev->bitmap->need_sync = 0;
2069         } else
2070                 return -EINVAL;
2071         return len;
2072 }
2073
2074 static struct md_sysfs_entry bitmap_can_clear =
2075 __ATTR(can_clear, S_IRUGO|S_IWUSR, can_clear_show, can_clear_store);
2076
2077 static ssize_t
2078 behind_writes_used_show(struct mddev *mddev, char *page)
2079 {
2080         if (mddev->bitmap == NULL)
2081                 return sprintf(page, "0\n");
2082         return sprintf(page, "%lu\n",
2083                        mddev->bitmap->behind_writes_used);
2084 }
2085
2086 static ssize_t
2087 behind_writes_used_reset(struct mddev *mddev, const char *buf, size_t len)
2088 {
2089         if (mddev->bitmap)
2090                 mddev->bitmap->behind_writes_used = 0;
2091         return len;
2092 }
2093
2094 static struct md_sysfs_entry max_backlog_used =
2095 __ATTR(max_backlog_used, S_IRUGO | S_IWUSR,
2096        behind_writes_used_show, behind_writes_used_reset);
2097
2098 static struct attribute *md_bitmap_attrs[] = {
2099         &bitmap_location.attr,
2100         &bitmap_timeout.attr,
2101         &bitmap_backlog.attr,
2102         &bitmap_chunksize.attr,
2103         &bitmap_metadata.attr,
2104         &bitmap_can_clear.attr,
2105         &max_backlog_used.attr,
2106         NULL
2107 };
2108 struct attribute_group md_bitmap_group = {
2109         .name = "bitmap",
2110         .attrs = md_bitmap_attrs,
2111 };
2112