if (allocation_size < end_of_file)
cFYI(1, ("May be sparse file, allocation less than file size"));
- cFYI(1, ("File Size %ld and blocks %llu and blocksize %ld",
- (unsigned long)tmp_inode->i_size,
- (unsigned long long)tmp_inode->i_blocks,
- tmp_inode->i_blksize));
+ cFYI(1,
+ ("File Size %ld and blocks %ld and blocksize %ld",
+ (unsigned long)tmp_inode->i_size, tmp_inode->i_blocks,
+ tmp_inode->i_blksize));
if (S_ISREG(tmp_inode->i_mode)) {
cFYI(1, ("File inode"));
tmp_inode->i_op = &cifs_file_inode_ops;
if(pTcon == NULL)
return -EINVAL;
+ down(&file->f_dentry->d_sb->s_vfs_rename_sem);
full_path = build_path_from_dentry(file->f_dentry);
+ up(&file->f_dentry->d_sb->s_vfs_rename_sem);
if(full_path == NULL) {
return -ENOMEM;
first_entry_in_buffer =
cifsFile->srch_inf.index_of_last_entry -
cifsFile->srch_inf.entries_in_buffer;
-
- /* if first entry in buf is zero then is first buffer
- in search response data which means it is likely . and ..
- will be in this buffer, although some servers do not return
- . and .. for the root of a drive and for those we need
- to start two entries earlier */
-
/* dump_cifs_file_struct(file, "In fce ");*/
if(((index_to_find < cifsFile->srch_inf.index_of_last_entry) &&
is_dir_changed(file)) ||
cifsFile->search_resume_name = NULL;
if(cifsFile->srch_inf.ntwrk_buf_start) {
cFYI(1,("freeing SMB ff cache buf on search rewind"));
- if(cifsFile->srch_inf.smallBuf)
- cifs_small_buf_release(cifsFile->srch_inf.
- ntwrk_buf_start);
- else
- cifs_buf_release(cifsFile->srch_inf.
- ntwrk_buf_start);
+ cifs_buf_release(cifsFile->srch_inf.ntwrk_buf_start);
}
rc = initiate_cifs_search(xid,file);
if(rc) {
char * end_of_smb = cifsFile->srch_inf.ntwrk_buf_start +
smbCalcSize((struct smb_hdr *)
cifsFile->srch_inf.ntwrk_buf_start);
-
- current_entry = cifsFile->srch_inf.srch_entries_start;
first_entry_in_buffer = cifsFile->srch_inf.index_of_last_entry
- cifsFile->srch_inf.entries_in_buffer;
pos_in_buf = index_to_find - first_entry_in_buffer;
cFYI(1,("found entry - pos_in_buf %d",pos_in_buf));
+ current_entry = cifsFile->srch_inf.srch_entries_start;
for(i=0;(i<(pos_in_buf)) && (current_entry != NULL);i++) {
/* go entry by entry figuring out which is first */
+ /* if( . or ..)
+ skip */
+ rc = cifs_entry_is_dot(current_entry,cifsFile);
+ if(rc == 1) /* is . or .. so skip */ {
+ cFYI(1,("Entry is .")); /* BB removeme BB */
+ /* continue; */
+ } else if (rc == 2 ) {
+ cFYI(1,("Entry is ..")); /* BB removeme BB */
+ /* continue; */
+ }
current_entry = nxt_dir_entry(current_entry,end_of_smb);
}
if((current_entry == NULL) && (i < pos_in_buf)) {
if(file->f_dentry == NULL)
return -ENOENT;
- rc = cifs_entry_is_dot(pfindEntry,pCifsF);
- /* skip . and .. since we added them first */
- if(rc != 0)
- return 0;
-
cifs_sb = CIFS_SB(file->f_dentry->d_sb);
qstring.name = scratch_buf;
switch ((int) file->f_pos) {
case 0:
- if (filldir(direntry, ".", 1, file->f_pos,
+ /*if (filldir(direntry, ".", 1, file->f_pos,
file->f_dentry->d_inode->i_ino, DT_DIR) < 0) {
- cERROR(1, ("Filldir for current dir failed"));
+ cERROR(1, ("Filldir for current dir failed "));
rc = -ENOMEM;
break;
}
- file->f_pos++;
+ file->f_pos++; */
case 1:
- if (filldir(direntry, "..", 2, file->f_pos,
+ /* if (filldir(direntry, "..", 2, file->f_pos,
file->f_dentry->d_parent->d_inode->i_ino, DT_DIR) < 0) {
cERROR(1, ("Filldir for parent dir failed "));
rc = -ENOMEM;
break;
}
- file->f_pos++;
- default:
+ file->f_pos++; */
+ case 2:
/* 1) If search is active,
is in current search buffer?
if it before then restart search
return rc;
}
}
+ default:
if(file->private_data == NULL) {
rc = -EINVAL;
FreeXid(xid);
kfree(cifsFile->search_resume_name);
cifsFile->search_resume_name = NULL; */
+ /* BB account for . and .. in f_pos as special case */
+
rc = find_cifs_entry(xid,pTcon, file,
¤t_entry,&num_to_fill);
if(rc) {
num_to_fill, i));
break;
}
- /* if buggy server returns . and .. late do
- we want to check for that here? */
+
rc = cifs_filldir(current_entry, file,
filldir, direntry,tmp_buf);
file->f_pos++;