Loading fs/adfs/adfs.h +3 −1 Original line number Diff line number Diff line Loading @@ -53,6 +53,7 @@ struct adfs_dir_ops { int (*update)(struct adfs_dir *dir, struct object_info *obj); int (*create)(struct adfs_dir *dir, struct object_info *obj); int (*remove)(struct adfs_dir *dir, struct object_info *obj); int (*sync)(struct adfs_dir *dir); void (*free)(struct adfs_dir *dir); }; Loading Loading @@ -90,7 +91,8 @@ extern const struct dentry_operations adfs_dentry_operations; extern struct adfs_dir_ops adfs_f_dir_ops; extern struct adfs_dir_ops adfs_fplus_dir_ops; extern int adfs_dir_update(struct super_block *sb, struct object_info *obj); extern int adfs_dir_update(struct super_block *sb, struct object_info *obj, int wait); /* file.c */ extern const struct inode_operations adfs_file_inode_operations; Loading fs/adfs/dir.c +8 −2 Original line number Diff line number Diff line Loading @@ -83,7 +83,7 @@ adfs_readdir(struct file *filp, void *dirent, filldir_t filldir) } int adfs_dir_update(struct super_block *sb, struct object_info *obj) adfs_dir_update(struct super_block *sb, struct object_info *obj, int wait) { int ret = -EINVAL; #ifdef CONFIG_ADFS_FS_RW Loading @@ -106,6 +106,12 @@ adfs_dir_update(struct super_block *sb, struct object_info *obj) ret = ops->update(&dir, obj); write_unlock(&adfs_dir_lock); if (wait) { int err = ops->sync(&dir); if (!ret) ret = err; } ops->free(&dir); out: #endif Loading Loading @@ -199,7 +205,7 @@ const struct file_operations adfs_dir_operations = { .read = generic_read_dir, .llseek = generic_file_llseek, .readdir = adfs_readdir, .fsync = file_fsync, .fsync = simple_fsync, }; static int Loading fs/adfs/dir_f.c +17 −0 Original line number Diff line number Diff line Loading @@ -437,6 +437,22 @@ adfs_f_update(struct adfs_dir *dir, struct object_info *obj) #endif } static int adfs_f_sync(struct adfs_dir *dir) { int err = 0; int i; for (i = dir->nr_buffers - 1; i >= 0; i--) { struct buffer_head *bh = dir->bh[i]; sync_dirty_buffer(bh); if (buffer_req(bh) && !buffer_uptodate(bh)) err = -EIO; } return err; } static void adfs_f_free(struct adfs_dir *dir) { Loading @@ -456,5 +472,6 @@ struct adfs_dir_ops adfs_f_dir_ops = { .setpos = adfs_f_setpos, .getnext = adfs_f_getnext, .update = adfs_f_update, .sync = adfs_f_sync, .free = adfs_f_free }; fs/adfs/dir_fplus.c +17 −0 Original line number Diff line number Diff line Loading @@ -161,6 +161,22 @@ adfs_fplus_getnext(struct adfs_dir *dir, struct object_info *obj) return ret; } static int adfs_fplus_sync(struct adfs_dir *dir) { int err = 0; int i; for (i = dir->nr_buffers - 1; i >= 0; i--) { struct buffer_head *bh = dir->bh[i]; sync_dirty_buffer(bh); if (buffer_req(bh) && !buffer_uptodate(bh)) err = -EIO; } return err; } static void adfs_fplus_free(struct adfs_dir *dir) { Loading @@ -175,5 +191,6 @@ struct adfs_dir_ops adfs_fplus_dir_ops = { .read = adfs_fplus_read, .setpos = adfs_fplus_setpos, .getnext = adfs_fplus_getnext, .sync = adfs_fplus_sync, .free = adfs_fplus_free }; fs/adfs/file.c +1 −1 Original line number Diff line number Diff line Loading @@ -30,7 +30,7 @@ const struct file_operations adfs_file_operations = { .read = do_sync_read, .aio_read = generic_file_aio_read, .mmap = generic_file_mmap, .fsync = file_fsync, .fsync = simple_fsync, .write = do_sync_write, .aio_write = generic_file_aio_write, .splice_read = generic_file_splice_read, Loading Loading
fs/adfs/adfs.h +3 −1 Original line number Diff line number Diff line Loading @@ -53,6 +53,7 @@ struct adfs_dir_ops { int (*update)(struct adfs_dir *dir, struct object_info *obj); int (*create)(struct adfs_dir *dir, struct object_info *obj); int (*remove)(struct adfs_dir *dir, struct object_info *obj); int (*sync)(struct adfs_dir *dir); void (*free)(struct adfs_dir *dir); }; Loading Loading @@ -90,7 +91,8 @@ extern const struct dentry_operations adfs_dentry_operations; extern struct adfs_dir_ops adfs_f_dir_ops; extern struct adfs_dir_ops adfs_fplus_dir_ops; extern int adfs_dir_update(struct super_block *sb, struct object_info *obj); extern int adfs_dir_update(struct super_block *sb, struct object_info *obj, int wait); /* file.c */ extern const struct inode_operations adfs_file_inode_operations; Loading
fs/adfs/dir.c +8 −2 Original line number Diff line number Diff line Loading @@ -83,7 +83,7 @@ adfs_readdir(struct file *filp, void *dirent, filldir_t filldir) } int adfs_dir_update(struct super_block *sb, struct object_info *obj) adfs_dir_update(struct super_block *sb, struct object_info *obj, int wait) { int ret = -EINVAL; #ifdef CONFIG_ADFS_FS_RW Loading @@ -106,6 +106,12 @@ adfs_dir_update(struct super_block *sb, struct object_info *obj) ret = ops->update(&dir, obj); write_unlock(&adfs_dir_lock); if (wait) { int err = ops->sync(&dir); if (!ret) ret = err; } ops->free(&dir); out: #endif Loading Loading @@ -199,7 +205,7 @@ const struct file_operations adfs_dir_operations = { .read = generic_read_dir, .llseek = generic_file_llseek, .readdir = adfs_readdir, .fsync = file_fsync, .fsync = simple_fsync, }; static int Loading
fs/adfs/dir_f.c +17 −0 Original line number Diff line number Diff line Loading @@ -437,6 +437,22 @@ adfs_f_update(struct adfs_dir *dir, struct object_info *obj) #endif } static int adfs_f_sync(struct adfs_dir *dir) { int err = 0; int i; for (i = dir->nr_buffers - 1; i >= 0; i--) { struct buffer_head *bh = dir->bh[i]; sync_dirty_buffer(bh); if (buffer_req(bh) && !buffer_uptodate(bh)) err = -EIO; } return err; } static void adfs_f_free(struct adfs_dir *dir) { Loading @@ -456,5 +472,6 @@ struct adfs_dir_ops adfs_f_dir_ops = { .setpos = adfs_f_setpos, .getnext = adfs_f_getnext, .update = adfs_f_update, .sync = adfs_f_sync, .free = adfs_f_free };
fs/adfs/dir_fplus.c +17 −0 Original line number Diff line number Diff line Loading @@ -161,6 +161,22 @@ adfs_fplus_getnext(struct adfs_dir *dir, struct object_info *obj) return ret; } static int adfs_fplus_sync(struct adfs_dir *dir) { int err = 0; int i; for (i = dir->nr_buffers - 1; i >= 0; i--) { struct buffer_head *bh = dir->bh[i]; sync_dirty_buffer(bh); if (buffer_req(bh) && !buffer_uptodate(bh)) err = -EIO; } return err; } static void adfs_fplus_free(struct adfs_dir *dir) { Loading @@ -175,5 +191,6 @@ struct adfs_dir_ops adfs_fplus_dir_ops = { .read = adfs_fplus_read, .setpos = adfs_fplus_setpos, .getnext = adfs_fplus_getnext, .sync = adfs_fplus_sync, .free = adfs_fplus_free };
fs/adfs/file.c +1 −1 Original line number Diff line number Diff line Loading @@ -30,7 +30,7 @@ const struct file_operations adfs_file_operations = { .read = do_sync_read, .aio_read = generic_file_aio_read, .mmap = generic_file_mmap, .fsync = file_fsync, .fsync = simple_fsync, .write = do_sync_write, .aio_write = generic_file_aio_write, .splice_read = generic_file_splice_read, Loading