vfs: make it possible to access the dentry hash/len as one 64-bit entry
This allows comparing hash and len in one operation on 64-bit architectures. Right now only __d_lookup_rcu() takes advantage of this, since that is the case we care most about. The use of anonymous struct/unions hides the alternate 64-bit approach from most users, the exception being a few cases where we initialize a 'struct qstr' with a static initializer. This makes the problematic cases use a new QSTR_INIT() helper function for that (but initializing just the name pointer with a "{ .name = xyzzy }" initializer remains valid, as does just copying another qstr structure). Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
このコミットが含まれているのは:
@@ -298,7 +298,7 @@ int ubifs_setxattr(struct dentry *dentry, const char *name,
|
||||
{
|
||||
struct inode *inode, *host = dentry->d_inode;
|
||||
struct ubifs_info *c = host->i_sb->s_fs_info;
|
||||
struct qstr nm = { .name = name, .len = strlen(name) };
|
||||
struct qstr nm = QSTR_INIT(name, strlen(name));
|
||||
struct ubifs_dent_node *xent;
|
||||
union ubifs_key key;
|
||||
int err, type;
|
||||
@@ -361,7 +361,7 @@ ssize_t ubifs_getxattr(struct dentry *dentry, const char *name, void *buf,
|
||||
{
|
||||
struct inode *inode, *host = dentry->d_inode;
|
||||
struct ubifs_info *c = host->i_sb->s_fs_info;
|
||||
struct qstr nm = { .name = name, .len = strlen(name) };
|
||||
struct qstr nm = QSTR_INIT(name, strlen(name));
|
||||
struct ubifs_inode *ui;
|
||||
struct ubifs_dent_node *xent;
|
||||
union ubifs_key key;
|
||||
@@ -524,7 +524,7 @@ int ubifs_removexattr(struct dentry *dentry, const char *name)
|
||||
{
|
||||
struct inode *inode, *host = dentry->d_inode;
|
||||
struct ubifs_info *c = host->i_sb->s_fs_info;
|
||||
struct qstr nm = { .name = name, .len = strlen(name) };
|
||||
struct qstr nm = QSTR_INIT(name, strlen(name));
|
||||
struct ubifs_dent_node *xent;
|
||||
union ubifs_key key;
|
||||
int err;
|
||||
|
新しいイシューから参照
ユーザーをブロックする