/* * memfd test file-system * This file uses FUSE to create a dummy file-system with only one file /memfd. * This file is read-only and takes 1s per read. * * This file-system is used by the memfd test-cases to force the kernel to pin * pages during reads(). Due to the 1s delay of this file-system, this is a * nice way to test race-conditions against get_user_pages() in the kernel. * * We use direct_io==1 to force the kernel to use direct-IO for this * file-system. */ #define FUSE_USE_VERSION 26 #include #include #include #include #include #include static const char memfd_content[] = "memfd-example-content"; static const char memfd_path[] = "/memfd"; static int memfd_getattr(const char *path, struct stat *st) { memset(st, 0, sizeof(*st)); if (!strcmp(path, "/")) { st->st_mode = S_IFDIR | 0755; st->st_nlink = 2; } else if (!strcmp(path, memfd_path)) { st->st_mode = S_IFREG | 0444; st->st_nlink = 1; st->st_size = strlen(memfd_content); } else { return -ENOENT; } return 0; } static int memfd_readdir(const char *path, void *buf, fuse_fill_dir_t filler, off_t offset, struct fuse_file_info *fi) { if (strcmp(path, "/")) return -ENOENT; filler(buf, ".", NULL, 0); filler(buf, "..", NULL, 0); filler(buf, memfd_path + 1, NULL, 0); return 0; } static int memfd_open(const char *path, struct fuse_file_info *fi) { if (strcmp(path, memfd_path)) return -ENOENT; if ((fi->flags & 3) != O_RDONLY) return -EACCES; /* force direct-IO */ fi->direct_io = 1; return 0; } static int memfd_read(const char *path, char *buf, size_t size, off_t offset, struct fuse_file_info *fi) { size_t len; if (strcmp(path, memfd_path) != 0) return -ENOENT; sleep(1); len = strlen(memfd_content); if (offset < len) { if (offset + size > len) size = len - offset; memcpy(buf, memfd_content + offset, size); } else { size = 0; } return size; } static struct fuse_operations memfd_ops = { .getattr = memfd_getattr, .readdir = memfd_readdir, .open = memfd_open, .read = memfd_read, }; int main(int argc, char *argv[]) { return fuse_main(argc, argv, &memfd_ops, NULL); } rep'>log msg
diff options
context:
space:
mode:
authorTobias Klauser <tklauser@distanz.ch>2016-10-20 15:44:19 +0200
committerTobias Klauser <tklauser@distanz.ch>2017-02-15 10:34:18 +0100
commit5db4992d8f040b8d8db0b86d42806e0c417f7ccf (patch)
tree5b06e952af482d45f3ade64e77824662e34b7fa2 /arch/m68k/hp300/README.hp300
parent370ebb0ef6255132373ed35d13e7b1d8d2eb7003 (diff)
usbnet: pegasus: Use net_device_stats from struct net_devicends-private-remove
Instead of using a private copy of struct net_device_stats in struct pegasus, use stats from struct net_device. Also remove the now unnecessary .ndo_get_stats function. Cc: Petko Manolov <petkan@nucleusys.com> Cc: linux-usb@vger.kernel.org Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
Diffstat (limited to 'arch/m68k/hp300/README.hp300')