diff options
Diffstat (limited to 'fs/fuse/dir.c')
| -rw-r--r-- | fs/fuse/dir.c | 19 |
1 files changed, 8 insertions, 11 deletions
diff --git a/fs/fuse/dir.c b/fs/fuse/dir.c index 3cdc5f78a406..c9627c95482d 100644 --- a/fs/fuse/dir.c +++ b/fs/fuse/dir.c | |||
| @@ -1016,7 +1016,7 @@ static int fuse_permission(struct inode *inode, int mask) | |||
| 1016 | exist. So if permissions are revoked this won't be | 1016 | exist. So if permissions are revoked this won't be |
| 1017 | noticed immediately, only after the attribute | 1017 | noticed immediately, only after the attribute |
| 1018 | timeout has expired */ | 1018 | timeout has expired */ |
| 1019 | } else if (mask & MAY_ACCESS) { | 1019 | } else if (mask & (MAY_ACCESS | MAY_CHDIR)) { |
| 1020 | err = fuse_access(inode, mask); | 1020 | err = fuse_access(inode, mask); |
| 1021 | } else if ((mask & MAY_EXEC) && S_ISREG(inode->i_mode)) { | 1021 | } else if ((mask & MAY_EXEC) && S_ISREG(inode->i_mode)) { |
| 1022 | if (!(inode->i_mode & S_IXUGO)) { | 1022 | if (!(inode->i_mode & S_IXUGO)) { |
| @@ -1270,21 +1270,18 @@ static int fuse_do_setattr(struct dentry *entry, struct iattr *attr, | |||
| 1270 | if (!fuse_allow_task(fc, current)) | 1270 | if (!fuse_allow_task(fc, current)) |
| 1271 | return -EACCES; | 1271 | return -EACCES; |
| 1272 | 1272 | ||
| 1273 | if (fc->flags & FUSE_DEFAULT_PERMISSIONS) { | 1273 | if (!(fc->flags & FUSE_DEFAULT_PERMISSIONS)) |
| 1274 | err = inode_change_ok(inode, attr); | 1274 | attr->ia_valid |= ATTR_FORCE; |
| 1275 | if (err) | 1275 | |
| 1276 | return err; | 1276 | err = inode_change_ok(inode, attr); |
| 1277 | } | 1277 | if (err) |
| 1278 | return err; | ||
| 1278 | 1279 | ||
| 1279 | if ((attr->ia_valid & ATTR_OPEN) && fc->atomic_o_trunc) | 1280 | if ((attr->ia_valid & ATTR_OPEN) && fc->atomic_o_trunc) |
| 1280 | return 0; | 1281 | return 0; |
| 1281 | 1282 | ||
| 1282 | if (attr->ia_valid & ATTR_SIZE) { | 1283 | if (attr->ia_valid & ATTR_SIZE) |
| 1283 | err = inode_newsize_ok(inode, attr->ia_size); | ||
| 1284 | if (err) | ||
| 1285 | return err; | ||
| 1286 | is_truncate = true; | 1284 | is_truncate = true; |
| 1287 | } | ||
| 1288 | 1285 | ||
| 1289 | req = fuse_get_req(fc); | 1286 | req = fuse_get_req(fc); |
| 1290 | if (IS_ERR(req)) | 1287 | if (IS_ERR(req)) |
