Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fc1495bf authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* git://git.infradead.org/ubifs-2.6:
  UBIFS: fix return code in check_leaf
  UBI: flush wl before clearing update marker
  MAINTAINERS: change e-mail of Artem Bityutskiy
  UBIFS: remove manual O_SYNC handling
  UBIFS: support mounting of UBI volume character devices
  UBI: Add ubi_open_volume_path
parents 5476ffd2 b38882f5
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -5335,7 +5335,7 @@ S: Maintained
F:	drivers/scsi/u14-34f.c

UBI FILE SYSTEM (UBIFS)
M:	Artem Bityutskiy <dedekind@infradead.org>
M:	Artem Bityutskiy <dedekind1@gmail.com>
M:	Adrian Hunter <adrian.hunter@nokia.com>
L:	linux-mtd@lists.infradead.org
T:	git git://git.infradead.org/ubifs-2.6.git
@@ -5386,7 +5386,7 @@ F: drivers/cdrom/cdrom.c
F:	include/linux/cdrom.h

UNSORTED BLOCK IMAGES (UBI)
M:	Artem Bityutskiy <dedekind@infradead.org>
M:	Artem Bityutskiy <dedekind1@gmail.com>
W:	http://www.linux-mtd.infradead.org/
L:	linux-mtd@lists.infradead.org
T:	git git://git.infradead.org/ubi-2.6.git
+40 −0
Original line number Diff line number Diff line
@@ -22,6 +22,8 @@

#include <linux/module.h>
#include <linux/err.h>
#include <linux/namei.h>
#include <linux/fs.h>
#include <asm/div64.h>
#include "ubi.h"

@@ -279,6 +281,44 @@ struct ubi_volume_desc *ubi_open_volume_nm(int ubi_num, const char *name,
}
EXPORT_SYMBOL_GPL(ubi_open_volume_nm);

/**
 * ubi_open_volume_path - open UBI volume by its character device node path.
 * @pathname: volume character device node path
 * @mode: open mode
 *
 * This function is similar to 'ubi_open_volume()', but opens a volume the path
 * to its character device node.
 */
struct ubi_volume_desc *ubi_open_volume_path(const char *pathname, int mode)
{
	int error, ubi_num, vol_id;
	struct ubi_volume_desc *ret;
	struct inode *inode;
	struct path path;

	dbg_gen("open volume %s, mode %d", pathname, mode);

	if (!pathname || !*pathname)
		return ERR_PTR(-EINVAL);

	error = kern_path(pathname, LOOKUP_FOLLOW, &path);
	if (error)
		return ERR_PTR(error);

	inode = path.dentry->d_inode;
	ubi_num = ubi_major2num(imajor(inode));
	vol_id = iminor(inode) - 1;

	if (vol_id >= 0 && ubi_num >= 0)
		ret = ubi_open_volume(ubi_num, vol_id, mode);
	else
		ret = ERR_PTR(-ENODEV);

	path_put(&path);
	return ret;
}
EXPORT_SYMBOL_GPL(ubi_open_volume_path);

/**
 * ubi_close_volume - close UBI volume.
 * @desc: volume descriptor
+11 −9
Original line number Diff line number Diff line
@@ -147,11 +147,13 @@ int ubi_start_update(struct ubi_device *ubi, struct ubi_volume *vol,
	}

	if (bytes == 0) {
		err = ubi_wl_flush(ubi);
		if (err)
			return err;

		err = clear_update_marker(ubi, vol, 0);
		if (err)
			return err;
		err = ubi_wl_flush(ubi);
		if (!err)
		vol->updating = 0;
	}

@@ -362,17 +364,17 @@ int ubi_more_update_data(struct ubi_device *ubi, struct ubi_volume *vol,

	ubi_assert(vol->upd_received <= vol->upd_bytes);
	if (vol->upd_received == vol->upd_bytes) {
		err = ubi_wl_flush(ubi);
		if (err)
			return err;
		/* The update is finished, clear the update marker */
		err = clear_update_marker(ubi, vol, vol->upd_bytes);
		if (err)
			return err;
		err = ubi_wl_flush(ubi);
		if (err == 0) {
		vol->updating = 0;
		err = to_write;
		vfree(vol->upd_buf);
	}
	}

	return err;
}
+1 −1
Original line number Diff line number Diff line
@@ -2014,7 +2014,7 @@ static int check_leaf(struct ubifs_info *c, struct ubifs_zbranch *zbr,
		inum = key_inum_flash(c, &dent->key);
		fscki1 = read_add_inode(c, priv, inum);
		if (IS_ERR(fscki1)) {
			err = PTR_ERR(fscki);
			err = PTR_ERR(fscki1);
			ubifs_err("error %d while processing entry node and "
				  "trying to find parent inode node %lu",
				  err, (unsigned long)inum);
+1 −12
Original line number Diff line number Diff line
@@ -1389,7 +1389,6 @@ static ssize_t ubifs_aio_write(struct kiocb *iocb, const struct iovec *iov,
			       unsigned long nr_segs, loff_t pos)
{
	int err;
	ssize_t ret;
	struct inode *inode = iocb->ki_filp->f_mapping->host;
	struct ubifs_info *c = inode->i_sb->s_fs_info;

@@ -1397,17 +1396,7 @@ static ssize_t ubifs_aio_write(struct kiocb *iocb, const struct iovec *iov,
	if (err)
		return err;

	ret = generic_file_aio_write(iocb, iov, nr_segs, pos);
	if (ret < 0)
		return ret;

	if (ret > 0 && (IS_SYNC(inode) || iocb->ki_filp->f_flags & O_SYNC)) {
		err = ubifs_sync_wbufs_by_inode(c, inode);
		if (err)
			return err;
	}

	return ret;
	return generic_file_aio_write(iocb, iov, nr_segs, pos);
}

static int ubifs_set_page_dirty(struct page *page)
Loading