The Samba-Bugzilla – Attachment 9370 Details for
Bug 8950
mount.cifs unable to access shares with read restricted at root level.
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
create placeholder inodes for intermediate dentries
8950.2.patch (text/plain), 2.18 KB, created by
shirishpargaonkar@gmail.com
on 2013-11-04 17:05:00 UTC
(
hide
)
Description:
create placeholder inodes for intermediate dentries
Filename:
MIME Type:
Creator:
shirishpargaonkar@gmail.com
Created:
2013-11-04 17:05:00 UTC
Size:
2.18 KB
patch
obsolete
>diff --git a/fs/cifs/cifsfs.c b/fs/cifs/cifsfs.c >index 77fc5e1..665a9ea 100644 >--- a/fs/cifs/cifsfs.c >+++ b/fs/cifs/cifsfs.c >@@ -572,6 +572,22 @@ static const struct super_operations cifs_super_ops = { > #endif > }; > >+static void >+fill_phfattr(struct cifs_fattr *cf, struct super_block *sb) >+{ >+ struct cifs_sb_info *cifs_sb = CIFS_SB(sb); >+ >+ memset(cf, 0, sizeof(*cf)); >+ cf->cf_uniqueid = iunique(sb, ROOT_I); >+ cf->cf_nlink = 1; >+ cf->cf_atime = CURRENT_TIME; >+ cf->cf_ctime = CURRENT_TIME; >+ cf->cf_mtime = CURRENT_TIME; >+ cf->cf_mode = S_IFDIR | S_IXUGO | S_IRWXU; >+ cf->cf_uid = cifs_sb->mnt_uid; >+ cf->cf_gid = cifs_sb->mnt_gid; >+} >+ > /* > * Get root dentry from superblock according to prefix path mount option. > * Return dentry with refcount + 1 on success and NULL otherwise. >@@ -584,6 +600,9 @@ cifs_get_root(struct smb_vol *vol, struct super_block *sb) > char *full_path = NULL; > char *s, *p; > char sep; >+ struct inode *dir, *phinode; >+ struct dentry *child; >+ struct cifs_fattr phfattr; > > full_path = cifs_build_path_to_root(vol, cifs_sb, > cifs_sb_master_tcon(cifs_sb)); >@@ -592,13 +611,13 @@ cifs_get_root(struct smb_vol *vol, struct super_block *sb) > > cifs_dbg(FYI, "Get root dentry for %s\n", full_path); > >+ fill_phfattr(&phfattr, sb); > sep = CIFS_DIR_SEP(cifs_sb); > dentry = dget(sb->s_root); > p = s = full_path; > > do { >- struct inode *dir = dentry->d_inode; >- struct dentry *child; >+ dir = dentry->d_inode; > > if (!dir) { > dput(dentry); >@@ -626,6 +645,16 @@ cifs_get_root(struct smb_vol *vol, struct super_block *sb) > mutex_unlock(&dir->i_mutex); > dput(dentry); > dentry = child; >+ if (!IS_ERR(dentry)) { >+ if (*s) { >+ if (!dentry->d_inode) { >+ phinode = cifs_iget(sb, &phfattr); >+ if (phinode) >+ d_instantiate( >+ dentry, phinode); >+ } >+ } >+ } > } while (!IS_ERR(dentry)); > kfree(full_path); > return dentry; >diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c >index 867b7cd..e61c439 100644 >--- a/fs/cifs/inode.c >+++ b/fs/cifs/inode.c >@@ -1816,6 +1816,7 @@ int cifs_revalidate_dentry(struct dentry *dentry) > int rc; > struct inode *inode = dentry->d_inode; > >+ dump_stack(); // XXX > rc = cifs_revalidate_dentry_attr(dentry); > if (rc) > return rc;
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 8950
:
9369
|
9370
|
9414
|
9727
|
9787
|
9976
|
11762