public inbox for linux-xfs@vger.kernel.org
 help / color / mirror / Atom feed
* E2BIG from listxattr
@ 2014-03-26  5:48 Sage Weil
  2014-03-26 21:35 ` Brian Foster
  0 siblings, 1 reply; 3+ messages in thread
From: Sage Weil @ 2014-03-26  5:48 UTC (permalink / raw)
  To: xfs

Hi,

If you create a bunch of xattrs on an inode, you can get into a sitation 
where you can no longer list them.  The reproducer below just does 
setxattr until it gets an error or listxattr starts returning E2BIG.  Once 
you're in this state you can getxattr attrs you know the name of, but you 
can't list them, which is a bit inconvenient.

Presumably the fix is for setxattr to verify that the list of all xattr 
names will fit into a 64K buffer or else return ENOSPC...

sage


#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/xattr.h>
#include <string.h>
#include <errno.h>

int main(int argc, char **argv)
{
	char *fn = argv[1];
	char buf[655360];
	int buflen = sizeof(buf);
	int i;

	for (i = 0; i < 10000; ++i) {
		int r = listxattr(fn, buf, buflen);
		if (r < 0) {
			perror("listxattr");
			return 1;
		}
		char n[100];
		sprintf(n, "user.foooooooooooooooooooooooooooooooooooooo%d", i);
		r = setxattr(fn, n, "", 0, 0);
		if (r < 0) {
			perror("setxattr");
			return 1;
		}
		printf("set %d\n", i);
	}
	return 0;
}

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

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2014-03-27 16:08 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-03-26  5:48 E2BIG from listxattr Sage Weil
2014-03-26 21:35 ` Brian Foster
2014-03-27 16:07   ` Sage Weil

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox