summaryrefslogtreecommitdiff
path: root/fs/stat.c
diff options
context:
space:
mode:
authorMark Brown <broonie@kernel.org>2023-12-04 12:31:42 +0000
committerMark Brown <broonie@kernel.org>2023-12-04 12:31:42 +0000
commit06891af2709b5dfa4081ff1f07b9f4c2743834b7 (patch)
tree672f337b94d3af79268a54b5307af1392f708a1a /fs/stat.c
parent7a030abc0185b30a3fd19a7431347c6f5a82c588 (diff)
parent9b2ef250b31d46f7ef522bd1bd84942f998bb3f9 (diff)
spi: spl022: fix sleeping in interrupt context
Merge series from Nam Cao <namcao@linutronix.de>: While running the spl022, I got the following warning: BUG: sleeping function called from invalid context at drivers/spi/spi.c:1428 This is because between spi transfers, spi_transfer_delay_exec() (who may sleep if the delay is >10us) is called in interrupt context. This is a problem for anyone who runs this driver and need more than 10us delay. Patch 1 adds an error reporting mechanism, needed by patch 2 who switch to use the default spi_transfer_one_message(), which fix the problem. The series is tested with polling transfer mode and interrupt transfer mode. I can't test the DMA mode, so some help testing here is very appreciated.
Diffstat (limited to 'fs/stat.c')
-rw-r--r--fs/stat.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/fs/stat.c b/fs/stat.c
index 24bb0209e459..f721d26ec3f7 100644
--- a/fs/stat.c
+++ b/fs/stat.c
@@ -133,7 +133,8 @@ int vfs_getattr_nosec(const struct path *path, struct kstat *stat,
idmap = mnt_idmap(path->mnt);
if (inode->i_op->getattr)
return inode->i_op->getattr(idmap, path, stat,
- request_mask, query_flags);
+ request_mask,
+ query_flags | AT_GETATTR_NOSEC);
generic_fillattr(idmap, request_mask, inode, stat);
return 0;
@@ -166,6 +167,9 @@ int vfs_getattr(const struct path *path, struct kstat *stat,
{
int retval;
+ if (WARN_ON_ONCE(query_flags & AT_GETATTR_NOSEC))
+ return -EPERM;
+
retval = security_inode_getattr(path);
if (retval)
return retval;