#include #include #include #include #include #include #include #include #include #include static int set_immutable(const char *path, int immutable) { unsigned int flags; int fd; int rc; int error; fd = open(path, O_RDONLY); if (fd < 0) return fd; rc = ioctl(fd, FS_IOC_GETFLAGS, &flags); if (rc < 0) { error = errno; close(fd); errno = error; return rc; } if (immutable) flags |= FS_IMMUTABLE_FL; else flags &= ~FS_IMMUTABLE_FL; rc = ioctl(fd, FS_IOC_SETFLAGS, &flags); error = errno; close(fd); errno = error; return rc; } static int get_immutable(const char *path) { unsigned int flags; int fd; int rc; int error; fd = open(path, O_RDONLY); if (fd < 0) return fd; rc = ioctl(fd, FS_IOC_GETFLAGS, &flags); if (rc < 0) { error = errno; close(fd); errno = error; return rc; } close(fd); if (flags & FS_IMMUTABLE_FL) return 1; return 0; } int main(int argc, char **argv) { const char *path; char buf[5]; int fd, rc; if (argc < 2) { fprintf(stderr, "usage: %s \n", argv[0]); return EXIT_FAILURE; } path = argv[1]; /* attributes: EFI_VARIABLE_NON_VOLATILE | * EFI_VARIABLE_BOOTSERVICE_ACCESS | * EFI_VARIABLE_RUNTIME_ACCESS */ *(uint32_t *)buf = 0x7; buf[4] = 0; /* create a test variable */ fd = open(path, O_WRONLY | O_CREAT, 0600); if (fd < 0) { perror("open(O_WRONLY)"); return EXIT_FAILURE; } rc = write(fd, buf, sizeof(buf)); if (rc != sizeof(buf)) { perror("write"); return EXIT_FAILURE; } close(fd); rc = get_immutable(path); if (rc < 0) { perror("ioctl(FS_IOC_GETFLAGS)"); return EXIT_FAILURE; } else if (rc) { rc = set_immutable(path, 0); if (rc < 0) { perror("ioctl(FS_IOC_SETFLAGS)"); return EXIT_FAILURE; } } fd = open(path, O_RDONLY); if (fd < 0) { perror("open"); return EXIT_FAILURE; } if (unlink(path) < 0) { perror("unlink"); return EXIT_FAILURE; } rc = read(fd, buf, sizeof(buf)); if (rc > 0) { fprintf(stderr, "reading from an unlinked variable " "shouldn't be possible\n"); return EXIT_FAILURE; } return EXIT_SUCCESS; } ='/cgit.cgi/linux/net-next.git/diff/drivers/usb/host/ohci-omap.c?h=nds-private-remove&id=fc6f41ba8b2e705f91324db158c3cc28209a15b1'>diff
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2017-02-10 14:35:22 -0800
committerLinus Torvalds <torvalds@linux-foundation.org>2017-02-10 14:35:22 -0800
commitfc6f41ba8b2e705f91324db158c3cc28209a15b1 (patch)
tree567bede1cc6bd9f2dec3a3dc85e908e02557da2e /drivers/usb/host/ohci-omap.c
parent1f369d1655c1de415a186c6ce9004e40ca790989 (diff)
parent5cad24d835772f9f709971a8d6fcf12afe53b2a7 (diff)
Merge tag 'mmc-v4.10-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/mmc
Pull MMC host fix from Ulf Hansson: "mmci: Fix hang while waiting for busy-end interrupt" * tag 'mmc-v4.10-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/mmc: mmc: mmci: avoid clearing ST Micro busy end interrupt mistakenly
Diffstat (limited to 'drivers/usb/host/ohci-omap.c')