sdcardfs: Port to 3.4
Analog port to 3.10 by Daniel Campello <campello@google.com>.
Change-Id: I0b05890cdd4332c5cfc2ffdf66a3f3a7890cce35
diff --git a/fs/sdcardfs/sdcardfs.h b/fs/sdcardfs/sdcardfs.h
index 90f8b24..f666eff 100644
--- a/fs/sdcardfs/sdcardfs.h
+++ b/fs/sdcardfs/sdcardfs.h
@@ -160,6 +160,8 @@
extern void free_dentry_private_data(struct dentry *dentry);
extern struct dentry *sdcardfs_lookup(struct inode *dir, struct dentry *dentry,
struct nameidata *nd);
+extern struct inode *sdcardfs_iget(struct super_block *sb,
+ struct inode *lower_inode);
extern int sdcardfs_interpose(struct dentry *dentry, struct super_block *sb,
struct path *lower_path);
@@ -402,16 +404,9 @@
int err;
struct dentry *dent;
struct iattr attrs;
- struct nameidata nd;
+ struct path parent;
- err = kern_path_parent(path_s, &nd);
- if (err) {
- if (err == -EEXIST)
- err = 0;
- goto out;
- }
-
- dent = lookup_create(&nd, 1);
+ dent = kern_path_locked(path_s, &parent);
if (IS_ERR(dent)) {
err = PTR_ERR(dent);
if (err == -EEXIST)
@@ -419,7 +414,7 @@
goto out_unlock;
}
- err = vfs_mkdir(nd.path.dentry->d_inode, dent, mode);
+ err = vfs_mkdir(parent.dentry->d_inode, dent, mode);
if (err) {
if (err == -EEXIST)
err = 0;
@@ -438,10 +433,9 @@
out_unlock:
/* parent dentry locked by lookup_create */
- mutex_unlock(&nd.path.dentry->d_inode->i_mutex);
- path_put(&nd.path);
+ mutex_unlock(&parent.dentry->d_inode->i_mutex);
+ path_put(&parent);
-out:
return err;
}