diff options
author | Shirish Pargaonkar <shirishpargaonkar@gmail.com> | 2012-09-28 12:21:14 -0500 |
---|---|---|
committer | Steve French <smfrench@gmail.com> | 2012-09-28 15:32:28 -0500 |
commit | c052e2b423f3eabe9f3f32e60744afa5cf26f6b9 (patch) | |
tree | 03530fe0622d19a7d4e8d80e4e17e7681e95dc42 /fs/cifs/cifsproto.h | |
parent | f065fd099fc475333fc7a55677a7f64764445d55 (diff) | |
download | linux-stable-c052e2b423f3eabe9f3f32e60744afa5cf26f6b9.tar.gz linux-stable-c052e2b423f3eabe9f3f32e60744afa5cf26f6b9.tar.bz2 linux-stable-c052e2b423f3eabe9f3f32e60744afa5cf26f6b9.zip |
cifs: obtain file access during backup intent lookup (resend)
Rebased and resending the patch.
Path based queries can fail for lack of access, especially during lookup
during open.
open itself would actually succeed becasue of back up intent bit
but queries (either path or file handle based) do not have a means to
specifiy backup intent bit.
So query the file info during lookup using
trans2 / findfirst / file_id_full_dir_info
to obtain file info as well as file_id/inode value.
Signed-off-by: Shirish Pargaonkar <shirishpargaonkar@gmail.com>
Acked-by: Jeff Layton <jlayton@samba.org>
Signed-off-by: Steve French <smfrench@gmail.com>
Diffstat (limited to 'fs/cifs/cifsproto.h')
-rw-r--r-- | fs/cifs/cifsproto.h | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/fs/cifs/cifsproto.h b/fs/cifs/cifsproto.h index 09ea6321c55a..5144e9fbeb8c 100644 --- a/fs/cifs/cifsproto.h +++ b/fs/cifs/cifsproto.h @@ -140,6 +140,8 @@ void cifs_fill_uniqueid(struct super_block *sb, struct cifs_fattr *fattr); extern void cifs_unix_basic_to_fattr(struct cifs_fattr *fattr, FILE_UNIX_BASIC_INFO *info, struct cifs_sb_info *cifs_sb); +extern void cifs_dir_info_to_fattr(struct cifs_fattr *, FILE_DIRECTORY_INFO *, + struct cifs_sb_info *); extern void cifs_fattr_to_inode(struct inode *inode, struct cifs_fattr *fattr); extern struct inode *cifs_iget(struct super_block *sb, struct cifs_fattr *fattr); @@ -216,10 +218,10 @@ extern int CIFSTCon(const unsigned int xid, struct cifs_ses *ses, const struct nls_table *); extern int CIFSFindFirst(const unsigned int xid, struct cifs_tcon *tcon, - const char *searchName, const struct nls_table *nls_codepage, + const char *searchName, struct cifs_sb_info *cifs_sb, __u16 *searchHandle, __u16 search_flags, struct cifs_search_info *psrch_inf, - int map, const char dirsep); + bool msearch); extern int CIFSFindNext(const unsigned int xid, struct cifs_tcon *tcon, __u16 searchHandle, __u16 search_flags, |