05dd78f4b2b3b5aa6982d8475be770d4a37f712c
[sfrench/cifs-2.6.git] / fs / gfs2 / aops.c
1 /*
2  * Copyright (C) Sistina Software, Inc.  1997-2003 All rights reserved.
3  * Copyright (C) 2004-2008 Red Hat, Inc.  All rights reserved.
4  *
5  * This copyrighted material is made available to anyone wishing to use,
6  * modify, copy, or redistribute it subject to the terms and conditions
7  * of the GNU General Public License version 2.
8  */
9
10 #include <linux/sched.h>
11 #include <linux/slab.h>
12 #include <linux/spinlock.h>
13 #include <linux/completion.h>
14 #include <linux/buffer_head.h>
15 #include <linux/pagemap.h>
16 #include <linux/pagevec.h>
17 #include <linux/mpage.h>
18 #include <linux/fs.h>
19 #include <linux/writeback.h>
20 #include <linux/swap.h>
21 #include <linux/gfs2_ondisk.h>
22 #include <linux/backing-dev.h>
23 #include <linux/uio.h>
24 #include <trace/events/writeback.h>
25 #include <linux/sched/signal.h>
26
27 #include "gfs2.h"
28 #include "incore.h"
29 #include "bmap.h"
30 #include "glock.h"
31 #include "inode.h"
32 #include "log.h"
33 #include "meta_io.h"
34 #include "quota.h"
35 #include "trans.h"
36 #include "rgrp.h"
37 #include "super.h"
38 #include "util.h"
39 #include "glops.h"
40 #include "aops.h"
41
42
43 void gfs2_page_add_databufs(struct gfs2_inode *ip, struct page *page,
44                             unsigned int from, unsigned int len)
45 {
46         struct buffer_head *head = page_buffers(page);
47         unsigned int bsize = head->b_size;
48         struct buffer_head *bh;
49         unsigned int to = from + len;
50         unsigned int start, end;
51
52         for (bh = head, start = 0; bh != head || !start;
53              bh = bh->b_this_page, start = end) {
54                 end = start + bsize;
55                 if (end <= from)
56                         continue;
57                 if (start >= to)
58                         break;
59                 set_buffer_uptodate(bh);
60                 gfs2_trans_add_data(ip->i_gl, bh);
61         }
62 }
63
64 /**
65  * gfs2_get_block_noalloc - Fills in a buffer head with details about a block
66  * @inode: The inode
67  * @lblock: The block number to look up
68  * @bh_result: The buffer head to return the result in
69  * @create: Non-zero if we may add block to the file
70  *
71  * Returns: errno
72  */
73
74 static int gfs2_get_block_noalloc(struct inode *inode, sector_t lblock,
75                                   struct buffer_head *bh_result, int create)
76 {
77         int error;
78
79         error = gfs2_block_map(inode, lblock, bh_result, 0);
80         if (error)
81                 return error;
82         if (!buffer_mapped(bh_result))
83                 return -EIO;
84         return 0;
85 }
86
87 /**
88  * gfs2_writepage_common - Common bits of writepage
89  * @page: The page to be written
90  * @wbc: The writeback control
91  *
92  * Returns: 1 if writepage is ok, otherwise an error code or zero if no error.
93  */
94
95 static int gfs2_writepage_common(struct page *page,
96                                  struct writeback_control *wbc)
97 {
98         struct inode *inode = page->mapping->host;
99         struct gfs2_inode *ip = GFS2_I(inode);
100         struct gfs2_sbd *sdp = GFS2_SB(inode);
101         loff_t i_size = i_size_read(inode);
102         pgoff_t end_index = i_size >> PAGE_SHIFT;
103         unsigned offset;
104
105         if (gfs2_assert_withdraw(sdp, gfs2_glock_is_held_excl(ip->i_gl)))
106                 goto out;
107         if (current->journal_info)
108                 goto redirty;
109         /* Is the page fully outside i_size? (truncate in progress) */
110         offset = i_size & (PAGE_SIZE-1);
111         if (page->index > end_index || (page->index == end_index && !offset)) {
112                 page->mapping->a_ops->invalidatepage(page, 0, PAGE_SIZE);
113                 goto out;
114         }
115         return 1;
116 redirty:
117         redirty_page_for_writepage(wbc, page);
118 out:
119         unlock_page(page);
120         return 0;
121 }
122
123 /**
124  * gfs2_writepage - Write page for writeback mappings
125  * @page: The page
126  * @wbc: The writeback control
127  *
128  */
129
130 static int gfs2_writepage(struct page *page, struct writeback_control *wbc)
131 {
132         int ret;
133
134         ret = gfs2_writepage_common(page, wbc);
135         if (ret <= 0)
136                 return ret;
137
138         return nobh_writepage(page, gfs2_get_block_noalloc, wbc);
139 }
140
141 /* This is the same as calling block_write_full_page, but it also
142  * writes pages outside of i_size
143  */
144 static int gfs2_write_full_page(struct page *page, get_block_t *get_block,
145                                 struct writeback_control *wbc)
146 {
147         struct inode * const inode = page->mapping->host;
148         loff_t i_size = i_size_read(inode);
149         const pgoff_t end_index = i_size >> PAGE_SHIFT;
150         unsigned offset;
151
152         /*
153          * The page straddles i_size.  It must be zeroed out on each and every
154          * writepage invocation because it may be mmapped.  "A file is mapped
155          * in multiples of the page size.  For a file that is not a multiple of
156          * the  page size, the remaining memory is zeroed when mapped, and
157          * writes to that region are not written out to the file."
158          */
159         offset = i_size & (PAGE_SIZE-1);
160         if (page->index == end_index && offset)
161                 zero_user_segment(page, offset, PAGE_SIZE);
162
163         return __block_write_full_page(inode, page, get_block, wbc,
164                                        end_buffer_async_write);
165 }
166
167 /**
168  * __gfs2_jdata_writepage - The core of jdata writepage
169  * @page: The page to write
170  * @wbc: The writeback control
171  *
172  * This is shared between writepage and writepages and implements the
173  * core of the writepage operation. If a transaction is required then
174  * PageChecked will have been set and the transaction will have
175  * already been started before this is called.
176  */
177
178 static int __gfs2_jdata_writepage(struct page *page, struct writeback_control *wbc)
179 {
180         struct inode *inode = page->mapping->host;
181         struct gfs2_inode *ip = GFS2_I(inode);
182         struct gfs2_sbd *sdp = GFS2_SB(inode);
183
184         if (PageChecked(page)) {
185                 ClearPageChecked(page);
186                 if (!page_has_buffers(page)) {
187                         create_empty_buffers(page, inode->i_sb->s_blocksize,
188                                              BIT(BH_Dirty)|BIT(BH_Uptodate));
189                 }
190                 gfs2_page_add_databufs(ip, page, 0, sdp->sd_vfs->s_blocksize);
191         }
192         return gfs2_write_full_page(page, gfs2_get_block_noalloc, wbc);
193 }
194
195 /**
196  * gfs2_jdata_writepage - Write complete page
197  * @page: Page to write
198  * @wbc: The writeback control
199  *
200  * Returns: errno
201  *
202  */
203
204 static int gfs2_jdata_writepage(struct page *page, struct writeback_control *wbc)
205 {
206         struct inode *inode = page->mapping->host;
207         struct gfs2_inode *ip = GFS2_I(inode);
208         struct gfs2_sbd *sdp = GFS2_SB(inode);
209         int ret;
210
211         if (gfs2_assert_withdraw(sdp, gfs2_glock_is_held_excl(ip->i_gl)))
212                 goto out;
213         if (PageChecked(page) || current->journal_info)
214                 goto out_ignore;
215         ret = __gfs2_jdata_writepage(page, wbc);
216         return ret;
217
218 out_ignore:
219         redirty_page_for_writepage(wbc, page);
220 out:
221         unlock_page(page);
222         return 0;
223 }
224
225 /**
226  * gfs2_writepages - Write a bunch of dirty pages back to disk
227  * @mapping: The mapping to write
228  * @wbc: Write-back control
229  *
230  * Used for both ordered and writeback modes.
231  */
232 static int gfs2_writepages(struct address_space *mapping,
233                            struct writeback_control *wbc)
234 {
235         struct gfs2_sbd *sdp = gfs2_mapping2sbd(mapping);
236         int ret = mpage_writepages(mapping, wbc, gfs2_get_block_noalloc);
237
238         /*
239          * Even if we didn't write any pages here, we might still be holding
240          * dirty pages in the ail. We forcibly flush the ail because we don't
241          * want balance_dirty_pages() to loop indefinitely trying to write out
242          * pages held in the ail that it can't find.
243          */
244         if (ret == 0)
245                 set_bit(SDF_FORCE_AIL_FLUSH, &sdp->sd_flags);
246
247         return ret;
248 }
249
250 /**
251  * gfs2_write_jdata_pagevec - Write back a pagevec's worth of pages
252  * @mapping: The mapping
253  * @wbc: The writeback control
254  * @pvec: The vector of pages
255  * @nr_pages: The number of pages to write
256  * @done_index: Page index
257  *
258  * Returns: non-zero if loop should terminate, zero otherwise
259  */
260
261 static int gfs2_write_jdata_pagevec(struct address_space *mapping,
262                                     struct writeback_control *wbc,
263                                     struct pagevec *pvec,
264                                     int nr_pages,
265                                     pgoff_t *done_index)
266 {
267         struct inode *inode = mapping->host;
268         struct gfs2_sbd *sdp = GFS2_SB(inode);
269         unsigned nrblocks = nr_pages * (PAGE_SIZE/inode->i_sb->s_blocksize);
270         int i;
271         int ret;
272
273         ret = gfs2_trans_begin(sdp, nrblocks, nrblocks);
274         if (ret < 0)
275                 return ret;
276
277         for(i = 0; i < nr_pages; i++) {
278                 struct page *page = pvec->pages[i];
279
280                 *done_index = page->index;
281
282                 lock_page(page);
283
284                 if (unlikely(page->mapping != mapping)) {
285 continue_unlock:
286                         unlock_page(page);
287                         continue;
288                 }
289
290                 if (!PageDirty(page)) {
291                         /* someone wrote it for us */
292                         goto continue_unlock;
293                 }
294
295                 if (PageWriteback(page)) {
296                         if (wbc->sync_mode != WB_SYNC_NONE)
297                                 wait_on_page_writeback(page);
298                         else
299                                 goto continue_unlock;
300                 }
301
302                 BUG_ON(PageWriteback(page));
303                 if (!clear_page_dirty_for_io(page))
304                         goto continue_unlock;
305
306                 trace_wbc_writepage(wbc, inode_to_bdi(inode));
307
308                 ret = __gfs2_jdata_writepage(page, wbc);
309                 if (unlikely(ret)) {
310                         if (ret == AOP_WRITEPAGE_ACTIVATE) {
311                                 unlock_page(page);
312                                 ret = 0;
313                         } else {
314
315                                 /*
316                                  * done_index is set past this page,
317                                  * so media errors will not choke
318                                  * background writeout for the entire
319                                  * file. This has consequences for
320                                  * range_cyclic semantics (ie. it may
321                                  * not be suitable for data integrity
322                                  * writeout).
323                                  */
324                                 *done_index = page->index + 1;
325                                 ret = 1;
326                                 break;
327                         }
328                 }
329
330                 /*
331                  * We stop writing back only if we are not doing
332                  * integrity sync. In case of integrity sync we have to
333                  * keep going until we have written all the pages
334                  * we tagged for writeback prior to entering this loop.
335                  */
336                 if (--wbc->nr_to_write <= 0 && wbc->sync_mode == WB_SYNC_NONE) {
337                         ret = 1;
338                         break;
339                 }
340
341         }
342         gfs2_trans_end(sdp);
343         return ret;
344 }
345
346 /**
347  * gfs2_write_cache_jdata - Like write_cache_pages but different
348  * @mapping: The mapping to write
349  * @wbc: The writeback control
350  *
351  * The reason that we use our own function here is that we need to
352  * start transactions before we grab page locks. This allows us
353  * to get the ordering right.
354  */
355
356 static int gfs2_write_cache_jdata(struct address_space *mapping,
357                                   struct writeback_control *wbc)
358 {
359         int ret = 0;
360         int done = 0;
361         struct pagevec pvec;
362         int nr_pages;
363         pgoff_t uninitialized_var(writeback_index);
364         pgoff_t index;
365         pgoff_t end;
366         pgoff_t done_index;
367         int cycled;
368         int range_whole = 0;
369         xa_mark_t tag;
370
371         pagevec_init(&pvec);
372         if (wbc->range_cyclic) {
373                 writeback_index = mapping->writeback_index; /* prev offset */
374                 index = writeback_index;
375                 if (index == 0)
376                         cycled = 1;
377                 else
378                         cycled = 0;
379                 end = -1;
380         } else {
381                 index = wbc->range_start >> PAGE_SHIFT;
382                 end = wbc->range_end >> PAGE_SHIFT;
383                 if (wbc->range_start == 0 && wbc->range_end == LLONG_MAX)
384                         range_whole = 1;
385                 cycled = 1; /* ignore range_cyclic tests */
386         }
387         if (wbc->sync_mode == WB_SYNC_ALL || wbc->tagged_writepages)
388                 tag = PAGECACHE_TAG_TOWRITE;
389         else
390                 tag = PAGECACHE_TAG_DIRTY;
391
392 retry:
393         if (wbc->sync_mode == WB_SYNC_ALL || wbc->tagged_writepages)
394                 tag_pages_for_writeback(mapping, index, end);
395         done_index = index;
396         while (!done && (index <= end)) {
397                 nr_pages = pagevec_lookup_range_tag(&pvec, mapping, &index, end,
398                                 tag);
399                 if (nr_pages == 0)
400                         break;
401
402                 ret = gfs2_write_jdata_pagevec(mapping, wbc, &pvec, nr_pages, &done_index);
403                 if (ret)
404                         done = 1;
405                 if (ret > 0)
406                         ret = 0;
407                 pagevec_release(&pvec);
408                 cond_resched();
409         }
410
411         if (!cycled && !done) {
412                 /*
413                  * range_cyclic:
414                  * We hit the last page and there is more work to be done: wrap
415                  * back to the start of the file
416                  */
417                 cycled = 1;
418                 index = 0;
419                 end = writeback_index - 1;
420                 goto retry;
421         }
422
423         if (wbc->range_cyclic || (range_whole && wbc->nr_to_write > 0))
424                 mapping->writeback_index = done_index;
425
426         return ret;
427 }
428
429
430 /**
431  * gfs2_jdata_writepages - Write a bunch of dirty pages back to disk
432  * @mapping: The mapping to write
433  * @wbc: The writeback control
434  * 
435  */
436
437 static int gfs2_jdata_writepages(struct address_space *mapping,
438                                  struct writeback_control *wbc)
439 {
440         struct gfs2_inode *ip = GFS2_I(mapping->host);
441         struct gfs2_sbd *sdp = GFS2_SB(mapping->host);
442         int ret;
443
444         ret = gfs2_write_cache_jdata(mapping, wbc);
445         if (ret == 0 && wbc->sync_mode == WB_SYNC_ALL) {
446                 gfs2_log_flush(sdp, ip->i_gl, GFS2_LOG_HEAD_FLUSH_NORMAL |
447                                GFS2_LFC_JDATA_WPAGES);
448                 ret = gfs2_write_cache_jdata(mapping, wbc);
449         }
450         return ret;
451 }
452
453 /**
454  * stuffed_readpage - Fill in a Linux page with stuffed file data
455  * @ip: the inode
456  * @page: the page
457  *
458  * Returns: errno
459  */
460
461 int stuffed_readpage(struct gfs2_inode *ip, struct page *page)
462 {
463         struct buffer_head *dibh;
464         u64 dsize = i_size_read(&ip->i_inode);
465         void *kaddr;
466         int error;
467
468         /*
469          * Due to the order of unstuffing files and ->fault(), we can be
470          * asked for a zero page in the case of a stuffed file being extended,
471          * so we need to supply one here. It doesn't happen often.
472          */
473         if (unlikely(page->index)) {
474                 zero_user(page, 0, PAGE_SIZE);
475                 SetPageUptodate(page);
476                 return 0;
477         }
478
479         error = gfs2_meta_inode_buffer(ip, &dibh);
480         if (error)
481                 return error;
482
483         kaddr = kmap_atomic(page);
484         if (dsize > gfs2_max_stuffed_size(ip))
485                 dsize = gfs2_max_stuffed_size(ip);
486         memcpy(kaddr, dibh->b_data + sizeof(struct gfs2_dinode), dsize);
487         memset(kaddr + dsize, 0, PAGE_SIZE - dsize);
488         kunmap_atomic(kaddr);
489         flush_dcache_page(page);
490         brelse(dibh);
491         SetPageUptodate(page);
492
493         return 0;
494 }
495
496
497 /**
498  * __gfs2_readpage - readpage
499  * @file: The file to read a page for
500  * @page: The page to read
501  *
502  * This is the core of gfs2's readpage. It's used by the internal file
503  * reading code as in that case we already hold the glock. Also it's
504  * called by gfs2_readpage() once the required lock has been granted.
505  */
506
507 static int __gfs2_readpage(void *file, struct page *page)
508 {
509         struct gfs2_inode *ip = GFS2_I(page->mapping->host);
510         struct gfs2_sbd *sdp = GFS2_SB(page->mapping->host);
511
512         int error;
513
514         if (i_blocksize(page->mapping->host) == PAGE_SIZE &&
515             !page_has_buffers(page)) {
516                 error = iomap_readpage(page, &gfs2_iomap_ops);
517         } else if (gfs2_is_stuffed(ip)) {
518                 error = stuffed_readpage(ip, page);
519                 unlock_page(page);
520         } else {
521                 error = mpage_readpage(page, gfs2_block_map);
522         }
523
524         if (unlikely(test_bit(SDF_SHUTDOWN, &sdp->sd_flags)))
525                 return -EIO;
526
527         return error;
528 }
529
530 /**
531  * gfs2_readpage - read a page of a file
532  * @file: The file to read
533  * @page: The page of the file
534  *
535  * This deals with the locking required. We have to unlock and
536  * relock the page in order to get the locking in the right
537  * order.
538  */
539
540 static int gfs2_readpage(struct file *file, struct page *page)
541 {
542         struct address_space *mapping = page->mapping;
543         struct gfs2_inode *ip = GFS2_I(mapping->host);
544         struct gfs2_holder gh;
545         int error;
546
547         unlock_page(page);
548         gfs2_holder_init(ip->i_gl, LM_ST_SHARED, 0, &gh);
549         error = gfs2_glock_nq(&gh);
550         if (unlikely(error))
551                 goto out;
552         error = AOP_TRUNCATED_PAGE;
553         lock_page(page);
554         if (page->mapping == mapping && !PageUptodate(page))
555                 error = __gfs2_readpage(file, page);
556         else
557                 unlock_page(page);
558         gfs2_glock_dq(&gh);
559 out:
560         gfs2_holder_uninit(&gh);
561         if (error && error != AOP_TRUNCATED_PAGE)
562                 lock_page(page);
563         return error;
564 }
565
566 /**
567  * gfs2_internal_read - read an internal file
568  * @ip: The gfs2 inode
569  * @buf: The buffer to fill
570  * @pos: The file position
571  * @size: The amount to read
572  *
573  */
574
575 int gfs2_internal_read(struct gfs2_inode *ip, char *buf, loff_t *pos,
576                        unsigned size)
577 {
578         struct address_space *mapping = ip->i_inode.i_mapping;
579         unsigned long index = *pos / PAGE_SIZE;
580         unsigned offset = *pos & (PAGE_SIZE - 1);
581         unsigned copied = 0;
582         unsigned amt;
583         struct page *page;
584         void *p;
585
586         do {
587                 amt = size - copied;
588                 if (offset + size > PAGE_SIZE)
589                         amt = PAGE_SIZE - offset;
590                 page = read_cache_page(mapping, index, __gfs2_readpage, NULL);
591                 if (IS_ERR(page))
592                         return PTR_ERR(page);
593                 p = kmap_atomic(page);
594                 memcpy(buf + copied, p + offset, amt);
595                 kunmap_atomic(p);
596                 put_page(page);
597                 copied += amt;
598                 index++;
599                 offset = 0;
600         } while(copied < size);
601         (*pos) += size;
602         return size;
603 }
604
605 /**
606  * gfs2_readpages - Read a bunch of pages at once
607  * @file: The file to read from
608  * @mapping: Address space info
609  * @pages: List of pages to read
610  * @nr_pages: Number of pages to read
611  *
612  * Some notes:
613  * 1. This is only for readahead, so we can simply ignore any things
614  *    which are slightly inconvenient (such as locking conflicts between
615  *    the page lock and the glock) and return having done no I/O. Its
616  *    obviously not something we'd want to do on too regular a basis.
617  *    Any I/O we ignore at this time will be done via readpage later.
618  * 2. We don't handle stuffed files here we let readpage do the honours.
619  * 3. mpage_readpages() does most of the heavy lifting in the common case.
620  * 4. gfs2_block_map() is relied upon to set BH_Boundary in the right places.
621  */
622
623 static int gfs2_readpages(struct file *file, struct address_space *mapping,
624                           struct list_head *pages, unsigned nr_pages)
625 {
626         struct inode *inode = mapping->host;
627         struct gfs2_inode *ip = GFS2_I(inode);
628         struct gfs2_sbd *sdp = GFS2_SB(inode);
629         struct gfs2_holder gh;
630         int ret;
631
632         gfs2_holder_init(ip->i_gl, LM_ST_SHARED, 0, &gh);
633         ret = gfs2_glock_nq(&gh);
634         if (unlikely(ret))
635                 goto out_uninit;
636         if (!gfs2_is_stuffed(ip))
637                 ret = mpage_readpages(mapping, pages, nr_pages, gfs2_block_map);
638         gfs2_glock_dq(&gh);
639 out_uninit:
640         gfs2_holder_uninit(&gh);
641         if (unlikely(test_bit(SDF_SHUTDOWN, &sdp->sd_flags)))
642                 ret = -EIO;
643         return ret;
644 }
645
646 /**
647  * adjust_fs_space - Adjusts the free space available due to gfs2_grow
648  * @inode: the rindex inode
649  */
650 void adjust_fs_space(struct inode *inode)
651 {
652         struct gfs2_sbd *sdp = inode->i_sb->s_fs_info;
653         struct gfs2_inode *m_ip = GFS2_I(sdp->sd_statfs_inode);
654         struct gfs2_inode *l_ip = GFS2_I(sdp->sd_sc_inode);
655         struct gfs2_statfs_change_host *m_sc = &sdp->sd_statfs_master;
656         struct gfs2_statfs_change_host *l_sc = &sdp->sd_statfs_local;
657         struct buffer_head *m_bh, *l_bh;
658         u64 fs_total, new_free;
659
660         /* Total up the file system space, according to the latest rindex. */
661         fs_total = gfs2_ri_total(sdp);
662         if (gfs2_meta_inode_buffer(m_ip, &m_bh) != 0)
663                 return;
664
665         spin_lock(&sdp->sd_statfs_spin);
666         gfs2_statfs_change_in(m_sc, m_bh->b_data +
667                               sizeof(struct gfs2_dinode));
668         if (fs_total > (m_sc->sc_total + l_sc->sc_total))
669                 new_free = fs_total - (m_sc->sc_total + l_sc->sc_total);
670         else
671                 new_free = 0;
672         spin_unlock(&sdp->sd_statfs_spin);
673         fs_warn(sdp, "File system extended by %llu blocks.\n",
674                 (unsigned long long)new_free);
675         gfs2_statfs_change(sdp, new_free, new_free, 0);
676
677         if (gfs2_meta_inode_buffer(l_ip, &l_bh) != 0)
678                 goto out;
679         update_statfs(sdp, m_bh, l_bh);
680         brelse(l_bh);
681 out:
682         brelse(m_bh);
683 }
684
685 /**
686  * gfs2_stuffed_write_end - Write end for stuffed files
687  * @inode: The inode
688  * @dibh: The buffer_head containing the on-disk inode
689  * @pos: The file position
690  * @copied: How much was actually copied by the VFS
691  * @page: The page
692  *
693  * This copies the data from the page into the inode block after
694  * the inode data structure itself.
695  *
696  * Returns: copied bytes or errno
697  */
698 int gfs2_stuffed_write_end(struct inode *inode, struct buffer_head *dibh,
699                            loff_t pos, unsigned copied,
700                            struct page *page)
701 {
702         struct gfs2_inode *ip = GFS2_I(inode);
703         u64 to = pos + copied;
704         void *kaddr;
705         unsigned char *buf = dibh->b_data + sizeof(struct gfs2_dinode);
706
707         BUG_ON(pos + copied > gfs2_max_stuffed_size(ip));
708
709         kaddr = kmap_atomic(page);
710         memcpy(buf + pos, kaddr + pos, copied);
711         flush_dcache_page(page);
712         kunmap_atomic(kaddr);
713
714         WARN_ON(!PageUptodate(page));
715         unlock_page(page);
716         put_page(page);
717
718         if (copied) {
719                 if (inode->i_size < to)
720                         i_size_write(inode, to);
721                 mark_inode_dirty(inode);
722         }
723         return copied;
724 }
725
726 /**
727  * jdata_set_page_dirty - Page dirtying function
728  * @page: The page to dirty
729  *
730  * Returns: 1 if it dirtyed the page, or 0 otherwise
731  */
732  
733 static int jdata_set_page_dirty(struct page *page)
734 {
735         SetPageChecked(page);
736         return __set_page_dirty_buffers(page);
737 }
738
739 /**
740  * gfs2_bmap - Block map function
741  * @mapping: Address space info
742  * @lblock: The block to map
743  *
744  * Returns: The disk address for the block or 0 on hole or error
745  */
746
747 static sector_t gfs2_bmap(struct address_space *mapping, sector_t lblock)
748 {
749         struct gfs2_inode *ip = GFS2_I(mapping->host);
750         struct gfs2_holder i_gh;
751         sector_t dblock = 0;
752         int error;
753
754         error = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED, LM_FLAG_ANY, &i_gh);
755         if (error)
756                 return 0;
757
758         if (!gfs2_is_stuffed(ip))
759                 dblock = generic_block_bmap(mapping, lblock, gfs2_block_map);
760
761         gfs2_glock_dq_uninit(&i_gh);
762
763         return dblock;
764 }
765
766 static void gfs2_discard(struct gfs2_sbd *sdp, struct buffer_head *bh)
767 {
768         struct gfs2_bufdata *bd;
769
770         lock_buffer(bh);
771         gfs2_log_lock(sdp);
772         clear_buffer_dirty(bh);
773         bd = bh->b_private;
774         if (bd) {
775                 if (!list_empty(&bd->bd_list) && !buffer_pinned(bh))
776                         list_del_init(&bd->bd_list);
777                 else
778                         gfs2_remove_from_journal(bh, REMOVE_JDATA);
779         }
780         bh->b_bdev = NULL;
781         clear_buffer_mapped(bh);
782         clear_buffer_req(bh);
783         clear_buffer_new(bh);
784         gfs2_log_unlock(sdp);
785         unlock_buffer(bh);
786 }
787
788 static void gfs2_invalidatepage(struct page *page, unsigned int offset,
789                                 unsigned int length)
790 {
791         struct gfs2_sbd *sdp = GFS2_SB(page->mapping->host);
792         unsigned int stop = offset + length;
793         int partial_page = (offset || length < PAGE_SIZE);
794         struct buffer_head *bh, *head;
795         unsigned long pos = 0;
796
797         BUG_ON(!PageLocked(page));
798         if (!partial_page)
799                 ClearPageChecked(page);
800         if (!page_has_buffers(page))
801                 goto out;
802
803         bh = head = page_buffers(page);
804         do {
805                 if (pos + bh->b_size > stop)
806                         return;
807
808                 if (offset <= pos)
809                         gfs2_discard(sdp, bh);
810                 pos += bh->b_size;
811                 bh = bh->b_this_page;
812         } while (bh != head);
813 out:
814         if (!partial_page)
815                 try_to_release_page(page, 0);
816 }
817
818 /**
819  * gfs2_releasepage - free the metadata associated with a page
820  * @page: the page that's being released
821  * @gfp_mask: passed from Linux VFS, ignored by us
822  *
823  * Calls try_to_free_buffers() to free the buffers and put the page if the
824  * buffers can be released.
825  *
826  * Returns: 1 if the page was put or else 0
827  */
828
829 int gfs2_releasepage(struct page *page, gfp_t gfp_mask)
830 {
831         struct address_space *mapping = page->mapping;
832         struct gfs2_sbd *sdp = gfs2_mapping2sbd(mapping);
833         struct buffer_head *bh, *head;
834         struct gfs2_bufdata *bd;
835
836         if (!page_has_buffers(page))
837                 return 0;
838
839         /*
840          * From xfs_vm_releasepage: mm accommodates an old ext3 case where
841          * clean pages might not have had the dirty bit cleared.  Thus, it can
842          * send actual dirty pages to ->releasepage() via shrink_active_list().
843          *
844          * As a workaround, we skip pages that contain dirty buffers below.
845          * Once ->releasepage isn't called on dirty pages anymore, we can warn
846          * on dirty buffers like we used to here again.
847          */
848
849         gfs2_log_lock(sdp);
850         spin_lock(&sdp->sd_ail_lock);
851         head = bh = page_buffers(page);
852         do {
853                 if (atomic_read(&bh->b_count))
854                         goto cannot_release;
855                 bd = bh->b_private;
856                 if (bd && bd->bd_tr)
857                         goto cannot_release;
858                 if (buffer_dirty(bh) || WARN_ON(buffer_pinned(bh)))
859                         goto cannot_release;
860                 bh = bh->b_this_page;
861         } while(bh != head);
862         spin_unlock(&sdp->sd_ail_lock);
863
864         head = bh = page_buffers(page);
865         do {
866                 bd = bh->b_private;
867                 if (bd) {
868                         gfs2_assert_warn(sdp, bd->bd_bh == bh);
869                         if (!list_empty(&bd->bd_list))
870                                 list_del_init(&bd->bd_list);
871                         bd->bd_bh = NULL;
872                         bh->b_private = NULL;
873                         kmem_cache_free(gfs2_bufdata_cachep, bd);
874                 }
875
876                 bh = bh->b_this_page;
877         } while (bh != head);
878         gfs2_log_unlock(sdp);
879
880         return try_to_free_buffers(page);
881
882 cannot_release:
883         spin_unlock(&sdp->sd_ail_lock);
884         gfs2_log_unlock(sdp);
885         return 0;
886 }
887
888 static const struct address_space_operations gfs2_writeback_aops = {
889         .writepage = gfs2_writepage,
890         .writepages = gfs2_writepages,
891         .readpage = gfs2_readpage,
892         .readpages = gfs2_readpages,
893         .bmap = gfs2_bmap,
894         .invalidatepage = gfs2_invalidatepage,
895         .releasepage = gfs2_releasepage,
896         .direct_IO = noop_direct_IO,
897         .migratepage = buffer_migrate_page,
898         .is_partially_uptodate = block_is_partially_uptodate,
899         .error_remove_page = generic_error_remove_page,
900 };
901
902 static const struct address_space_operations gfs2_ordered_aops = {
903         .writepage = gfs2_writepage,
904         .writepages = gfs2_writepages,
905         .readpage = gfs2_readpage,
906         .readpages = gfs2_readpages,
907         .set_page_dirty = __set_page_dirty_buffers,
908         .bmap = gfs2_bmap,
909         .invalidatepage = gfs2_invalidatepage,
910         .releasepage = gfs2_releasepage,
911         .direct_IO = noop_direct_IO,
912         .migratepage = buffer_migrate_page,
913         .is_partially_uptodate = block_is_partially_uptodate,
914         .error_remove_page = generic_error_remove_page,
915 };
916
917 static const struct address_space_operations gfs2_jdata_aops = {
918         .writepage = gfs2_jdata_writepage,
919         .writepages = gfs2_jdata_writepages,
920         .readpage = gfs2_readpage,
921         .readpages = gfs2_readpages,
922         .set_page_dirty = jdata_set_page_dirty,
923         .bmap = gfs2_bmap,
924         .invalidatepage = gfs2_invalidatepage,
925         .releasepage = gfs2_releasepage,
926         .is_partially_uptodate = block_is_partially_uptodate,
927         .error_remove_page = generic_error_remove_page,
928 };
929
930 void gfs2_set_aops(struct inode *inode)
931 {
932         struct gfs2_inode *ip = GFS2_I(inode);
933         struct gfs2_sbd *sdp = GFS2_SB(inode);
934
935         if (gfs2_is_jdata(ip))
936                 inode->i_mapping->a_ops = &gfs2_jdata_aops;
937         else if (gfs2_is_writeback(sdp))
938                 inode->i_mapping->a_ops = &gfs2_writeback_aops;
939         else if (gfs2_is_ordered(sdp))
940                 inode->i_mapping->a_ops = &gfs2_ordered_aops;
941         else
942                 BUG();
943 }