All of lore.kernel.org
 help / color / mirror / Atom feed
From: Christoph Hellwig <hch@infradead.org>
To: Justin Piszcz <jpiszcz@lucidpixels.com>
Cc: "J. Bruce Fields" <bfields@fieldses.org>,
	linux-nfs@vger.kernel.org, linux-kernel@vger.kernel.org,
	xfs@oss.sgi.com
Subject: Re: 2.6.xx: NFS: directory motion/cam2 contains a readdir loop
Date: Wed, 27 Jul 2011 14:11:11 -0400	[thread overview]
Message-ID: <20110727181111.GA23009@infradead.org> (raw)
In-Reply-To: <alpine.DEB.2.02.1107271227340.1451@p34.internal.lan>

[-- Attachment #1: Type: text/plain, Size: 222 bytes --]

Justin,

can you please run the attached test program on the affected directory
on the server, and see if you see duplicates in the d_off colum.  Unless
you have privacy concerns I would also love to see the full output.


[-- Attachment #2: getdents.c --]
[-- Type: text/plain, Size: 1150 bytes --]

#define _GNU_SOURCE

#include <dirent.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/syscall.h>

#define handle_error(msg) \
               do { perror(msg); exit(EXIT_FAILURE); } while (0)

struct linux_dirent64 {
	unsigned long long d_ino;
	long long d_off;
	unsigned short d_reclen;
	unsigned char d_type;
	char d_name[];
};

#define BUF_SIZE 131072

int main(int argc, char *argv[])
{
	int fd, nread;
	char buf[BUF_SIZE];
	struct linux_dirent64 *d;
	int bpos;

	fd = open(argc > 1 ? argv[1] : ".", O_RDONLY | O_DIRECTORY);
	if (fd == -1)
		handle_error("open");

	for (;;) {
		nread = syscall(SYS_getdents64, fd, buf, BUF_SIZE);
		if (nread == -1)
			handle_error("getdents");

		if (nread == 0)
			break;

		printf("--------------- nread=%d ---------------\n", nread);
		printf("i-node#          type  d_reclen  d_off   d_name\n");
		for (bpos = 0; bpos < nread;) {
			d = (struct linux_dirent64 *)(buf + bpos);
			printf("%16lld  ", d->d_ino);
			printf("%4d %10lld  %s\n", d->d_reclen,
			       d->d_off, d->d_name);
			bpos += d->d_reclen;
		}
	}

	exit(EXIT_SUCCESS);
}

WARNING: multiple messages have this Message-ID (diff)
From: Christoph Hellwig <hch@infradead.org>
To: Justin Piszcz <jpiszcz@lucidpixels.com>
Cc: "J. Bruce Fields" <bfields@fieldses.org>,
	linux-nfs@vger.kernel.org, linux-kernel@vger.kernel.org,
	xfs@oss.sgi.com
Subject: Re: 2.6.xx: NFS: directory motion/cam2 contains a readdir loop
Date: Wed, 27 Jul 2011 14:11:11 -0400	[thread overview]
Message-ID: <20110727181111.GA23009@infradead.org> (raw)
In-Reply-To: <alpine.DEB.2.02.1107271227340.1451@p34.internal.lan>

[-- Attachment #1: Type: text/plain, Size: 222 bytes --]

Justin,

can you please run the attached test program on the affected directory
on the server, and see if you see duplicates in the d_off colum.  Unless
you have privacy concerns I would also love to see the full output.


[-- Attachment #2: getdents.c --]
[-- Type: text/plain, Size: 1150 bytes --]

#define _GNU_SOURCE

#include <dirent.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/syscall.h>

#define handle_error(msg) \
               do { perror(msg); exit(EXIT_FAILURE); } while (0)

struct linux_dirent64 {
	unsigned long long d_ino;
	long long d_off;
	unsigned short d_reclen;
	unsigned char d_type;
	char d_name[];
};

#define BUF_SIZE 131072

int main(int argc, char *argv[])
{
	int fd, nread;
	char buf[BUF_SIZE];
	struct linux_dirent64 *d;
	int bpos;

	fd = open(argc > 1 ? argv[1] : ".", O_RDONLY | O_DIRECTORY);
	if (fd == -1)
		handle_error("open");

	for (;;) {
		nread = syscall(SYS_getdents64, fd, buf, BUF_SIZE);
		if (nread == -1)
			handle_error("getdents");

		if (nread == 0)
			break;

		printf("--------------- nread=%d ---------------\n", nread);
		printf("i-node#          type  d_reclen  d_off   d_name\n");
		for (bpos = 0; bpos < nread;) {
			d = (struct linux_dirent64 *)(buf + bpos);
			printf("%16lld  ", d->d_ino);
			printf("%4d %10lld  %s\n", d->d_reclen,
			       d->d_off, d->d_name);
			bpos += d->d_reclen;
		}
	}

	exit(EXIT_SUCCESS);
}

[-- Attachment #3: Type: text/plain, Size: 121 bytes --]

_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs

  parent reply	other threads:[~2011-07-27 18:11 UTC|newest]

Thread overview: 69+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-07-27 13:54 2.6.xx: NFS: directory motion/cam2 contains a readdir loop Justin Piszcz
2011-07-27 16:07 ` J. Bruce Fields
2011-07-27 16:28   ` Justin Piszcz
2011-07-27 16:28     ` Justin Piszcz
2011-07-27 16:40     ` Bryan Schumaker
2011-07-27 16:40       ` Bryan Schumaker
2011-07-27 17:00       ` Ruediger Meier
2011-07-27 17:00         ` Ruediger Meier
2011-07-27 17:09         ` Bryan Schumaker
2011-07-27 17:09           ` Bryan Schumaker
2011-07-27 17:17         ` Justin Piszcz
2011-07-27 17:17           ` Justin Piszcz
2011-07-27 17:45           ` J. Bruce Fields
2011-07-27 17:45             ` J. Bruce Fields
2011-07-27 18:28         ` Bryan Schumaker
2011-07-27 18:28           ` Bryan Schumaker
2011-07-27 17:15       ` Justin Piszcz
2011-07-27 17:15         ` Justin Piszcz
2011-07-27 18:11     ` Christoph Hellwig [this message]
2011-07-27 18:11       ` Christoph Hellwig
2011-07-27 19:35       ` Justin Piszcz
2011-07-27 19:35         ` Justin Piszcz
2011-07-27 19:39         ` Christoph Hellwig
2011-07-27 19:39           ` Christoph Hellwig
2011-07-27 19:44           ` Justin Piszcz
2011-07-27 19:44             ` Justin Piszcz
2011-07-27 19:47             ` Christoph Hellwig
2011-07-27 19:47               ` Christoph Hellwig
2011-07-27 19:54               ` Bryan Schumaker
2011-07-27 19:54                 ` Bryan Schumaker
2011-07-27 20:02                 ` Christoph Hellwig
2011-07-27 20:02                   ` Christoph Hellwig
2011-07-27 20:05                   ` Christoph Hellwig
2011-07-27 20:05                     ` Christoph Hellwig
2011-07-27 20:26                   ` Rüdiger Meier
2011-07-27 20:26                     ` Rüdiger Meier
2011-07-27 20:47                     ` Christoph Hellwig
2011-07-27 20:47                       ` Christoph Hellwig
2011-07-27 21:21                       ` Rüdiger Meier
2011-07-27 21:21                         ` Rüdiger Meier
2011-07-27 19:57               ` Justin Piszcz
2011-07-27 19:57                 ` Justin Piszcz
2011-07-27 20:37               ` Trond Myklebust
2011-07-27 20:37                 ` Trond Myklebust
2011-07-27 20:54                 ` Trond Myklebust
2011-07-27 20:54                   ` Trond Myklebust
2011-07-27 20:54                   ` Trond Myklebust
2011-07-27 20:56                   ` Trond Myklebust
2011-07-27 20:56                     ` Trond Myklebust
2011-07-27 20:56                     ` Trond Myklebust
     [not found]                     ` <1311800195.25645.45.camel-SyLVLa/KEI9HwK5hSS5vWB2eb7JE58TQ@public.gmane.org>
2011-07-27 21:24                       ` Justin Piszcz
2011-07-27 21:24                         ` Justin Piszcz
2011-07-27 21:24                         ` Justin Piszcz
     [not found]                         ` <alpine.DEB.2.02.1107271723500.25432-0qmrozcXWo8bm2hyYBkBBg@public.gmane.org>
2011-07-27 22:44                           ` Justin Piszcz
2011-07-27 22:44                             ` Justin Piszcz
2011-07-27 22:44                             ` Justin Piszcz
2011-07-28 20:48                             ` Trond Myklebust
2011-07-28 20:48                               ` Trond Myklebust
2011-07-28 20:48                               ` Trond Myklebust
2011-07-29 20:52                               ` Bryan Schumaker
2011-07-29 20:52                                 ` Bryan Schumaker
2011-07-29 20:59                                 ` Justin Piszcz
2011-07-29 20:59                                   ` Justin Piszcz
2011-07-29 22:03                                   ` Trond Myklebust
2011-07-29 22:03                                     ` Trond Myklebust
2011-07-29 22:23                                     ` Justin Piszcz
2011-07-29 22:23                                       ` Justin Piszcz
2011-07-30  9:58                                       ` Justin Piszcz
2011-07-30  9:58                                         ` Justin Piszcz

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20110727181111.GA23009@infradead.org \
    --to=hch@infradead.org \
    --cc=bfields@fieldses.org \
    --cc=jpiszcz@lucidpixels.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-nfs@vger.kernel.org \
    --cc=xfs@oss.sgi.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.