LINUX.ORG.RU

Анатомия виртуального коммутатора файловых систем Linux

 ,


0

3

Операционная система Linux — само воплощение гибкости и расширяемости. Возьмём, к примеру, виртуальный коммутатор файловых систем (virtual file system switch, VFS). Он позволяет создавать файловые системы на различных устройствах: традиционных дисках, USB флэш-накопителях, в памяти, на других устройствах хранения. Можно даже встроить файловую систему в контекст другой файловой системы. Давайте узнаем, что же делает VFS столь мощным инструментом, и рассмотрим его основные интерфейсы и процессы.

>>> Подробности

★★★

Проверено: Shaman007 ()

Ответ на: комментарий от AVL2

> > #define REISERFS_MAX_NAME(block_size) 255



это в каком дистре такое стоит?



дистре??? это include/linux/reiserfs_fs.h

idle ★★★★★ ()
Ответ на: комментарий от anonymous

> > возможно. но в чем я соврал?



http://en.wikipedia.org/wiki/ReiserFS


Max filename length 4032 bytes, limited to 255 by Linux VFS



а вот здесь

http://www.linux.org.ru/news/doc/5945079#comment-5953279

написано, что в vfs нет такого ограничения. что теперь?

у нас есть такие хаки по ограничению длины имени?


выходит, что у нас анонимусы довольно ограничены.

ох. я уже говорил, что fs/ - не моя специальность вообще.
я могу ошибаться, хотя пока что, после беглого просмотра
dcache.c/etc, я таких ограничений не вижу.

но блин, ссылаться на wiki, это... кхм, неправильно ;)

idle ★★★★★ ()
Ответ на: комментарий от anonymous

у нас есть такие хаки по ограничению длины имени?

о чем вообще спорить...

#include <linux/module.h>
#include <linux/proc_fs.h>
#include <asm/uaccess.h>

#define FILE_NAME	\
	"FILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILE"	\
	"FILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILE"	\
	"FILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILE"	\
	"FILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILE"	\
	"FILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILE"	\
	"FILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILE"	\
	"FILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILE"	\
	"FILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILE"	\
	"FILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILE"	\
	"FILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILE"	\
	"FILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILE"	\
	"FILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILE"	\
	"FILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILEFILE"

static ssize_t fname_read(struct file *file, char __user *ubuf,
				size_t count, loff_t *ppos)
{
	char msg[128];
	int len;

	len = snprintf(msg, sizeof(msg),
		"filename length = %ld. Never read wiki, read the CODE.\n",
		strlen(FILE_NAME));

	if (*ppos >= len)
		return 0;
	len -= *ppos;

	if (copy_to_user(ubuf, msg + *ppos, len))
		return -EFAULT;

	*ppos += len;
	return len;
}

static const struct file_operations fname_fops = {
	.read			= fname_read,
};


static int __init fname_init(void)
{
	struct proc_dir_entry *pde;

	pde = proc_create(FILE_NAME, S_IFREG|S_IRUGO, NULL, &fname_fops);
	if (!pde)
		return -EBADF;

	return 0;
}

static void __exit fname_exit(void)
{
	remove_proc_entry(FILE_NAME, NULL);
}

MODULE_LICENSE("GPL");
module_init(fname_init);
module_exit(fname_exit);
idle ★★★★★ ()
Ответ на: комментарий от idle

> if (*ppos >= len)

return 0;

len -= *ppos;




if (copy_to_user(ubuf, msg + *ppos, len))


return -EFAULT;



Ай-яй-яй. А как же count? :)

Murr ★★ ()
Ответ на: комментарий от Murr

> Ай-яй-яй. А как же count? :)

чччччччоооорт!

не-не-не. это глюки на форуме, lorcode работает
неправильно, и все такое. оно съело нужные проверки.
и вообще, если хочешь знать, я использовал seq_read().

ничего не знаю.

idle ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.