Здравствуйте, Аноним, Вы писали:
Давно не занимался программированием, так что просьба отнестись к тому, что я буду писать, со здоровым скептицизмом.
i_size — это размер данных inode. Все эти generic функции оперируют указателем и концепцией размеров inode, т.е. ты читаешь — указатель перемещается. Больше данных чем есть прочитать нельзя.

Ну обойти это можно просто — напиши в i_size столько сколько нужно, можно написать максимум.

Ну либо писать свой read, который плюет на проверки, связанные с размером (но тогда надо делать cut&paste кучи полезного кода).
Насчет 512 Кб странно — надо смотреть

А какая хоть ошибка возвращается?