diff options
author | David Howells <dhowells@redhat.com> | 2014-09-18 00:28:38 +0200 |
---|---|---|
committer | David Howells <dhowells@redhat.com> | 2014-09-18 00:29:53 +0200 |
commit | e2cf1f1cc7636bd860e47cd0ad6194da8975f8b5 (patch) | |
tree | bbd2b0e992ad9fcdc71c929808e1222b082cbe53 | |
parent | cachefiles: remove two unused pagevecs. (diff) | |
download | linux-e2cf1f1cc7636bd860e47cd0ad6194da8975f8b5.tar.xz linux-e2cf1f1cc7636bd860e47cd0ad6194da8975f8b5.zip |
CacheFiles: Handle rename2
Not all filesystems now provide the rename i_op - ext4 for one - but rather
provide the rename2 i_op. CacheFiles checks that the filesystem has rename
and so will reject ext4 now with EPERM:
CacheFiles: Failed to register: -1
Fix this by checking for rename2 as an alternative. The call to vfs_rename()
actually handles selection of the appropriate function, so we needn't worry
about that.
Turning on debugging shows:
[cachef] ==> cachefiles_get_directory(,,cache)
[cachef] subdir -> ffff88000b22b778 positive
[cachef] <== cachefiles_get_directory() = -1 [check]
where -1 is EPERM.
Signed-off-by: David Howells <dhowells@redhat.com>
-rw-r--r-- | fs/cachefiles/namei.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/fs/cachefiles/namei.c b/fs/cachefiles/namei.c index 5bf2b41e66d3..83e9c94ca2cf 100644 --- a/fs/cachefiles/namei.c +++ b/fs/cachefiles/namei.c @@ -779,7 +779,8 @@ struct dentry *cachefiles_get_directory(struct cachefiles_cache *cache, !subdir->d_inode->i_op->lookup || !subdir->d_inode->i_op->mkdir || !subdir->d_inode->i_op->create || - !subdir->d_inode->i_op->rename || + (!subdir->d_inode->i_op->rename && + !subdir->d_inode->i_op->rename2) || !subdir->d_inode->i_op->rmdir || !subdir->d_inode->i_op->unlink) goto check_error; |