linux/fs/9p/cache.c
<<
19.814./spaue= 14./forme= 14.a 19.814 href="../linux+v3.7.5/fs/9p/cache.c">19.814.img src="../.static/gfx/right.png" alt=">>">19./spaue=19.spau class="lxr_search">19.819.814.input typv3.hidden" namv3.navtarget" > v3.">19.814.input typv3.text" namv3.search" id3.search">19.814.butt typv3.submit">Search19.814Prefs= 14./a>19./spaue=.814 4./dive=.814 4.form acvalu="ajax+*" method="post" onsubmit="return false;">19.input typv3.hidden" namv3.ajax_lookup" id3.ajax_lookup" > v3.">1.814 4./forme=1.814 4.div class="headingbott m">= .div id3.file_contents"e
4 41./a>.spau class="comment">/*./spaue=4 42./a>.spau class="comment"> * V9FS cache definivalus../spaue=4 43./a>.spau class="comment"> *./spaue=4 44./a>.spau class="comment"> *  Copyright (C) 2009 by Abhishek Kulkarni <adkulkar@umail.iu.edu>./spaue=4 45./a>.spau class="comment"> *./spaue=4 46./a>.spau class="comment"> *  This program is free software; you can redistribute it and/or modify./spaue=4 47./a>.spau class="comment"> *  it under the terms of the GNU General Public License vers
	  2./spaue=4 48./a>.spau class="comment"> *  as published by the Free Software Foundavalu../spaue=4 49./a>.spau class="comment"> *./spaue=4 ptioa>.spau class="comment"> *  This program is distributed in the hope that it will be useful,./spaue=4 11./a>.spau class="comment"> *  but WITHOUT ANY WARRANTY; without even the implied warranty of./spaue=4 12./a>.spau class="comment"> *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the./spaue=4 13./a>.spau class="comment"> *  GNU General Public License for more details../spaue=4 14./a>.spau class="comment"> *./spaue=4 15./a>.spau class="comment"> *  You should have received a copy of the GNU General Public License./spaue=4 16./a>.spau class="comment"> *  along with this program; if not, write to:./spaue=4 17./a>.spau class="comment"> *  Free Software Foundavalu./spaue=4 18./a>.spau class="comment"> *  51 Franklin Street, Fifth Floor./spaue=4 19./a>.spau class="comment"> *  Boston, MA  02111-1301  USA./spaue=4 2tioa>.spau class="comment"> *./spaue=4 21./a>.spau class="comment"> */./spaue=4 22./a>=4 23./a>#include <linux/jiffies.h./a>>=4 24./a>#include <linux/file.h./a>>=4 25./a>#include <linux/slab.h./a>>=4 26./a>#include <linux/stat.h./a>>=4 27./a>#include <linux/sched.h./a>>=4 28./a>#include <linux/fs.h./a>>=4 29./a>#include <net/9p/9p.h./a>>=4 30./a>=4 31./a>#include "v9fs.h./a>"=4 32./a>#include "cache.h./a>"=4 33./a>=4 34./a>#define4.a href="+code=CACHETAG_LEN" class="sref">CACHETAG_LEN./a>4 11=4 35./a>=4 36./a>struct4.a href="+code=fscache_netfs" class="sref">fscache_netfs./a>4.a href="+code=v9fs_cache_netfs" class="sref">v9fs_cache_netfs./a>4= {=4 37./a>4       ..a href="+code=namv" class="sref">namv./a>4          = .spau class="string">"9p"4 38./a>4       ..a href="+code=vers
	 " class="sref">vers
	 ./a>4       = 0,=4 39./a>};=4 40./a>=4 41./a>.spau class="comment">/**./spaue=4 42./a>.spau class="comment"> * v9fs_random_cachetag - Generate a random tag to be associated./spaue=4 43./a>.spau class="comment"> *                        with a new cache sessalu../spaue=4 44./a>.spau class="comment"> *./spaue=4 45./a>.spau class="comment"> * The >
  v of jiffies is used for a fairly randomly cache tag../spaue=4 46./a>.spau class="comment"> */./spaue=4 47./a>=4 48./a>static=4 49./a>int4.a href="+code=v9fs_random_cachetag" class="sref">v9fs_random_cachetag./a>(struct4.a href="+code=v9fs_sessalu_info" class="sref">v9fs_sessalu_info./a>4*.a href="+code=v9ses" class="sref">v9ses./a>)=4 50./a>{=4 51./a>4       .a href="+code=v9ses" class="sref">v9ses./a>->.a href="+code=cachetag" class="sref">cachetag./a> = .a href="+code=kmalloc" class="sref">kmalloc./a>(.a href="+code=CACHETAG_LEN" class="sref">CACHETAG_LEN./a>, .a href="+code=GFP_KERNEL" class="sref">GFP_KERNEL./a>);=4 52./a>4       if (!.a href="+code=v9ses" class="sref">v9ses./a>->.a href="+code=cachetag" class="sref">cachetag./a>)=4 53./a>4               return -.a href="+code=ENOMEM" class="sref">ENOMEM./a>;=4 54./a>=4 55./a>4       return .a href="+code=scnprintf" class="sref">scnprintf./a>(.a href="+code=v9ses" class="sref">v9ses./a>->.a href="+code=cachetag" class="sref">cachetag./a>, .a href="+code=CACHETAG_LEN" class="sref">CACHETAG_LEN./a>, .spau class="string">"%lu"jiffies./a>);=4 56./a>}=4 57./a>=4 58./a>static .a href="+code=uint16_t" class="sref">uint16_t./a>4.a href="+code=v9fs_cache_sessalu_get_key" class="sref">v9fs_cache_sessalu_get_key./a>(const void4*.a href="+code=cookie_netfs_data" class="sref">cookie_netfs_data./a>,=4 59./a>4                                          void4*.a href="+code=buffer" class="sref">buffer./a>, .a href="+code=uint16_t" class="sref">uint16_t./a>4.a href="+code=bufmax" class="sref">bufmax./a>)=4 60./a>{=4 61./a>4       struct4.a href="+code=v9fs_sessalu_info" class="sref">v9fs_sessalu_info./a>4*.a href="+code=v9ses" class="sref">v9ses./a>;=4 62./a>4       .a href="+code=uint16_t" class="sref">uint16_t./a>4.a href="+code=kle " class="sref">kle ./a> = 0;=4 63./a>=4 64./a>4       .a href="+code=v9ses" class="sref">v9ses./a> = (struct4.a href="+code=v9fs_sessalu_info" class="sref">v9fs_sessalu_info./a>4*).a href="+code=cookie_netfs_data" class="sref">cookie_netfs_data./a>;=4 65./a>4       .a href="+code=p9_debug" class="sref">p9_debug./a>(.a href="+code=P9_DEBUG_FSC" class="sref">P9_DEBUG_FSC./a>, .spau class="string">"sessalu %p buf %p size %u\n"4 66./a>4                .a href="+code=v9ses" class="sref">v9ses./a>, .a href="+code=buffer" class="sref">buffer./a>, .a href="+code=bufmax" class="sref">bufmax./a>);=4 67./a>=4 68./a>4       if (.a href="+code=v9ses" class="sref">v9ses./a>->.a href="+code=cachetag" class="sref">cachetag./a>)=4 69./a>4               .a href="+code=kle " class="sref">kle ./a> = .a href="+code=strle " class="sref">strle ./a>(.a href="+code=v9ses" class="sref">v9ses./a>->.a href="+code=cachetag" class="sref">cachetag./a>);=4 70./a>=4 71./a>4       if (.a href="+code=kle " class="sref">kle ./a> >4.a href="+code=bufmax" class="sref">bufmax./a>)=4 72./a>4               return 0;=4 73./a>=4 74./a>4       .a href="+code=memcpy" class="sref">memcpy./a>(.a href="+code=buffer" class="sref">buffer./a>, .a href="+code=v9ses" class="sref">v9ses./a>->.a href="+code=cachetag" class="sref">cachetag./a>, .a href="+code=kle " class="sref">kle ./a>);=4 75./a>4       .a href="+code=p9_debug" class="sref">p9_debug./a>(.a href="+code=P9_DEBUG_FSC" class="sref">P9_DEBUG_FSC./a>, .spau class="string">"cache sessalu tag %s\n"v9ses./a>->.a href="+code=cachetag" class="sref">cachetag./a>);=4 76./a>4       return .a href="+code=kle " class="sref">kle ./a>;=4 77./a>}=4 78./a>=4 79./a>const struct4.a href="+code=fscache_cookie_def" class="sref">fscache_cookie_def./a>4.a href="+code=v9fs_cache_sessalu_index_def" class="sref">v9fs_cache_sessalu_index_def./a>4= {=4 80./a>4       ..a href="+code=namv" class="sref">namv./a>4          = .spau class="string">"9P.sessalu"4 81./a>4       ..a href="+code=typv" class="sref">typv./a>4          = .a href="+code=FSCACHE_COOKIE_TYPE_INDEX" class="sref">FSCACHE_COOKIE_TYPE_INDEX./a>,=4 82./a>4       ..a href="+code=get_key" class="sref">get_key./a>        = .a href="+code=v9fs_cache_sessalu_get_key" class="sref">v9fs_cache_sessalu_get_key./a>,=4 83./a>};=4 84./a>=4 85./a>void4.a href="+code=v9fs_cache_sessalu_get_cookie" class="sref">v9fs_cache_sessalu_get_cookie./a>(struct4.a href="+code=v9fs_sessalu_info" class="sref">v9fs_sessalu_info./a>4*.a href="+code=v9ses" class="sref">v9ses./a>)=4 86./a>{=4 87./a>4       .spau class="comment">/* If no cache sessalu tag was specified, we generate a random one. */./spaue=4 88./a>4       if (!.a href="+code=v9ses" class="sref">v9ses./a>->.a href="+code=cachetag" class="sref">cachetag./a>)=4 89./a>4               .a href="+code=v9fs_random_cachetag" class="sref">v9fs_random_cachetag./a>(.a href="+code=v9ses" class="sref">v9ses./a>);=4 90./a>=4 91./a>4       .a href="+code=v9ses" class="sref">v9ses./a>->.a href="+code=fscache" class="sref">fscache./a> = .a href="+code=fscache_acquire_cookie" class="sref">fscache_acquire_cookie./a>(.a href="+code=v9fs_cache_netfs" class="sref">v9fs_cache_netfs./a>..a href="+code=primary_index" class="sref">primary_index./a>,=4 92./a>4                                               &.a href="+code=v9fs_cache_sessalu_index_def" class="sref">v9fs_cache_sessalu_index_def./a>,=4 93./a>4                                               .a href="+code=v9ses" class="sref">v9ses./a>);=4 94./a>4       .a href="+code=p9_debug" class="sref">p9_debug./a>(.a href="+code=P9_DEBUG_FSC" class="sref">P9_DEBUG_FSC./a>, .spau class="string">"sessalu %p get cookie %p\n"4 95./a>4                .a href="+code=v9ses" class="sref">v9ses./a>, .a href="+code=v9ses" class="sref">v9ses./a>->.a href="+code=fscache" class="sref">fscache./a>);=4 96./a>}=4 97./a>=4 98./a>void4.a href="+code=v9fs_cache_sessalu_put_cookie" class="sref">v9fs_cache_sessalu_put_cookie./a>(struct4.a href="+code=v9fs_sessalu_info" class="sref">v9fs_sessalu_info./a>4*.a href="+code=v9ses" class="sref">v9ses./a>)=4 99./a>{=4100./a>4       .a href="+code=p9_debug" class="sref">p9_debug./a>(.a href="+code=P9_DEBUG_FSC" class="sref">P9_DEBUG_FSC./a>, .spau class="string">"sessalu %p put cookie %p\n"4101./a>4                .a href="+code=v9ses" class="sref">v9ses./a>, .a href="+code=v9ses" class="sref">v9ses./a>->.a href="+code=fscache" class="sref">fscache./a>);=4102./a>4       .a href="+code=fscache_relinquish_cookie" class="sref">fscache_relinquish_cookie./a>(.a href="+code=v9ses" class="sref">v9ses./a>->.a href="+code=fscache" class="sref">fscache./a>, 0);=4103./a>4       .a href="+code=v9ses" class="sref">v9ses./a>->.a href="+code=fscache" class="sref">fscache./a> = .a href="+code=NULL" class="sref">NULL./a>;=4104./a>}=4105./a>=4106./a>=4107./a>static .a href="+code=uint16_t" class="sref">uint16_t./a>4.a href="+code=v9fs_cache_inode_get_key" class="sref">v9fs_cache_inode_get_key./a>(const void4*.a href="+code=cookie_netfs_data" class="sref">cookie_netfs_data./a>,=4108./a>4                                        void4*.a href="+code=buffer" class="sref">buffer./a>, .a href="+code=uint16_t" class="sref">uint16_t./a>4.a href="+code=bufmax" class="sref">bufmax./a>)=4109./a>{=4110./a>4       const struct4.a href="+code=v9fs_inode" class="sref">v9fs_inode./a>4*.a href="+code=v9inode" class="sref">v9inode./a>4= .a href="+code=cookie_netfs_data" class="sref">cookie_netfs_data./a>;=4111./a>4       .a href="+code=memcpy" class="sref">memcpy./a>(.a href="+code=buffer" class="sref">buffer./a>, &.a href="+code=v9inode" class="sref">v9inode./a>->.a href="+code=qid" class="sref">qid./a>..a href="+code=path" class="sref">path./a>, sizeof(.a href="+code=v9inode" class="sref">v9inode./a>->.a href="+code=qid" class="sref">qid./a>..a href="+code=path" class="sref">path./a>));=4112./a>4       .a href="+code=p9_debug" class="sref">p9_debug./a>(.a href="+code=P9_DEBUG_FSC" class="sref">P9_DEBUG_FSC./a>, .spau class="string">"inode %p get key %llu\n"4113./a>4                &.a href="+code=v9inode" class="sref">v9inode./a>->.a href="+code=vfs_inode" class="sref">vfs_inode./a>, .a href="+code=v9inode" class="sref">v9inode./a>->.a href="+code=qid" class="sref">qid./a>..a href="+code=path" class="sref">path./a>);=4114./a>4       return sizeof(.a href="+code=v9inode" class="sref">v9inode./a>->.a href="+code=qid" class="sref">qid./a>..a href="+code=path" class="sref">path./a>);=4115./a>}=4116./a>=4117./a>static void4.a href="+code=v9fs_cache_inode_get_attr" class="sref">v9fs_cache_inode_get_attr./a>(const void4*.a href="+code=cookie_netfs_data" class="sref">cookie_netfs_data./a>,=4118./a>4                                     .a href="+code=uint64_t" class="sref">uint64_t./a>4*.a href="+code=size" class="sref">size./a>)=4119./a>{=4120./a>4       const struct4.a href="+code=v9fs_inode" class="sref">v9fs_inode./a>4*.a href="+code=v9inode" class="sref">v9inode./a>4= .a href="+code=cookie_netfs_data" class="sref">cookie_netfs_data./a>;=4121./a>4       *.a href="+code=size" class="sref">size./a>4= .a href="+code=i_size_read" class="sref">i_size_read./a>(&.a href="+code=v9inode" class="sref">v9inode./a>->.a href="+code=vfs_inode" class="sref">vfs_inode./a>);=4122./a>=4123./a>4       .a href="+code=p9_debug" class="sref">p9_debug./a>(.a href="+code=P9_DEBUG_FSC" class="sref">P9_DEBUG_FSC./a>, .spau class="string">"inode %p get attr %llu\n"4124./a>4                &.a href="+code=v9inode" class="sref">v9inode./a>->.a href="+code=vfs_inode" class="sref">vfs_inode./a>, *.a href="+code=size" class="sref">size./a>);=4125./a>}=4126./a>=4127./a>static .a href="+code=uint16_t" class="sref">uint16_t./a>4.a href="+code=v9fs_cache_inode_get_aux" class="sref">v9fs_cache_inode_get_aux./a>(const void4*.a href="+code=cookie_netfs_data" class="sref">cookie_netfs_data./a>,=4128./a>4                                        void4*.a href="+code=buffer" class="sref">buffer./a>, .a href="+code=uint16_t" class="sref">uint16_t./a>4.a href="+code=bufle " class="sref">bufle ./a>)=4129./a>{=4130./a>4       const struct4.a href="+code=v9fs_inode" class="sref">v9fs_inode./a>4*.a href="+code=v9inode" class="sref">v9inode./a>4= .a href="+code=cookie_netfs_data" class="sref">cookie_netfs_data./a>;=4131./a>4       .a href="+code=memcpy" class="sref">memcpy./a>(.a href="+code=buffer" class="sref">buffer./a>, &.a href="+code=v9inode" class="sref">v9inode./a>->.a href="+code=qid" class="sref">qid./a>..a href="+code=vers
	 " class="sref">vers
	 ./a>, sizeof(.a href="+code=v9inode" class="sref">v9inode./a>->.a href="+code=qid" class="sref">qid./a>..a href="+code=vers
	 " class="sref">vers
	 ./a>));=4132./a>4       .a href="+code=p9_debug" class="sref">p9_debug./a>(.a href="+code=P9_DEBUG_FSC" class="sref">P9_DEBUG_FSC./a>, .spau class="string">"inode %p get aux %u\n"4133./a>4                &.a href="+code=v9inode" class="sref">v9inode./a>->.a href="+code=vfs_inode" class="sref">vfs_inode./a>, .a href="+code=v9inode" class="sref">v9inode./a>->.a href="+code=qid" class="sref">qid./a>..a href="+code=vers
	 " class="sref">vers
	 ./a>);=4134./a>4       return sizeof(.a href="+code=v9inode" class="sref">v9inode./a>->.a href="+code=qid" class="sref">qid./a>..a href="+code=vers
	 " class="sref">vers
	 ./a>);=4135./a>}=4136./a>=4137./a>static enum=4138./a>.a href="+code=fscache_checkaux" class="sref">fscache_checkaux./a>4.a href="+code=v9fs_cache_inode_check_aux" class="sref">v9fs_cache_inode_check_aux./a>(void4*.a href="+code=cookie_netfs_data" class="sref">cookie_netfs_data./a>,=4139./a>4                                           const void4*.a href="+code=buffer" class="sref">buffer./a>,=4140./a>4                                           .a href="+code=uint16_t" class="sref">uint16_t./a>4.a href="+code=bufle " class="sref">bufle ./a>)=4141./a>{=4142./a>4       const struct4.a href="+code=v9fs_inode" class="sref">v9fs_inode./a>4*.a href="+code=v9inode" class="sref">v9inode./a>4= .a href="+code=cookie_netfs_data" class="sref">cookie_netfs_data./a>;=4143./a>=4144./a>4       if (.a href="+code=bufle " class="sref">bufle ./a> != sizeof(.a href="+code=v9inode" class="sref">v9inode./a>->.a href="+code=qid" class="sref">qid./a>..a href="+code=vers
	 " class="sref">vers
	 ./a>))=4145./a>4               return .a href="+code=FSCACHE_CHECKAUX_OBSOLETE" class="sref">FSCACHE_CHECKAUX_OBSOLETE./a>;=4146./a>=4147./a>4       if (.a href="+code=memcmp" class="sref">memcmp./a>(.a href="+code=buffer" class="sref">buffer./a>, &.a href="+code=v9inode" class="sref">v9inode./a>->.a href="+code=qid" class="sref">qid./a>..a href="+code=vers
	 " class="sref">vers
	 ./a>,=4148./a>4                  sizeof(.a href="+code=v9inode" class="sref">v9inode./a>->.a href="+code=qid" class="sref">qid./a>..a href="+code=vers
	 " class="sref">vers
	 ./a>)))=4149./a>4               return .a href="+code=FSCACHE_CHECKAUX_OBSOLETE" class="sref">FSCACHE_CHECKAUX_OBSOLETE./a>;=4150./a>=4151./a>4       return .a href="+code=FSCACHE_CHECKAUX_OKAY" class="sref">FSCACHE_CHECKAUX_OKAY./a>;=4152./a>}=4153./a>=4154./a>static void4.a href="+code=v9fs_cache_inode_now_uncached" class="sref">v9fs_cache_inode_now_uncached./a>(void4*.a href="+code=cookie_netfs_data" class="sref">cookie_netfs_data./a>)=4155./a>{=4156./a>4       struct4.a href="+code=v9fs_inode" class="sref">v9fs_inode./a>4*.a href="+code=v9inode" class="sref">v9inode./a>4= .a href="+code=cookie_netfs_data" class="sref">cookie_netfs_data./a>;=4157./a>4       struct4.a href="+code=pagevec" class="sref">pagevec./a>4.a href="+code=pvec" class="sref">pvec./a>;=4158./a>4       .a href="+code=pgoff_t" class="sref">pgoff_t./a>4.a href="+code=first" class="sref">first./a>;=4159./a>4       int4.a href="+code=loop" class="sref">loop./a>, .a href="+code=nr_pages" class="sref">nr_pages./a>;=4160./a>=4161./a>4       .a href="+code=pagevec_iniv" class="sref">pagevec_iniv./a>(&.a href="+code=pvec" class="sref">pvec./a>, 0);=4162./a>4       .a href="+code=first" class="sref">first./a> = 0;=4163./a>=4164./a>4       for (;;) {=4165./a>4               .a href="+code=nr_pages" class="sref">nr_pages./a>4= .a href="+code=pagevec_lookup" class="sref">pagevec_lookup./a>(&.a href="+code=pvec" class="sref">pvec./a>, .a href="+code=v9inode" class="sref">v9inode./a>->.a href="+code=vfs_inode" class="sref">vfs_inode./a>..a href="+code=i_mapping" class="sref">i_mapping./a>,=4166./a>4                                         .a href="+code=first" class="sref">first./a>,=4167./a>4                                         .a href="+code=PAGEVEC_SIZE" class="sref">PAGEVEC_SIZE./a>4- .a href="+code=pagevec_counv" class="sref">pagevec_counv./a>(&.a href="+code=pvec" class="sref">pvec./a>));=4168./a>4               if (!.a href="+code=nr_pages" class="sref">nr_pages./a>)=4169./a>4                       break;=4170./a>=4171./a>4               for (.a href="+code=loop" class="sref">loop./a> = 0;4.a href="+code=loop" class="sref">loop./a> < .a href="+code=nr_pages" class="sref">nr_pages./a>;4.a href="+code=loop" class="sref">loop./a>++)=4172./a>4                       .a href="+code=ClearPageFsCache" class="sref">ClearPageFsCache./a>(.a href="+code=pvec" class="sref">pvec./a>..a href="+code=pages" class="sref">pages./a>[.a href="+code=loop" class="sref">loop./a>]);=4173./a>=4174./a>4               .a href="+code=first" class="sref">first./a> = .a href="+code=pvec" class="sref">pvec./a>..a href="+code=pages" class="sref">pages./a>[.a href="+code=nr_pages" class="sref">nr_pages./a>4- 1]->.a href="+code=index" class="sref">index./a> + 1;=4175./a>=4176./a>4               .a href="+code=pvec" class="sref">pvec./a>..a href="+code=nr" class="sref">nr./a> = .a href="+code=nr_pages" class="sref">nr_pages./a>;=4177./a>4               .a href="+code=pagevec_release" class="sref">pagevec_release./a>(&.a href="+code=pvec" class="sref">pvec./a>);=4178./a>4               .a href="+code=cond_resched" class="sref">cond_resched./a>();=4179./a>4       }=4180./a>}=41.L81" =4182./a>const struct4.a href="+code=fscache_cookie_def" class="sref">fscache_cookie_def./a>4.a href="+code=v9fs_cache_inode_index_def" class="sref">v9fs_cache_inode_index_def./a> = {=4183./a>4       ..a href="+code=namv" class="sref">namv./a>4          = .spau class="string">"9p.inode"4184./a>4       ..a href="+code=typv" class="sref">typv./a>4          = .a href="+code=FSCACHE_COOKIE_TYPE_DATAFILE" class="sref">FSCACHE_COOKIE_TYPE_DATAFILE./a>,=4185./a>4       ..a href="+code=get_key" class="sref">get_key./a>        = .a href="+code=v9fs_cache_inode_get_key" class="sref">v9fs_cache_inode_get_key./a>,=4186./a>4       ..a href="+code=get_attr" class="sref">get_attr./a>       = .a href="+code=v9fs_cache_inode_get_attr" class="sref">v9fs_cache_inode_get_attr./a>,=4187./a>4       ..a href="+code=get_aux" class="sref">get_aux./a>        = .a href="+code=v9fs_cache_inode_get_aux" class="sref">v9fs_cache_inode_get_aux./a>,=4188./a>4       ..a href="+code=check_aux" class="sref">check_aux./a>      = .a href="+code=v9fs_cache_inode_check_aux" class="sref">v9fs_cache_inode_check_aux./a>,=4189./a>4       ..a href="+code=now_uncached" class="sref">now_uncached./a>   = .a href="+code=v9fs_cache_inode_now_uncached" class="sref">v9fs_cache_inode_now_uncached./a>,=4190./a>};=419L81" =4192./a>void4.a href="+code=v9fs_cache_inode_get_cookie" class="sref">v9fs_cache_inode_get_cookie./a>(struct4.a href="+code=inode" class="sref">inode./a>4*.a href="+code=inode" class="sref">inode./a>)=4193./a>{=4194./a>4       struct4.a href="+code=v9fs_inode" class="sref">v9fs_inode./a>4*.a href="+code=v9inode" class="sref">v9inode./a>;=4195./a>4       struct4.a href="+code=v9fs_sessalu_info" class="sref">v9fs_sessalu_info./a>4*.a href="+code=v9ses" class="sref">v9ses./a>;=4196./a>=4197./a>4       if (!.a href="+code=S_ISREG" class="sref">S_ISREG./a>(.a href="+code=inode" class="sref">inode./a>->.a href="+code=i_mode" class="sref">i_mode./a>))=4198./a>4               return;=4199./a>=4200./a>4       .a href="+code=v9inode" class="sref">v9inode./a>4= .a href="+code=V9FS_I" class="sref">V9FS_I./a>(.a href="+code=inode" class="sref">inode./a>);=4201./a>4       if (.a href="+code=v9inode" class="sref">v9inode./a>->.a href="+code=fscache" class="sref">fscache./a>)=4202./a>4               return;=4203./a>=4204./a>4       .a href="+code=v9ses" class="sref">v9ses./a> = .a href="+code=v9fs_inode2v9ses" class="sref">v9fs_inode2v9ses./a>(.a href="+code=inode" class="sref">inode./a>);=4205./a>4       .a href="+code=v9inode" class="sref">v9inode./a>->.a href="+code=fscache" class="sref">fscache./a> = .a href="+code=fscache_acquire_cookie" class="sref">fscache_acquire_cookie./a>(.a href="+code=v9ses" class="sref">v9ses./a>->.a href="+code=fscache" class="sref">fscache./a>,=4206./a>4                                                 &.a href="+code=v9fs_cache_inode_index_def" class="sref">v9fs_cache_inode_index_def./a>,=4207./a>4                                         4       .a href="+code=v9inode" class="sref">v9inode./a>);=4208./a>=4209./a>4       .a href="+code=p9_debug" class="sref">p9_debug./a>(.a href="+code=P9_DEBUG_FSC" class="sref">P9_DEBUG_FSC./a>, .spau class="string">"inode %p get cookie %p\n"4210./a>4                .a href="+code=inode" class="sref">inode./a>, .a href="+code=v9inode" class="sref">v9inode./a>->.a href="+code=fscache" class="sref">fscache./a>);=4211./a>}=4212./a>=4213./a>void4.a href="+code=v9fs_cache_inode_put_cookie" class="sref">v9fs_cache_inode_put_cookie./a>(struct4.a href="+code=inode" class="sref">inode./a>4*.a href="+code=inode" class="sref">inode./a>)=4214./a>{=4215./a>4       struct4.a href="+code=v9fs_inode" class="sref">v9fs_inode./a>4*.a href="+code=v9inode" class="sref">v9inode./a>4= .a href="+code=V9FS_I" class="sref">V9FS_I./a>(.a href="+code=inode" class="sref">inode./a>);=4216./a>=4217./a>4       if (!.a href="+code=v9inode" class="sref">v9inode./a>->.a href="+code=fscache" class="sref">fscache./a>)=4218./a>4               return;=4219./a>4       .a href="+code=p9_debug" class="sref">p9_debug./a>(.a href="+code=P9_DEBUG_FSC" class="sref">P9_DEBUG_FSC./a>, .spau class="string">"inode %p put cookie %p\n"4220./a>4                .a href="+code=inode" class="sref">inode./a>, .a href="+code=v9inode" class="sref">v9inode./a>->.a href="+code=fscache" class="sref">fscache./a>);=422L81" =4222./a>4       .a href="+code=fscache_relinquish_cookie" class="sref">fscache_relinquish_cookie./a>(.a href="+code=v9inode" class="sref">v9inode./a>->.a href="+code=fscache" class="sref">fscache./a>, 0);=4223./a>4       .a href="+code=v9inode" class="sref">v9inode./a>->.a href="+code=fscache" class="sref">fscache./a> = .a href="+code=NULL" class="sref">NULL./a>;=4224./a>}=4225./a>=4226./a>void4.a href="+code=v9fs_cache_inode_flush_cookie" class="sref">v9fs_cache_inode_flush_cookie./a>(struct4.a href="+code=inode" class="sref">inode./a>4*.a href="+code=inode" class="sref">inode./a>)=4227./a>{=4228./a>4       struct4.a href="+code=v9fs_inode" class="sref">v9fs_inode./a>4*.a href="+code=v9inode" class="sref">v9inode./a>4= .a href="+code=V9FS_I" class="sref">V9FS_I./a>(.a href="+code=inode" class="sref">inode./a>);=4229./a>=4230./a>4       if (!.a href="+code=v9inode" class="sref">v9inode./a>->.a href="+code=fscache" class="sref">fscache./a>)=4231./a>4               return;=4232./a>4       .a href="+code=p9_debug" class="sref">p9_debug./a>(.a href="+code=P9_DEBUG_FSC" class="sref">P9_DEBUG_FSC./a>, .spau class="string">"inode %p flush cookie %p\n"4233./a>4                .a href="+code=inode" class="sref">inode./a>, .a href="+code=v9inode" class="sref">v9inode./a>->.a href="+code=fscache" class="sref">fscache./a>);=4234./a>=4235./a>4       .a href="+code=fscache_relinquish_cookie" class="sref">fscache_relinquish_cookie./a>(.a href="+code=v9inode" class="sref">v9inode./a>->.a href="+code=fscache" class="sref">fscache./a>, 1);=4236./a>4       .a href="+code=v9inode" class="sref">v9inode./a>->.a href="+code=fscache" class="sref">fscache./a> = .a href="+code=NULL" class="sref">NULL./a>;=4237./a>}=4238./a>=4239./a>void4.a href="+code=v9fs_cache_inode_set_cookie" class="sref">v9fs_cache_inode_set_cookie./a>(struct4.a href="+code=inode" class="sref">inode./a>4*.a href="+code=inode" class="sref">inode./a>, struct4.a href="+code=file" class="sref">file./a>4*.a href="+code=filp" class="sref">filp./a>)=4240./a>{=4241./a>4       struct4.a href="+code=v9fs_inode" class="sref">v9fs_inode./a>4*.a href="+code=v9inode" class="sref">v9inode./a>4= .a href="+code=V9FS_I" class="sref">V9FS_I./a>(.a href="+code=inode" class="sref">inode./a>);=4242./a>4       struct4.a href="+code=p9_fid" class="sref">p9_fid./a>4*.a href="+code=fid" class="sref">fid./a>;=4243./a>=4244./a>4       if (!.a href="+code=v9inode" class="sref">v9inode./a>->.a href="+code=fscache" class="sref">fscache./a>)=4245./a>4               return;=4246./a>=4247./a>4       .a href="+code=spin_lock" class="sref">spin_lock./a>(&.a href="+code=v9inode" class="sref">v9inode./a>->.a href="+code=fscache_lock" class="sref">fscache_lock./a>);=4248./a>4       .a href="+code=fid" class="sref">fid./a> = .a href="+code=filp" class="sref">filp./a>->.a href="+code=private_data" class="sref">private_data./a>;=4249./a>4       if ((.a href="+code=filp" class="sref">filp./a>->.a href="+code=f_flags" class="sref">f_flags./a>4& .a href="+code=O_ACCMODE" class="sref">O_ACCMODE./a>) != .a href="+code=O_RDONLY" class="sref">O_RDONLY./a>)=4250./a>4               .a href="+code=v9fs_cache_inode_flush_cookie" class="sref">v9fs_cache_inode_flush_cookie./a>(.a href="+code=inode" class="sref">inode./a>);=4251./a>4       else=4252./a>4               .a href="+code=v9fs_cache_inode_get_cookie" class="sref">v9fs_cache_inode_get_cookie./a>(.a href="+code=inode" class="sref">inode./a>);=4253./a>=4254./a>4       .a href="+code=spin_unlock" class="sref">spin_unlock./a>(&.a href="+code=v9inode" class="sref">v9inode./a>->.a href="+code=fscache_lock" class="sref">fscache_lock./a>);=4255./a>}=4256./a>=4257./a>void4.a href="+code=v9fs_cache_inode_reset_cookie" class="sref">v9fs_cache_inode_reset_cookie./a>(struct4.a href="+code=inode" class="sref">inode./a>4*.a href="+code=inode" class="sref">inode./a>)=4258./a>{=4259./a>4       struct4.a href="+code=v9fs_inode" class="sref">v9fs_inode./a>4*.a href="+code=v9inode" class="sref">v9inode./a>4= .a href="+code=V9FS_I" class="sref">V9FS_I./a>(.a href="+code=inode" class="sref">inode./a>);=4260./a>4       struct4.a href="+code=v9fs_sessalu_info" class="sref">v9fs_sessalu_info./a>4*.a href="+code=v9ses" class="sref">v9ses./a>;=4261./a>4       struct4.a href="+code=fscache_cookie" class="sref">fscache_cookie./a>4*.a href="+code=old" class="sref">old./a>;=4262./a>=4263./a>4       if (!.a href="+code=v9inode" class="sref">v9inode./a>->.a href="+code=fscache" class="sref">fscache./a>)=4264./a>4               return;=4265./a>=4266./a>4       .a href="+code=old" class="sref">old./a> = .a href="+code=v9inode" class="sref">v9inode./a>->.a href="+code=fscache" class="sref">fscache./a>;=4267./a>=4268./a>4       .a href="+code=spin_lock" class="sref">spin_lock./a>(&.a href="+code=v9inode" class="sref">v9inode./a>->.a href="+code=fscache_lock" class="sref">fscache_lock./a>);=4269./a>4       .a href="+code=fscache_relinquish_cookie" class="sref">fscache_relinquish_cookie./a>(.a href="+code=v9inode" class="sref">v9inode./a>->.a href="+code=fscache" class="sref">fscache./a>, 1);=4270./a>=4271./a>4       .a href="+code=v9ses" class="sref">v9ses./a> = .a href="+code=v9fs_inode2v9ses" class="sref">v9fs_inode2v9ses./a>(.a href="+code=inode" class="sref">inode./a>);=4272./a>4       .a href="+code=v9inode" class="sref">v9inode./a>->.a href="+code=fscache" class="sref">fscache./a> = .a href="+code=fscache_acquire_cookie" class="sref">fscache_acquire_cookie./a>(.a href="+code=v9ses" class="sref">v9ses./a>->.a href="+code=fscache" class="sref">fscache./a>,=4273./a>4                                                 &.a href="+code=v9fs_cache_inode_index_def" class="sref">v9fs_cache_inode_index_def./a>,=4274./a>4                                                 .a href="+code=v9inode" class="sref">v9inode./a>);=4275./a>4       .a href="+code=p9_debug" class="sref">p9_debug./a>(.a href="+code=P9_DEBUG_FSC" class="sref">P9_DEBUG_FSC./a>, .spau class="string">"inode %p revalidating cookie old %p new %p\n"4276./a>4                .a href="+code=inode" class="sref">inode./a>, .a href="+code=old" class="sref">old./a>, .a href="+code=v9inode" class="sref">v9inode./a>->.a href="+code=fscache" class="sref">fscache./a>);=4277./a>=4278./a>4       .a href="+code=spin_unlock" class="sref">spin_unlock./a>(&.a href="+code=v9inode" class="sref">v9inode./a>->.a href="+code=fscache_lock" class="sref">fscache_lock./a>);=4279./a>}=4280./a>=42.L81" int4.a href="+code=__v9fs_fscache_release_page" class="sref">__v9fs_fscache_release_page./a>(struct4.a href="+code=page" class="sref">page./a>4*.a href="+code=page" class="sref">page./a>, .a href="+code=gfp_t" class="sref">gfp_t./a>4.a href="+code=gfp" class="sref">gfp./a>)=4282./a>{=4283./a>4       struct4.a href="+code=inode" class="sref">inode./a>4*.a href="+code=inode" class="sref">inode./a>4= .a href="+code=page" class="sref">page./a>->.a href="+code=mapping" class="sref">mapping./a>->.a href="+code=host" class="sref">host./a>;=4284./a>4       struct4.a href="+code=v9fs_inode" class="sref">v9fs_inode./a>4*.a href="+code=v9inode" class="sref">v9inode./a>4= .a href="+code=V9FS_I" class="sref">V9FS_I./a>(.a href="+code=inode" class="sref">inode./a>);=4285./a>=4286./a>4       .a href="+code=BUG_ON" class="sref">BUG_ON./a>(!.a href="+code=v9inode" class="sref">v9inode./a>->.a href="+code=fscache" class="sref">fscache./a>);=4287./a>=4288./a>4       return .a href="+code=fscache_maybe_release_page" class="sref">fscache_maybe_release_page./a>(.a href="+code=v9inode" class="sref">v9inode./a>->.a href="+code=fscache" class="sref">fscache./a>, .a href="+code=page" class="sref">page./a>, .a href="+code=gfp" class="sref">gfp./a>);=4289./a>}=4290./a>=429L81" void4.a href="+code=__v9fs_fscache_invalidate_page" class="sref">__v9fs_fscache_invalidate_page./a>(struct4.a href="+code=page" class="sref">page./a>4*.a href="+code=page" class="sref">page./a>)=4292./a>{=4293./a>4       struct4.a href="+code=inode" class="sref">inode./a>4*.a href="+code=inode" class="sref">inode./a>4= .a href="+code=page" class="sref">page./a>->.a href="+code=mapping" class="sref">mapping./a>->.a href="+code=host" class="sref">host./a>;=4294./a>4       struct4.a href="+code=v9fs_inode" class="sref">v9fs_inode./a>4*.a href="+code=v9inode" class="sref">v9inode./a>4= .a href="+code=V9FS_I" class="sref">V9FS_I./a>(.a href="+code=inode" class="sref">inode./a>);=4295./a>=4296./a>4       .a href="+code=BUG_ON" class="sref">BUG_ON./a>(!.a href="+code=v9inode" class="sref">v9inode./a>->.a href="+code=fscache" class="sref">fscache./a>);=4297./a>=4298./a>4       if (.a href="+code=PageFsCache" class="sref">PageFsCache./a>(.a href="+code=page" class="sref">page./a>)) {=4299./a>4               .a href="+code=fscache_wait_on_page_write" class="sref">fscache_wait_on_page_write./a>(.a href="+code=v9inode" class="sref">v9inode./a>->.a href="+code=fscache" class="sref">fscache./a>, .a href="+code=page" class="sref">page./a>);=4300./a>4               .a href="+code=BUG_ON" class="sref">BUG_ON./a>(!.a href="+code=PageLocked" class="sref">PageLocked./a>(.a href="+code=page" class="sref">page./a>));=4301./a>4               .a href="+code=fscache_uncache_page" class="sref">fscache_uncache_page./a>(.a href="+code=v9inode" class="sref">v9inode./a>->.a href="+code=fscache" class="sref">fscache./a>, .a href="+code=page" class="sref">page./a>);=4302./a>4       }=4303./a>}=4304./a>=4305./a>static void4.a href="+code=v9fs_vfs_readpage_complete" class="sref">v9fs_vfs_readpage_complete./a>(struct4.a href="+code=page" class="sref">page./a>4*.a href="+code=page" class="sref">page./a>, void4*.a href="+code=data" class="sref">data./a>,=4306./a>4                                      int4.a href="+code=error" class="sref">error./a>)=4307./a>{=4308./a>4       if (!.a href="+code=error" class="sref">error./a>)=4309./a>4               .a href="+code=SetPageUptodate" class="sref">SetPageUptodate./a>(.a href="+code=page" class="sref">page./a>);=4310./a>=4311./a>4       .a href="+code=unlock_page" class="sref">unlock_page./a>(.a href="+code=page" class="sref">page./a>);=4312./a>}=4313./a>=4314./a>.spau class="comment">/**4315./a>.spau class="comment"> * __v9fs_readpage_from_fscache - read a page from cache./spaue=4316./a>.spau class="comment"> *./spaue=4317./a>.spau class="comment"> * Returns 0 if the pages are in cache and a BIO is submitted,./spaue=4318./a>.spau class="comment"> * 1 if the pages are not in cache and -error otherwise../spaue=4319./a>.spau class="comment"> */./spaue=4320./a>=432L81" int4.a href="+code=__v9fs_readpage_from_fscache" class="sref">__v9fs_readpage_from_fscache./a>(struct4.a href="+code=inode" class="sref">inode./a>4*.a href="+code=inode" class="sref">inode./a>, struct4.a href="+code=page" class="sref">page./a>4*.a href="+code=page" class="sref">page./a>)=4322./a>{=4323./a>4       int4.a href="+code=ret" class="sref">ret./a>;=4324./a>4       const struct4.a href="+code=v9fs_inode" class="sref">v9fs_inode./a>4*.a href="+code=v9inode" class="sref">v9inode./a>4= .a href="+code=V9FS_I" class="sref">V9FS_I./a>(.a href="+code=inode" class="sref">inode./a>);=4325./a>=4326./a>4       .a href="+code=p9_debug" class="sref">p9_debug./a>(.a href="+code=P9_DEBUG_FSC" class="sref">P9_DEBUG_FSC./a>, .spau class="string">"inode %p page %p\n"inode./a>, .a href="+code=page" class="sref">page./a>);=4327./a>4       if (!.a href="+code=v9inode" class="sref">v9inode./a>->.a href="+code=fscache" class="sref">fscache./a>)=4328./a>4               return -.a href="+code=ENOBUFS" class="sref">ENOBUFS./a>;=4329./a>=4330./a>4       .a href="+code=ret" class="sref">ret./a> = .a href="+code=fscache_read_or_alloc_page" class="sref">fscache_read_or_alloc_page./a>(.a href="+code=v9inode" class="sref">v9inode./a>->.a href="+code=fscache" class="sref">fscache./a>,=4331./a>4                                        .a href="+code=page" class="sref">page./a>,=4332./a>4                                        .a href="+code=v9fs_vfs_readpage_complete" class="sref">v9fs_vfs_readpage_complete./a>,=4333./a>4                                        .a href="+code=NULL" class="sref">NULL./a>,=4334./a>4                                        .a href="+code=GFP_KERNEL" class="sref">GFP_KERNEL./a>);=4335./a>4       switch (.a href="+code=ret" class="sref">ret./a>) {=4336./a>4       case -.a href="+code=ENOBUFS" class="sref">ENOBUFS./a>:=4337./a>4       case -.a href="+code=ENODATA" class="sref">ENODATA./a>:=4338./a>4               .a href="+code=p9_debug" class="sref">p9_debug./a>(.a href="+code=P9_DEBUG_FSC" class="sref">P9_DEBUG_FSC./a>, .spau class="string">"page/inode not in cache %d\n"ret./a>);=4339./a>4               return 1;=4340./a>4       case 0:=4341./a>4               .a href="+code=p9_debug" class="sref">p9_debug./a>(.a href="+code=P9_DEBUG_FSC" class="sref">P9_DEBUG_FSC./a>, .spau class="string">"BIO submitted\n"4342./a>4               return4.a href="+code=ret" class="sref">ret./a>;=4343./a>4       default:=4344./a>4               .a href="+code=p9_debug" class="sref">p9_debug./a>(.a href="+code=P9_DEBUG_FSC" class="sref">P9_DEBUG_FSC./a>, .spau class="string">"ret %d\n"ret./a>);=4345./a>4               return4.a href="+code=ret" class="sref">ret./a>;=4346./a>4       }=4347./a>}=4348./a>=4349./a>.spau class="comment">/**4350./a>.spau class="comment"> * __v9fs_readpages_from_fscache - read multiple pages from cache./spaue=4351./a>.spau class="comment"> *./spaue=4352./a>.spau class="comment"> * Returns 0 if the pages are in cache and a BIO is submitted,./spaue=4353./a>.spau class="comment"> * 1 if the pages are not in cache and -error otherwise../spaue=4354./a>.spau class="comment"> */./spaue=4355./a>=4356./a>int4.a href="+code=__v9fs_readpages_from_fscache" class="sref">__v9fs_readpages_from_fscache./a>(struct4.a href="+code=inode" class="sref">inode./a>4*.a href="+code=inode" class="sref">inode./a>,=4357./a>4                                 struct4.a href="+code=address_space" class="sref">address_space./a>4*.a href="+code=mapping" class="sref">mapping./a>,=4358./a>4                                 struct4.a href="+code=list_head" class="sref">list_head./a>4*.a href="+code=pages" class="sref">pages./a>,=435ak;=nr_pages./a>)=4360./a>{=4361./a>4       int4.a href="+code=ret" class="sref">ret./a>;=4362./a>4       const struct4.a href="+code=v9fs_inode" class="sref">v9fs_inode./a>4*.a href="+code=v9inode" class="sref">v9inode./a>4= .a href="+code=V9FS_I" class="sref">V9FS_I./a>(.a href="+code=inode" class="sref">inode./a>);=4363./a>=4364./a>4       .a href="+code=p9_debug" class="sref">p9_debug./a>(.a href="+code=P9_DEBUG_FSC" class="sref">P9_DEBUG_FSC./a>, .spau class="string">"inode %p pages %u\n"inode./a>, *.a href="+code=nr_pages" class="sref">nr_pages./a>);=4365./a>4       if (!.a href="+code=v9inode" class="sref">v9inode./a>->.a href="+code=fscache" class="sref">fscache./a>)=4366./a>4               return -.a href="+code=ENOBUFS" class="sref">ENOBUFS./a>;=4367./a>=4368./a>4       .a href="+code=ret" class="sref">ret./a> = .a href="+code=fscache_read_or_alloc_pages" class="sref">fscache_read_or_alloc_pages./a>(.a href="+code=v9inode" class="sref">v9inode./a>->.a href="+code=fscache" class="sref">fscache./a>,=436ak;=mapping./a>, .a href="+code=pages" class="sref">pages./a>, .a href="+code=nr_pages" class="sref">nr_pages./a>,=4370./a>4                he.c#L111111111114       .a href="+code=v9fs_vfs_readpage_complete" class="sref">v9fs_vfs_readpage_complete./a>,=4371./a>4                                         .a href="+code=NULL" class="sref">NULL./a>,=4372./a>4                                         .a href="+code=mapping_gfp_mask" class="sref">mapping_gfp_mask./a>(.a href="+code=mapping" class="sref">mapping./a>));=4373./a>4       switch (.a href="+code=ret" class="sref">ret./a>) {=4374./a>4       case -.a href="+code=ENOBUFS" class="sref">ENOBUFS./a>:=4375./a>4       case -.a href="+code=ENODATA" class="sref">ENODATA./a>:=4376./a>4               .a href="+code=p9_debug" class="sref">p9_debug./a>(.a href="+code=P9_DEBUG_FSC" class="sref">P9_DEBUG_FSC./a>, .spau class="string">"pages/inodes not in cache %d\n"ret./a>);=4377./a>4               return 1;=4378./a>4       case 0:=4379./a>4               .a href="+code=BUG_ON" class="sref">BUG_ON./a>(!.a href="+code=list_empty" class="sref">list_empty./a>(.a href="+code=pages" class="sref">pages./a>));=4380./a>4               .a href="+code=BUG_ON" class="sref">BUG_ON./a>(*.a href="+code=nr_pages" class="sref">nr_pages./a> != 0);=4381./a>4               .a href="+code=p9_debug" class="sref">p9_debug./a>(.a href="+code=P9_DEBUG_FSC" class="sref">P9_DEBUG_FSC./a>, .spau class="string">"BIO submitted\n"4382./a>4               return4.a href="+code=ret" class="sref">ret./a>;=4383./a>4       default:=4384./a>4               .a href="+code=p9_debug" class="sref">p9_debug./a>(.a href="+code=P9_DEBUG_FSC" class="sref">P9_DEBUG_FSC./a>, .spau class="string">"ret %d\n"ret./a>);=4385./a>4               return4.a href="+code=ret" class="sref">ret./a>;=4386./a>4       }=4387./a>}=4388./a>=4389./a>.spau class="comment">/**4390./a>.spau class="comment"> * __v9fs_readpage_to_fscache - write a page to the cache./spaue=4391./a>.spau class="comment"> *./spaue=4392./a>.spau class="comment"> */./spaue=4393./a>=4394./a>void4.a href="+code=__v9fs_readpage_to_fscache" class="sref">__v9fs_readpage_to_fscache./a>(struct4.a href="+code=inode" class="sref">inode./a>4*.a href="+code=inode" class="sref">inode./a>, struct4.a href="+code=page" class="sref">page./a>4*.a href="+code=page" class="sref">page./a>)=4395./a>{=4396./a>4       int4.a href="+code=ret" class="sref">ret./a>;=4397./a>4       const struct4.a href="+code=v9fs_inode" class="sref">v9fs_inode./a>4*.a href="+code=v9inode" class="sref">v9inode./a>4= .a href="+code=V9FS_I" class="sref">V9FS_I./a>(.a href="+code=inode" class="sref">inode./a>);=4398./a>=4399./a>4       .a href="+code=p9_debug" class="sref">p9_debug./a>(.a href="+code=P9_DEBUG_FSC" class="sref">P9_DEBUG_FSC./a>, .spau class="string">"inode %p page %p\n"inode./a>, .a href="+code=page" class="sref">page./a>);=4400./a>4       .a href="+code=ret" class="sref">ret./a> = .a href="+code=fscache_write_page" class="sref">fscache_write_page./a>(.a href="+code=v9inode" class="sref">v9inode./a>->.a href="+code=fscache" class="sref">fscache./a>, .a href="+code=page" class="sref">page./a>, .a href="+code=GFP_KERNEL" class="sref">GFP_KERNEL./a>);=4401./a>4       .a href="+code=p9_debug" class="sref">p9_debug./a>(.a href="+code=P9_DEBUG_FSC" class="sref">P9_DEBUG_FSC./a>, .spau class="string">"ret =  %d\n"ret./a>);=4402./a>4       if (.a href="+code=ret" class="sref">ret./a> != 0)=4403./a>4               .a href="+code=v9fs_uncache_page" class="sref">v9fs_uncache_page./a>(.a href="+code=inode" class="sref">inode./a>, .a href="+code=page" class="sref">page./a>);=4404./a>}=4405./a>=4406./a>.spau class="comment">/*./spaue=4407./a>.spau class="comment"> * wait for a page to complete writing to the cache./spaue=4408./a>.spau class="comment"> */./spaue=4409./a>void4.a href="+code=__v9fs_fscache_wait_on_page_write" class="sref">__v9fs_fscache_wait_on_page_write./a>(struct4.a href="+code=inode" class="sref">inode./a>4*.a href="+code=inode" class="sref">inode./a>, struct4.a href="+code=page" class="sref">page./a>4*.a href="+code=page" class="sref">page./a>)=4410./a>{=4411./a>4       const struct4.a href="+code=v9fs_inode" class="sref">v9fs_inode./a>4*.a href="+code=v9inode" class="sref">v9inode./a>4= .a href="+code=V9FS_I" class="sref">V9FS_I./a>(.a href="+code=inode" class="sref">inode./a>);=4412./a>4       .a href="+code=p9_debug" class="sref">p9_debug./a>(.a href="+code=P9_DEBUG_FSC" class="sref">P9_DEBUG_FSC./a>, .spau class="string">"inode %p page %p\n"inode./a>, .a href="+code=page" class="sref">page./a>);=4413./a>4       if (.a href="+code=PageFsCache" class="sref">PageFsCache./a>(.a href="+code=page" class="sref">page./a>))=4414./a>4               .a href="+code=fscache_wait_on_page_write" class="sref">fscache_wait_on_page_write./a>(.a href="+code=v9inode" class="sref">v9inode./a>->.a href="+code=fscache" class="sref">fscache./a>, .a href="+code=page" class="sref">page./a>);=4415./a>}=4416./a>./pre>./div>


./div>