Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Functions | Variables
dir.c File Reference
#include <linux/buffer_head.h>
#include <linux/slab.h>
#include "dir.h"
#include "aops.h"
#include "attrib.h"
#include "mft.h"
#include "debug.h"
#include "ntfs.h"

Go to the source code of this file.

Functions

MFT_REF ntfs_lookup_inode_by_name (ntfs_inode *dir_ni, const ntfschar *uname, const int uname_len, ntfs_name **res)
 

Variables

ntfschar I30 [5]
 

to the loaded NLS and pass it to the @filldir

callback.

If is not NULL it is the locked page containing the index allocation block containing the index entry .

Note, we drop (and then reacquire) the page lock on across the () call otherwise we would deadlock with NFSd when it calls ->lookup since ntfs_lookup() will lock the same page. As an optimization, we do not retake the lock if we are returning a non-zero value as ntfs_readdir() would need to drop the lock immediately anyway.

struct file_operations ntfs_dir_ops
 

Function Documentation

MFT_REF ntfs_lookup_inode_by_name ( ntfs_inode dir_ni,
const ntfschar uname,
const int  uname_len,
ntfs_name **  res 
)

ntfs_lookup_inode_by_name - find an inode in a directory given its name : ntfs inode of the directory in which to search for the name : Unicode name for which to search in the directory : length of the name in Unicode characters : return the found file name if necessary (see below)

Look for an inode with name in the directory with inode . ntfs_lookup_inode_by_name() walks the contents of the directory looking for the Unicode name. If the name is found in the directory, the corresponding inode number (>= 0) is returned as a mft reference in cpu format, i.e. it is a 64-bit number containing the sequence number.

On error, a negative value is returned corresponding to the error code. In particular if the inode is not found -ENOENT is returned. Note that you can't just check the return value for being negative, you have to check the inode number for being negative which you can extract using MREC(return value).

Note, does not include the (optional) terminating NULL character.

Note, we look for a case sensitive match first but we also look for a case insensitive match at the same time. If we find a case insensitive match, we save that for the case that we don't find an exact match, where we return the case insensitive match and setup (which we allocate!) with the mft reference, the file name type, length and with a copy of the little endian Unicode file name itself. If we match a file name which is in the DOS name space, we only return the mft reference and file name type in . ntfs_lookup() then uses this to find the long file name in the inode itself. This is to avoid polluting the dcache with short file names. We want them to work but we don't care for how quickly one can access them. This also fixes the dcache aliasing issues.

Locking: - Caller must hold i_mutex on the directory.

  • Each page cache page in the index allocation mapping must be locked whilst being accessed otherwise we may find a corrupt page due to it being under ->writepage at the moment which applies the mst protection fixups before writing out and then removes them again after the write is complete after which it unlocks the page.

Definition at line 80 of file dir.c.

Variable Documentation

ntfschar I30[5]
Initial value:
= { cpu_to_le16('$'), cpu_to_le16('I'),
cpu_to_le16('3'), cpu_to_le16('0'), 0 }

dir.c - NTFS kernel directory operations. Part of the Linux-NTFS project.

Copyright (c) 2001-2007 Anton Altaparmakov Copyright (c) 2002 Richard Russon

This program/include file is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This program/include file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program (in the main directory of the Linux-NTFS distribution in the file COPYING); if not, write to the Free Software Foundation,Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA The little endian Unicode string $I30 as a global constant.

Definition at line 36 of file dir.c.

struct file_operations ntfs_dir_ops
Initial value:
= {
.llseek = generic_file_llseek,
.read = generic_read_dir,
.readdir = ntfs_readdir,
.open = ntfs_dir_open,
}

Definition at line 1571 of file dir.c.