COL_PID,
COL_TYPE,
COL_SIZE,
+ COL_INODE,
+ COL_MAJMIN,
COL_MODE,
COL_M,
COL_START,
[COL_PID] = { "PID", 5, SCOLS_FL_RIGHT, N_("PID of the process holding the lock") },
[COL_TYPE] = { "TYPE", 5, SCOLS_FL_RIGHT, N_("kind of lock") },
[COL_SIZE] = { "SIZE", 4, SCOLS_FL_RIGHT, N_("size of the lock") },
+ [COL_INODE] = { "INODE", 5, SCOLS_FL_RIGHT, N_("inode number") },
+ [COL_MAJMIN] = { "MAJ:MIN", 6, 0, N_("major:minor device number") },
[COL_MODE] = { "MODE", 5, 0, N_("lock access mode") },
[COL_M] = { "M", 1, 0, N_("mandatory state of the lock: 0 (none), 1 (set)")},
[COL_START] = { "START", 10, SCOLS_FL_RIGHT, N_("relative byte offset of the lock")},
char *mode;
off_t start;
off_t end;
+ ino_t inode;
+ dev_t dev;
unsigned int mandatory :1,
blocked :1;
uint64_t size;
static int get_local_locks(struct list_head *locks)
{
int i;
- ino_t inode = 0;
FILE *fp;
char buf[PATH_MAX], *tok = NULL;
size_t sz;
struct lock *l;
- dev_t dev = 0;
if (!(fp = fopen(_PATH_PROC_LOCKS, "r")))
return -1;
break;
case 5: /* device major:minor and inode number */
- inode = get_dev_inode(tok, &dev);
+ l->inode = get_dev_inode(tok, &l->dev);
break;
case 6: /* start */
}
}
- l->path = get_filename_sz(inode, l->pid, &sz);
+ l->path = get_filename_sz(l->inode, l->pid, &sz);
/* no permissions -- ignore */
if (!l->path && no_inaccessible) {
if (!l->path) {
/* probably no permission to peek into l->pid's path */
- l->path = get_fallback_filename(dev);
+ l->path = get_fallback_filename(l->dev);
l->size = 0;
} else
l->size = sz;
case COL_TYPE:
xasprintf(&str, "%s", l->type);
break;
+ case COL_INODE:
+ xasprintf(&str, "%ju", (uintmax_t) l->inode);
+ break;
+ case COL_MAJMIN:
+ if (json || raw)
+ xasprintf(&str, "%u:%u", major(l->dev), minor(l->dev));
+ else
+ xasprintf(&str, "%3u:%-3u", major(l->dev), minor(l->dev));
+ break;
case COL_SIZE:
if (!l->size)
break;
case COL_START:
case COL_END:
case COL_BLOCKER:
+ case COL_INODE:
scols_column_set_json_type(cl, SCOLS_JSON_NUMBER);
break;
case COL_M: