/* got to the end of the string */
return dir;
else{
- if(strcmp(str,_Y(".")) == 0)
- {
+ if(strcmp(str,_Y(".")) == 0){
/* Do nothing */
- }
- else if(strcmp(str,_Y("..")) == 0)
+ } else if(strcmp(str,_Y("..")) == 0) {
dir = dir->parent;
- else{
+ } else{
dir = yaffs_find_by_name(dir,str);
dir = yaffsfs_FollowLink(dir,symDepth,loop);
#define cond_resched() do {} while(0)
#define yaffs_trace(msk, fmt, ...) do { \
- if(yaffs_trace_mask & ((msk) | YAFFS_TRACE_ALWAYS)) \
+ if(yaffs_trace_mask & (msk)) \
printf("yaffs: " fmt "\n", ##__VA_ARGS__); \
} while(0)
/* With locking we can't assume we can use entry zero */
- the_obj = NULL;
+ the_obj = dev->cache[0].object;
usage = -1;
cache = NULL;
pushout = -1;
list_for_each(i, &dev->obj_bucket[bucket].list) {
/* Look if it is in the list */
- if (i) {
- in = list_entry(i, struct yaffs_obj, hash_link);
- if (in->obj_id == number) {
-
- /* Don't tell the VFS about this one if it is defered free */
- if (in->defered_free)
- return NULL;
-
- return in;
- }
+ in = list_entry(i, struct yaffs_obj, hash_link);
+ if (in->obj_id == number) {
+ /* Don't tell the VFS about this one if it is defered free */
+ if (in->defered_free)
+ return NULL;
+ return in;
}
}
int del_now = 0;
+ if(!obj)
+ return YAFFS_FAIL;
+
if (!obj->my_inode)
del_now = 1;
- if (obj)
- yaffs_update_parent(obj->parent);
+ yaffs_update_parent(obj->parent);
if (obj->variant_type == YAFFS_OBJECT_TYPE_HARDLINK) {
return yaffs_del_link(obj);
sum = yaffs_calc_name_sum(name);
list_for_each(i, &directory->variant.dir_variant.children) {
- if (i) {
- l = list_entry(i, struct yaffs_obj, siblings);
+ l = list_entry(i, struct yaffs_obj, siblings);
- if (l->parent != directory)
- YBUG();
+ if (l->parent != directory)
+ YBUG();
- yaffs_check_obj_details_loaded(l);
+ yaffs_check_obj_details_loaded(l);
- /* Special case for lost-n-found */
- if (l->obj_id == YAFFS_OBJECTID_LOSTNFOUND) {
- if (!strcmp(name, YAFFS_LOSTNFOUND_NAME))
- return l;
- } else if (l->sum == sum
- || l->hdr_chunk <= 0) {
- /* LostnFound chunk called Objxxx
- * Do a real check
- */
- yaffs_get_obj_name(l, buffer,
- YAFFS_MAX_NAME_LENGTH + 1);
- if (strncmp
- (name, buffer, YAFFS_MAX_NAME_LENGTH) == 0)
- return l;
- }
+ /* Special case for lost-n-found */
+ if (l->obj_id == YAFFS_OBJECTID_LOSTNFOUND) {
+ if (!strcmp(name, YAFFS_LOSTNFOUND_NAME))
+ return l;
+ } else if (l->sum == sum
+ || l->hdr_chunk <= 0) {
+ /* LostnFound chunk called Objxxx
+ * Do a real check
+ */
+ yaffs_get_obj_name(l, buffer,
+ YAFFS_MAX_NAME_LENGTH + 1);
+ if (strncmp(name, buffer, YAFFS_MAX_NAME_LENGTH) == 0)
+ return l;
}
}
deleted = !pt1.deleted;
pt1.deleted = 1;
#else
- deleted = (yaffs_count_bits(((u8 *) & pt1)[8]) < 7);
+ deleted = (hweight8(((u8 *) & pt1)[8]) < 7);
#endif
/* Check the packed tags mini-ECC and correct if necessary/possible.
deleted = !pt1.deleted;
pt1.deleted = 1;
#else
- deleted = (yaffs_count_bits(((u8 *) & pt1)[8]) < 7);
+ deleted = (hweight8(((u8 *) & pt1)[8]) < 7);
#endif
/* Check the packed tags mini-ECC and correct if necessary/possible.
} else {
yaffs_trace(YAFFS_TRACE_ERROR, "Writing with no tags");
YBUG();
+ return YAFFS_FAIL;
}
if (dev->param.write_chunk_tags_fn)
int ret_val;
struct yaffs_spare local_spare;
- if (!spare && data) {
+ if (!spare) {
/* If we don't have a real spare, then we use a local one. */
/* Need this for the calculation of the ecc */
spare = &local_spare;
struct yaffs_tags tags;
yaffs_spare_init(&spare);
-
+
if (ext_tags->is_deleted)
spare.page_status = 0;
else {
}
/*
- * Verify the object header. oh must be valid, but obj and tags may be NULL in which
- * case those tests will not be performed.
+ * Verify the object header. oh must be valid, but obj and tags may be NULL in
+ * which case those tests will not be performed.
*/
void yaffs_verify_oh(struct yaffs_obj *obj, struct yaffs_obj_hdr *oh,
struct yaffs_ext_tags *tags, int parent_check)
for (i = 0; i < YAFFS_NOBJECT_BUCKETS; i++) {
list_for_each(lh, &dev->obj_bucket[i].list) {
- if (lh) {
- obj =
- list_entry(lh, struct yaffs_obj, hash_link);
- yaffs_verify_obj(obj);
- }
+ obj = list_entry(lh, struct yaffs_obj, hash_link);
+ yaffs_verify_obj(obj);
}
}
}
/* Iterate through the objects in each hash entry */
list_for_each(lh, &obj->parent->variant.dir_variant.children) {
- if (lh) {
- list_obj = list_entry(lh, struct yaffs_obj, siblings);
- yaffs_verify_obj(list_obj);
- if (obj == list_obj)
- count++;
- }
+ list_obj = list_entry(lh, struct yaffs_obj, siblings);
+ yaffs_verify_obj(list_obj);
+ if (obj == list_obj)
+ count++;
}
if (count != 1) {
/* Iterate through the objects in each hash entry */
list_for_each(lh, &directory->variant.dir_variant.children) {
- if (lh) {
- list_obj = list_entry(lh, struct yaffs_obj, siblings);
- if (list_obj->parent != directory) {
- yaffs_trace(YAFFS_TRACE_ALWAYS,
- "Object in directory list has wrong parent %p",
- list_obj->parent);
- YBUG();
- }
- yaffs_verify_obj_in_dir(list_obj);
+ list_obj = list_entry(lh, struct yaffs_obj, siblings);
+ if (list_obj->parent != directory) {
+ yaffs_trace(YAFFS_TRACE_ALWAYS,
+ "Object in directory list has wrong parent %p",
+ list_obj->parent);
+ YBUG();
}
+ yaffs_verify_obj_in_dir(list_obj);
}
}
* the search context to the next object to prevent a hanging pointer.
*/
list_for_each(i, search_contexts) {
- if (i) {
- sc = list_entry(i, struct yaffs_search_context, others);
- if (sc->next_return == obj)
- yaffs_search_advance(sc);
- }
+ sc = list_entry(i, struct yaffs_search_context, others);
+ if (sc->next_return == obj)
+ yaffs_search_advance(sc);
}
}
yaffs_trace(YAFFS_TRACE_OS,
"yaffs_evict_inode: ino %d, count %d %s",
(int)inode->i_ino, atomic_read(&inode->i_count),
- obj ? "object exists" : "null object"));
+ obj ? "object exists" : "null object");
if (!inode->i_nlink && !is_bad_inode(inode))
deleteme = 1;
obj = yaffs_dentry_to_obj(f->f_dentry);
+ if (!obj) {
+ yaffs_trace(YAFFS_TRACE_OS,
+ "yaffs_file_write: hey obj is null!");
+ return -EINVAL;
+ }
+
dev = obj->my_dev;
yaffs_gross_lock(dev);
else
ipos = *pos;
- if (!obj)
- yaffs_trace(YAFFS_TRACE_OS,
- "yaffs_file_write: hey obj is null!");
- else
- yaffs_trace(YAFFS_TRACE_OS,
- "yaffs_file_write about to write writing %u(%x) bytes to object %d at %d(%x)",
- (unsigned)n, (unsigned)n, obj->obj_id, ipos, ipos);
+ yaffs_trace(YAFFS_TRACE_OS,
+ "yaffs_file_write about to write writing %u(%x) bytes to object %d at %d(%x)",
+ (unsigned)n, (unsigned)n, obj->obj_id, ipos, ipos);
n_written = yaffs_wr_file(obj, buf, ipos, n, 0);
struct yaffs_linux_context *context_iterator;
struct list_head *l;
+ if (!sb) {
+ printk(KERN_INFO "yaffs: sb is NULL\n");
+ return NULL;
+ }
+
sb->s_magic = YAFFS_MAGIC;
sb->s_op = &yaffs_super_ops;
sb->s_flags |= MS_NOATIME;
sb->s_export_op = &yaffs_export_ops;
#endif
- if (!sb)
- printk(KERN_INFO "yaffs: sb is NULL\n");
- else if (!sb->s_dev)
+ if (!sb->s_dev)
printk(KERN_INFO "yaffs: sb->s_dev is NULL\n");
else if (!yaffs_devname(sb, devname_buf))
printk(KERN_INFO "yaffs: devname is NULL\n");
#include <linux/statfs.h>
-#define UnlockPage(p) unlock_page(p)
-#define Page_Uptodate(page) test_bit(PG_uptodate, &(page)->flags)
-
#define yaffs_devname(sb, buf) bdevname(sb->s_bdev, buf)
#define YPROC_ROOT NULL
* the search context to the next object to prevent a hanging pointer.
*/
list_for_each(i, search_contexts) {
- if (i) {
- sc = list_entry(i, struct yaffs_search_context, others);
- if (sc->next_return == obj)
- yaffs_search_advance(sc);
- }
+ sc = list_entry(i, struct yaffs_search_context, others);
+ if (sc->next_return == obj)
+ yaffs_search_advance(sc);
}
}
static int yaffs_readpage_unlock(struct file *f, struct page *pg)
{
int ret = yaffs_readpage_nolock(f, pg);
- UnlockPage(pg);
+ unlock_page(pg);
return ret;
}
}
yaffs_trace(YAFFS_TRACE_OS,
"start yaffs_write_begin index %d(%x) uptodate %d",
- (int)index, (int)index, Page_Uptodate(pg) ? 1 : 0);
+ (int)index, (int)index, PageUptodate(pg) ? 1 : 0);
/* Get fs space */
space_held = yaffs_hold_space(filp);
/* Update page if required */
- if (!Page_Uptodate(pg))
+ if (!PageUptodate(pg))
ret = yaffs_readpage_nolock(filp, pg);
if (ret)
obj = yaffs_dentry_to_obj(f->f_dentry);
+ if (!obj) {
+ /* This should not happen */
+ yaffs_trace(YAFFS_TRACE_OS,
+ "yaffs_file_write: hey obj is null!");
+ return -ENINVAL;
+ }
+
dev = obj->my_dev;
yaffs_gross_lock(dev);
else
ipos = *pos;
- if (!obj)
- yaffs_trace(YAFFS_TRACE_OS,
- "yaffs_file_write: hey obj is null!");
- else
- yaffs_trace(YAFFS_TRACE_OS,
- "yaffs_file_write about to write writing %u(%x) bytes to object %d at %d(%x)",
- (unsigned)n, (unsigned)n, obj->obj_id, ipos, ipos);
+ yaffs_trace(YAFFS_TRACE_OS,
+ "yaffs_file_write about to write writing %u(%x) bytes to object %d at %d(%x)",
+ (unsigned)n, (unsigned)n, obj->obj_id, ipos, ipos);
n_written = yaffs_wr_file(obj, buf, ipos, n, 0);
struct yaffs_linux_context *context_iterator;
struct list_head *l;
+ if (!sb) {
+ printk(KERN_INFO "yaffs: sb is NULL\n");
+ return NULL;
+ }
+
sb->s_magic = YAFFS_MAGIC;
sb->s_op = &yaffs_super_ops;
sb->s_flags |= MS_NOATIME;
sb->s_export_op = &yaffs_export_ops;
- if (!sb)
- printk(KERN_INFO "yaffs: sb is NULL\n");
- else if (!sb->s_dev)
+ if (!sb->s_dev)
printk(KERN_INFO "yaffs: sb->s_dev is NULL\n");
else if (!yaffs_devname(sb, devname_buf))
printk(KERN_INFO "yaffs: devname is NULL\n");
*/
deleted++;
dev->n_free_chunks++;
- /*T((" %d %d deleted\n",blk,c)); */
} else if (!tags.chunk_used) {
/* An unassigned chunk in the block
* This means that either the block is empty or
}
}
- /* T((" %d %d data %d %d\n",blk,c,tags.obj_id,tags.chunk_id)); */
} else {
/* chunk_id == 0, so it is an ObjectHeader.
* Thus, we read in the object header and make the object
for (i = 0; ok && i < YAFFS_NOBJECT_BUCKETS; i++) {
list_for_each(lh, &dev->obj_bucket[i].list) {
- if (lh) {
- obj =
- list_entry(lh, struct yaffs_obj, hash_link);
- if (!obj->defered_free) {
- yaffs2_obj_checkpt_obj(&cp, obj);
- cp.struct_type = sizeof(cp);
-
- yaffs_trace(YAFFS_TRACE_CHECKPOINT,
- "Checkpoint write object %d parent %d type %d chunk %d obj addr %p",
- cp.obj_id, cp.parent_id,
- cp.variant_type, cp.hdr_chunk, obj);
-
- ok = (yaffs2_checkpt_wr
- (dev, &cp,
+ obj = list_entry(lh, struct yaffs_obj, hash_link);
+ if (!obj->defered_free) {
+ yaffs2_obj_checkpt_obj(&cp, obj);
+ cp.struct_type = sizeof(cp);
+
+ yaffs_trace(YAFFS_TRACE_CHECKPOINT,
+ "Checkpoint write object %d parent %d type %d chunk %d obj addr %p",
+ cp.obj_id, cp.parent_id,
+ cp.variant_type, cp.hdr_chunk, obj);
+
+ ok = (yaffs2_checkpt_wr(dev, &cp,
sizeof(cp)) == sizeof(cp));
- if (ok
- && obj->variant_type ==
- YAFFS_OBJECT_TYPE_FILE)
- ok = yaffs2_wr_checkpt_tnodes
- (obj);
- }
+ if (ok &&
+ obj->variant_type ==
+ YAFFS_OBJECT_TYPE_FILE)
+ ok = yaffs2_wr_checkpt_tnodes(obj);
}
}
}
#define MTD_VERSION(a, b, c) (((a) << 16) + ((b) << 8) + (c))
+#ifdef YAFFS_OUT_OF_TREE
#include "moduleconfig.h"
+#endif
#include <linux/version.h>
#define MTD_VERSION_CODE LINUX_VERSION_CODE
#endif
#define yaffs_trace(msk, fmt, ...) do { \
- if(yaffs_trace_mask & ((msk) | YAFFS_TRACE_ALWAYS)) \
+ if(yaffs_trace_mask & (msk)) \
printk(KERN_DEBUG "yaffs: " fmt "\n", ##__VA_ARGS__); \
} while(0)
#endif
#define yaffs_trace(msk, fmt, ...) do { \
- if(yaffs_trace_mask & ((msk) | YAFFS_TRACE_ALWAYS)) \
+ if(yaffs_trace_mask & (msk)) \
printk(KERN_DEBUG "yaffs: " fmt "\n", ##__VA_ARGS__); \
} while(0)