projects
/
platform
/
adaptation
/
renesas_rcar
/
renesas_kernel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[readdir] convert ncpfs
[platform/adaptation/renesas_rcar/renesas_kernel.git]
/
fs
/
ncpfs
/
dir.c
diff --git
a/fs/ncpfs/dir.c
b/fs/ncpfs/dir.c
index
6792ce1
..
0e7f002
100644
(file)
--- a/
fs/ncpfs/dir.c
+++ b/
fs/ncpfs/dir.c
@@
-23,12
+23,12
@@
#include "ncp_fs.h"
#include "ncp_fs.h"
-static void ncp_read_volume_list(struct file *,
void *, filldir_t
,
+static void ncp_read_volume_list(struct file *,
struct dir_context *
,
struct ncp_cache_control *);
struct ncp_cache_control *);
-static void ncp_do_readdir(struct file *,
void *, filldir_t
,
+static void ncp_do_readdir(struct file *,
struct dir_context *
,
struct ncp_cache_control *);
struct ncp_cache_control *);
-static int ncp_readdir(struct file *,
void *, filldir_t
);
+static int ncp_readdir(struct file *,
struct dir_context *
);
static int ncp_create(struct inode *, struct dentry *, umode_t, bool);
static struct dentry *ncp_lookup(struct inode *, struct dentry *, unsigned int);
static int ncp_create(struct inode *, struct dentry *, umode_t, bool);
static struct dentry *ncp_lookup(struct inode *, struct dentry *, unsigned int);
@@
-49,7
+49,7
@@
const struct file_operations ncp_dir_operations =
{
.llseek = generic_file_llseek,
.read = generic_read_dir,
{
.llseek = generic_file_llseek,
.read = generic_read_dir,
- .
readdir
= ncp_readdir,
+ .
iterate
= ncp_readdir,
.unlocked_ioctl = ncp_ioctl,
#ifdef CONFIG_COMPAT
.compat_ioctl = ncp_compat_ioctl,
.unlocked_ioctl = ncp_ioctl,
#ifdef CONFIG_COMPAT
.compat_ioctl = ncp_compat_ioctl,
@@
-424,9
+424,9
@@
static time_t ncp_obtain_mtime(struct dentry *dentry)
return ncp_date_dos2unix(i.modifyTime, i.modifyDate);
}
return ncp_date_dos2unix(i.modifyTime, i.modifyDate);
}
-static int ncp_readdir(struct file *fil
p, void *dirent, filldir_t filldir
)
+static int ncp_readdir(struct file *fil
e, struct dir_context *ctx
)
{
{
- struct dentry *dentry = fil
p
->f_path.dentry;
+ struct dentry *dentry = fil
e
->f_path.dentry;
struct inode *inode = dentry->d_inode;
struct page *page = NULL;
struct ncp_server *server = NCP_SERVER(inode);
struct inode *inode = dentry->d_inode;
struct page *page = NULL;
struct ncp_server *server = NCP_SERVER(inode);
@@
-440,7
+440,7
@@
static int ncp_readdir(struct file *filp, void *dirent, filldir_t filldir)
DDPRINTK("ncp_readdir: reading %s/%s, pos=%d\n",
dentry->d_parent->d_name.name, dentry->d_name.name,
DDPRINTK("ncp_readdir: reading %s/%s, pos=%d\n",
dentry->d_parent->d_name.name, dentry->d_name.name,
- (int)
filp->f_
pos);
+ (int)
ctx->
pos);
result = -EIO;
/* Do not generate '.' and '..' when server is dead. */
result = -EIO;
/* Do not generate '.' and '..' when server is dead. */
@@
-448,16
+448,8
@@
static int ncp_readdir(struct file *filp, void *dirent, filldir_t filldir)
goto out;
result = 0;
goto out;
result = 0;
- if (filp->f_pos == 0) {
- if (filldir(dirent, ".", 1, 0, inode->i_ino, DT_DIR))
- goto out;
- filp->f_pos = 1;
- }
- if (filp->f_pos == 1) {
- if (filldir(dirent, "..", 2, 1, parent_ino(dentry), DT_DIR))
- goto out;
- filp->f_pos = 2;
- }
+ if (!dir_emit_dots(file, ctx))
+ goto out;
page = grab_cache_page(&inode->i_data, 0);
if (!page)
page = grab_cache_page(&inode->i_data, 0);
if (!page)
@@
-469,7
+461,7
@@
static int ncp_readdir(struct file *filp, void *dirent, filldir_t filldir)
if (!PageUptodate(page) || !ctl.head.eof)
goto init_cache;
if (!PageUptodate(page) || !ctl.head.eof)
goto init_cache;
- if (
filp->f_
pos == 2) {
+ if (
ctx->
pos == 2) {
if (jiffies - ctl.head.time >= NCP_MAX_AGE(server))
goto init_cache;
if (jiffies - ctl.head.time >= NCP_MAX_AGE(server))
goto init_cache;
@@
-479,10
+471,10
@@
static int ncp_readdir(struct file *filp, void *dirent, filldir_t filldir)
goto init_cache;
}
goto init_cache;
}
- if (
filp->f_
pos > ctl.head.end)
+ if (
ctx->
pos > ctl.head.end)
goto finished;
goto finished;
- ctl.fpos =
filp->f_
pos + (NCP_DIRCACHE_START - 2);
+ ctl.fpos =
ctx->
pos + (NCP_DIRCACHE_START - 2);
ctl.ofs = ctl.fpos / NCP_DIRCACHE_SIZE;
ctl.idx = ctl.fpos % NCP_DIRCACHE_SIZE;
ctl.ofs = ctl.fpos / NCP_DIRCACHE_SIZE;
ctl.idx = ctl.fpos % NCP_DIRCACHE_SIZE;
@@
-497,21
+489,21
@@
static int ncp_readdir(struct file *filp, void *dirent, filldir_t filldir)
}
while (ctl.idx < NCP_DIRCACHE_SIZE) {
struct dentry *dent;
}
while (ctl.idx < NCP_DIRCACHE_SIZE) {
struct dentry *dent;
-
int res
;
+
bool over
;
dent = ncp_dget_fpos(ctl.cache->dentry[ctl.idx],
dent = ncp_dget_fpos(ctl.cache->dentry[ctl.idx],
- dentry,
filp->f_
pos);
+ dentry,
ctx->
pos);
if (!dent)
goto invalid_cache;
if (!dent)
goto invalid_cache;
-
res = filldir(dirent
, dent->d_name.name,
- dent->d_name.len,
filp->f_pos,
+
over = !dir_emit(ctx
, dent->d_name.name,
+ dent->d_name.len,
dent->d_inode->i_ino, DT_UNKNOWN);
dput(dent);
dent->d_inode->i_ino, DT_UNKNOWN);
dput(dent);
- if (
res
)
+ if (
over
)
goto finished;
goto finished;
-
filp->f_
pos += 1;
+
ctx->
pos += 1;
ctl.idx += 1;
ctl.idx += 1;
- if (
filp->f_
pos > ctl.head.end)
+ if (
ctx->
pos > ctl.head.end)
goto finished;
}
if (ctl.page) {
goto finished;
}
if (ctl.page) {
@@
-548,9
+540,9
@@
init_cache:
ctl.valid = 1;
read_really:
if (ncp_is_server_root(inode)) {
ctl.valid = 1;
read_really:
if (ncp_is_server_root(inode)) {
- ncp_read_volume_list(fil
p, dirent, filldir
, &ctl);
+ ncp_read_volume_list(fil
e, ctx
, &ctl);
} else {
} else {
- ncp_do_readdir(fil
p, dirent, filldir
, &ctl);
+ ncp_do_readdir(fil
e, ctx
, &ctl);
}
ctl.head.end = ctl.fpos - 1;
ctl.head.eof = ctl.valid;
}
ctl.head.end = ctl.fpos - 1;
ctl.head.eof = ctl.valid;
@@
-573,11
+565,11
@@
out:
}
static int
}
static int
-ncp_fill_cache(struct file *fil
p, void *dirent, filldir_t filldir
,
+ncp_fill_cache(struct file *fil
e, struct dir_context *ctx
,
struct ncp_cache_control *ctrl, struct ncp_entry_info *entry,
int inval_childs)
{
struct ncp_cache_control *ctrl, struct ncp_entry_info *entry,
int inval_childs)
{
- struct dentry *newdent, *dentry = fil
p
->f_path.dentry;
+ struct dentry *newdent, *dentry = fil
e
->f_path.dentry;
struct inode *dir = dentry->d_inode;
struct ncp_cache_control ctl = *ctrl;
struct qstr qname;
struct inode *dir = dentry->d_inode;
struct ncp_cache_control ctl = *ctrl;
struct qstr qname;
@@
-666,15
+658,15
@@
ncp_fill_cache(struct file *filp, void *dirent, filldir_t filldir,
end_advance:
if (!valid)
ctl.valid = 0;
end_advance:
if (!valid)
ctl.valid = 0;
- if (!ctl.filled && (ctl.fpos ==
filp->f_
pos)) {
+ if (!ctl.filled && (ctl.fpos ==
ctx->
pos)) {
if (!ino)
ino = find_inode_number(dentry, &qname);
if (!ino)
ino = iunique(dir->i_sb, 2);
if (!ino)
ino = find_inode_number(dentry, &qname);
if (!ino)
ino = iunique(dir->i_sb, 2);
- ctl.filled =
filldir(dirent
, qname.name, qname.len,
-
filp->f_pos,
ino, DT_UNKNOWN);
+ ctl.filled =
!dir_emit(ctx
, qname.name, qname.len,
+ ino, DT_UNKNOWN);
if (!ctl.filled)
if (!ctl.filled)
-
filp->f_
pos += 1;
+
ctx->
pos += 1;
}
ctl.fpos += 1;
ctl.idx += 1;
}
ctl.fpos += 1;
ctl.idx += 1;
@@
-683,10
+675,10
@@
end_advance:
}
static void
}
static void
-ncp_read_volume_list(struct file *fil
p, void *dirent, filldir_t filldir
,
+ncp_read_volume_list(struct file *fil
e, struct dir_context *ctx
,
struct ncp_cache_control *ctl)
{
struct ncp_cache_control *ctl)
{
- struct dentry *dentry = fil
p
->f_path.dentry;
+ struct dentry *dentry = fil
e
->f_path.dentry;
struct inode *inode = dentry->d_inode;
struct ncp_server *server = NCP_SERVER(inode);
struct ncp_volume_info info;
struct inode *inode = dentry->d_inode;
struct ncp_server *server = NCP_SERVER(inode);
struct ncp_volume_info info;
@@
-694,7
+686,7
@@
ncp_read_volume_list(struct file *filp, void *dirent, filldir_t filldir,
int i;
DPRINTK("ncp_read_volume_list: pos=%ld\n",
int i;
DPRINTK("ncp_read_volume_list: pos=%ld\n",
- (unsigned long)
filp->f_
pos);
+ (unsigned long)
ctx->
pos);
for (i = 0; i < NCP_NUMBER_OF_VOLUMES; i++) {
int inval_dentry;
for (i = 0; i < NCP_NUMBER_OF_VOLUMES; i++) {
int inval_dentry;
@@
-715,16
+707,16
@@
ncp_read_volume_list(struct file *filp, void *dirent, filldir_t filldir,
}
inval_dentry = ncp_update_known_namespace(server, entry.i.volNumber, NULL);
entry.volume = entry.i.volNumber;
}
inval_dentry = ncp_update_known_namespace(server, entry.i.volNumber, NULL);
entry.volume = entry.i.volNumber;
- if (!ncp_fill_cache(fil
p, dirent, filldir
, ctl, &entry, inval_dentry))
+ if (!ncp_fill_cache(fil
e, ctx
, ctl, &entry, inval_dentry))
return;
}
}
static void
return;
}
}
static void
-ncp_do_readdir(struct file *fil
p, void *dirent, filldir_t filldir
,
+ncp_do_readdir(struct file *fil
e, struct dir_context *ctx
,
struct ncp_cache_control *ctl)
{
struct ncp_cache_control *ctl)
{
- struct dentry *dentry = fil
p
->f_path.dentry;
+ struct dentry *dentry = fil
e
->f_path.dentry;
struct inode *dir = dentry->d_inode;
struct ncp_server *server = NCP_SERVER(dir);
struct nw_search_sequence seq;
struct inode *dir = dentry->d_inode;
struct ncp_server *server = NCP_SERVER(dir);
struct nw_search_sequence seq;
@@
-736,7
+728,7
@@
ncp_do_readdir(struct file *filp, void *dirent, filldir_t filldir,
DPRINTK("ncp_do_readdir: %s/%s, fpos=%ld\n",
dentry->d_parent->d_name.name, dentry->d_name.name,
DPRINTK("ncp_do_readdir: %s/%s, fpos=%ld\n",
dentry->d_parent->d_name.name, dentry->d_name.name,
- (unsigned long)
filp->f_
pos);
+ (unsigned long)
ctx->
pos);
PPRINTK("ncp_do_readdir: init %s, volnum=%d, dirent=%u\n",
dentry->d_name.name, NCP_FINFO(dir)->volNumber,
NCP_FINFO(dir)->dirEntNum);
PPRINTK("ncp_do_readdir: init %s, volnum=%d, dirent=%u\n",
dentry->d_name.name, NCP_FINFO(dir)->volNumber,
NCP_FINFO(dir)->dirEntNum);
@@
-778,7
+770,7
@@
ncp_do_readdir(struct file *filp, void *dirent, filldir_t filldir,
rpl += onerpl;
rpls -= onerpl;
entry.volume = entry.i.volNumber;
rpl += onerpl;
rpls -= onerpl;
entry.volume = entry.i.volNumber;
- if (!ncp_fill_cache(fil
p, dirent, filldir
, ctl, &entry, 0))
+ if (!ncp_fill_cache(fil
e, ctx
, ctl, &entry, 0))
break;
}
} while (more);
break;
}
} while (more);