file.c (1cf7a1518aefa69ac6ba0c3f9206073e4221e3c8) | file.c (13524ab3c6f41bcd257d28644414297bea8282b7) |
---|---|
1/* AFS filesystem file handling 2 * 3 * Copyright (C) 2002, 2007 Red Hat, Inc. All Rights Reserved. 4 * Written by David Howells (dhowells@redhat.com) 5 * 6 * This program is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU General Public License 8 * as published by the Free Software Foundation; either version --- 569 unchanged lines hidden (view full) --- 578/* 579 * invalidate part or all of a page 580 * - release a page and clean up its private data if offset is 0 (indicating 581 * the entire page) 582 */ 583static void afs_invalidatepage(struct page *page, unsigned int offset, 584 unsigned int length) 585{ | 1/* AFS filesystem file handling 2 * 3 * Copyright (C) 2002, 2007 Red Hat, Inc. All Rights Reserved. 4 * Written by David Howells (dhowells@redhat.com) 5 * 6 * This program is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU General Public License 8 * as published by the Free Software Foundation; either version --- 569 unchanged lines hidden (view full) --- 578/* 579 * invalidate part or all of a page 580 * - release a page and clean up its private data if offset is 0 (indicating 581 * the entire page) 582 */ 583static void afs_invalidatepage(struct page *page, unsigned int offset, 584 unsigned int length) 585{ |
586 struct afs_vnode *vnode = AFS_FS_I(page->mapping->host); 587 unsigned long priv; 588 |
|
586 _enter("{%lu},%u,%u", page->index, offset, length); 587 588 BUG_ON(!PageLocked(page)); 589 590 /* we clean up only if the entire page is being invalidated */ 591 if (offset == 0 && length == PAGE_SIZE) { 592#ifdef CONFIG_AFS_FSCACHE 593 if (PageFsCache(page)) { 594 struct afs_vnode *vnode = AFS_FS_I(page->mapping->host); 595 fscache_wait_on_page_write(vnode->cache, page); 596 fscache_uncache_page(vnode->cache, page); 597 } 598#endif 599 600 if (PagePrivate(page)) { | 589 _enter("{%lu},%u,%u", page->index, offset, length); 590 591 BUG_ON(!PageLocked(page)); 592 593 /* we clean up only if the entire page is being invalidated */ 594 if (offset == 0 && length == PAGE_SIZE) { 595#ifdef CONFIG_AFS_FSCACHE 596 if (PageFsCache(page)) { 597 struct afs_vnode *vnode = AFS_FS_I(page->mapping->host); 598 fscache_wait_on_page_write(vnode->cache, page); 599 fscache_uncache_page(vnode->cache, page); 600 } 601#endif 602 603 if (PagePrivate(page)) { |
604 priv = page_private(page); 605 trace_afs_page_dirty(vnode, tracepoint_string("inval"), 606 page->index, priv); |
|
601 set_page_private(page, 0); 602 ClearPagePrivate(page); 603 } 604 } 605 606 _leave(""); 607} 608 609/* 610 * release a page and clean up its private state if it's not busy 611 * - return true if the page can now be released, false if not 612 */ 613static int afs_releasepage(struct page *page, gfp_t gfp_flags) 614{ 615 struct afs_vnode *vnode = AFS_FS_I(page->mapping->host); | 607 set_page_private(page, 0); 608 ClearPagePrivate(page); 609 } 610 } 611 612 _leave(""); 613} 614 615/* 616 * release a page and clean up its private state if it's not busy 617 * - return true if the page can now be released, false if not 618 */ 619static int afs_releasepage(struct page *page, gfp_t gfp_flags) 620{ 621 struct afs_vnode *vnode = AFS_FS_I(page->mapping->host); |
622 unsigned long priv; |
|
616 617 _enter("{{%x:%u}[%lu],%lx},%x", 618 vnode->fid.vid, vnode->fid.vnode, page->index, page->flags, 619 gfp_flags); 620 621 /* deny if page is being written to the cache and the caller hasn't 622 * elected to wait */ 623#ifdef CONFIG_AFS_FSCACHE 624 if (!fscache_maybe_release_page(vnode->cache, page, gfp_flags)) { 625 _leave(" = F [cache busy]"); 626 return 0; 627 } 628#endif 629 630 if (PagePrivate(page)) { | 623 624 _enter("{{%x:%u}[%lu],%lx},%x", 625 vnode->fid.vid, vnode->fid.vnode, page->index, page->flags, 626 gfp_flags); 627 628 /* deny if page is being written to the cache and the caller hasn't 629 * elected to wait */ 630#ifdef CONFIG_AFS_FSCACHE 631 if (!fscache_maybe_release_page(vnode->cache, page, gfp_flags)) { 632 _leave(" = F [cache busy]"); 633 return 0; 634 } 635#endif 636 637 if (PagePrivate(page)) { |
638 priv = page_private(page); 639 trace_afs_page_dirty(vnode, tracepoint_string("rel"), 640 page->index, priv); |
|
631 set_page_private(page, 0); 632 ClearPagePrivate(page); 633 } 634 635 /* indicate that the page can be released */ 636 _leave(" = T"); 637 return 1; 638} --- 13 unchanged lines hidden --- | 641 set_page_private(page, 0); 642 ClearPagePrivate(page); 643 } 644 645 /* indicate that the page can be released */ 646 _leave(" = T"); 647 return 1; 648} --- 13 unchanged lines hidden --- |