"Edward \"Koko\" Konetzko" <konetzed@xxxxxxxxxxxxxxxxx> wrote: > [kslowd] ==> cachefiles_attr_changed({OBJ208dd},[12222]) We started by adjusting the size of the storage object file to be what we expected here. > [cp ] read back ffffe200003a4030{2,1} > [cp ] - present ffffe200006fa810 > [cp ] - not ready ffffe200006fa810{100000000000801} > [cp ] - monitor add Meanwhile, we got on with reading data from the backing file. We found that the third page was already in the pagecache, presumably from a previous testrun (I assume you're not unmounting the partition holding /var/fscache/ between runs as it is your root partition). We noted that it was locked (bit 0 is PG_locked), and set up to wait for it to be unlocked. > [kslowd] ==> cachefiles_read_waiter({2},3,0,{ffffe200006fa810,0}) > [kslowd] --- monitor ffffe200006fa810 100000000000810 --- The page then got unlocked, > Pid: 6131, comm: kslowd Not tainted 2.6.30-rc6 #1 > ... > CacheFiles: I/O Error: Readpage failed on backing file 100000000000810 > FS-Cache: Cache cachefiles stopped due to I/O error and we noted that PG_error and PG_uptodate weren't set, so we disabled the cache. Looking in the backtrace: > [<ffffffffa027cc6e>] ? cachefiles_read_waiter+0xd9/0x147 [cachefiles] > ... > [<ffffffffa003a793>] ? ext3_truncate+0x4d7/0x8ed [ext3] > ... > [<ffffffffa003baa5>] ? ext3_setattr+0x17b/0x1e6 [ext3] > [<ffffffff802bd8e9>] ? notify_change+0x186/0x2c9 > [<ffffffffa02789de>] ? cachefiles_attr_changed+0x133/0x1cd [cachefiles] ext3_truncate() - called indirectly by cachefiles_attr_changed() - has decided to eliminate one of the pages we were trying to read. It looks like the NFS inode may have shrunk or maybe ext3 is trying to clear a partial page spanning the EOF, and so ext3_truncate() is taking away a page we're trying to read from. Can you add the attached patch to get some more debugging info? David --- diff --git a/fs/cachefiles/interface.c b/fs/cachefiles/interface.c index 1e96234..0a195e3 100644 --- a/fs/cachefiles/interface.c +++ b/fs/cachefiles/interface.c @@ -401,6 +401,8 @@ static int cachefiles_attr_changed(struct fscache_object *_object) if (oi_size == ni_size) return 0; + kdebug("- change i_size %llx -> %llx", oi_size, ni_size); + newattrs.ia_size = ni_size; newattrs.ia_valid = ATTR_SIZE; -- Linux-cachefs mailing list Linux-cachefs@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/linux-cachefs