> On Dec 7, 2016, at 17:55, Benjamin Coddington <bcodding@xxxxxxxxxx> wrote: > > On 7 Dec 2016, at 17:41, Trond Myklebust wrote: > >>> On Dec 7, 2016, at 17:34, Benjamin Coddington <bcodding@xxxxxxxxxx> wrote: >>> static >>> @@ -921,7 +930,7 @@ static int nfs_readdir(struct file *file, struct dir_context *ctx) >>> desc->ctx = ctx; >>> desc->dir_cookie = &dir_ctx->dir_cookie; >>> desc->decode = NFS_PROTO(inode)->decode_dirent; >>> - desc->plus = nfs_use_readdirplus(inode, ctx) ? 1 : 0; >>> + desc->plus = nfs_use_readdirplus(inode, ctx, dir_ctx) ? 1 : 0; >> >> This fixes desc->plus at the beginning of the readdir() call. Perhaps we >> should instead check the value of ctx->use_readdir_plus in the call to >> nfs_readdir_xdr_filler(), and just resetting cts->use_readdir_plus at the >> very end of nfs_readdir()? > > I don't understand the functional difference. Is this just a preference? No. The functional difference is that we take into account the fact that a process may be in the readdir() code while a GETATTR or LOOKUP from a second process is triggering “use readdirplus” feedback. > > There must be something else happening.. dcache is getting under pressure > pruned maybe, that causes a miss and then the process starts over? > > Ben > ��.n��������+%������w��{.n�����{��w���jg��������ݢj����G�������j:+v���w�m������w�������h�����٥